diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index 9cc4454..5c94425 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -213,6 +213,11 @@ const find = (selector, elm) => { return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr; }; +const findFirst = (selector, elm) => { + const rootElm = elm ? (isElement(elm) ? elm : null) : document; + return rootElm ? rootElm.querySelector(selector) : null; +}; + const is = (elm, selector) => { if (isElement(elm)) { const fn = elmPrototype.matches || elmPrototype.msMatchesSelector; @@ -226,6 +231,36 @@ const contents = (elm) => (elm ? from(elm.childNodes) : []); const parent = (elm) => (elm ? elm.parentElement : null); +const closest = (elm, selector) => { + if (isElement(elm)) { + const closestFn = elmPrototype.closest; + + if (closestFn) { + return closestFn.call(elm, selector); + } + + do { + if (is(elm, selector)) { + return elm; + } + + elm = parent(elm); + } while (elm); + } + + return null; +}; + +const liesBetween = (elm, highBoundarySelector, deepBoundarySelector) => { + const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector); + const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm); + return closestHighBoundaryElm && closestDeepBoundaryElm + ? closestHighBoundaryElm === elm || + closestDeepBoundaryElm === elm || + closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm + : false; +}; + const before = (parentElm, preferredAnchor, insertedElms) => { if (insertedElms) { let anchor = preferredAnchor; @@ -345,6 +380,22 @@ const addClass = (elm, className) => { const removeClass = (elm, className) => { classListAction(elm, className, (classList, clazz) => classList.remove(clazz)); }; +const diffClass = (classNameA, classNameB) => { + const classNameASplit = classNameA && classNameA.split(' '); + const classNameBSplit = classNameB && classNameB.split(' '); + const tempObj = {}; + each(classNameASplit, (className) => { + tempObj[className] = 1; + }); + each(classNameBSplit, (className) => { + if (tempObj[className]) { + delete tempObj[className]; + } else { + tempObj[className] = 1; + } + }); + return keys(tempObj); +}; const zeroObj = { w: 0, @@ -451,7 +502,6 @@ const equal = (a, b, props, propMutation) => { return false; }; const equalWH = (a, b) => equal(a, b, ['w', 'h']); -const equalXY = (a, b) => equal(a, b, ['x', 'y']); const equalTRBL = (a, b) => equal(a, b, ['t', 'r', 'b', 'l']); const equalBCRWH = (a, b, round) => equal(a, b, ['width', 'height'], round && ((value) => Math.round(value))); @@ -714,7 +764,7 @@ const stringArrayNullAllowedValues = [optionsTemplateTypes.string, optionsTempla const booleanTrueTemplate = [true, optionsTemplateTypes.boolean]; const booleanFalseTemplate = [false, optionsTemplateTypes.boolean]; const resizeAllowedValues = 'none both horizontal vertical'; -const overflowAllowedValues = 'visible-hidden visible-scroll scroll hidden'; +const overflowAllowedValues = 'hidden scroll visible visible-hidden'; const scrollbarsVisibilityAllowedValues = 'visible hidden auto'; const scrollbarsAutoHideAllowedValues = 'never scroll leavemove'; const defaultOptionsWithTemplate = { @@ -1074,14 +1124,20 @@ const createTrinsicLifecycle = (lifecycleHub) => { if (heightIntrinsicChanged) { style(_content, { - height: heightIntrinsic ? 'auto' : '100%', + height: heightIntrinsic ? '' : '100%', + display: heightIntrinsic ? '' : 'inline', }); } + + return { + _sizeChanged: heightIntrinsicChanged, + _contentMutation: heightIntrinsicChanged, + }; }; }; const createPaddingLifecycle = (lifecycleHub) => { - const { _setPaddingInfo, _setViewportPaddingStyle, _structureSetup } = lifecycleHub; + const { _structureSetup, _setLifecycleCommunication } = lifecycleHub; const { _host, _padding, _viewport } = _structureSetup._targetObj; const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), { _equal: equalTRBL, @@ -1133,12 +1189,13 @@ const createPaddingLifecycle = (lifecycleHub) => { style(_padding || _viewport, paddingStyle); style(_viewport, viewportStyle); - _setPaddingInfo({ - _absolute: !paddingRelative, - _padding: _padding2, + _setLifecycleCommunication({ + _paddingInfo: { + _absolute: !paddingRelative, + _padding: _padding2, + }, + _viewportPaddingStyle: _padding ? viewportStyle : _extends_1({}, paddingStyle, viewportStyle), }); - - _setViewportPaddingStyle(_padding ? viewportStyle : _extends_1({}, paddingStyle, viewportStyle)); } return { @@ -1149,8 +1206,8 @@ const createPaddingLifecycle = (lifecycleHub) => { const overlaidScrollbarsHideOffset = 42; const createOverflowLifecycle = (lifecycleHub) => { - const { _structureSetup, _doViewportArrange, _getViewportPaddingStyle, _getPaddingInfo, _setViewportOverflowScroll } = lifecycleHub; - const { _host, _padding, _viewport, _viewportArrange } = _structureSetup._targetObj; + const { _structureSetup, _doViewportArrange, _getLifecycleCommunication, _setLifecycleCommunication } = lifecycleHub; + const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj; const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache( (ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { @@ -1159,14 +1216,14 @@ const createOverflowLifecycle = (lifecycleHub) => { ); const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache( (ctx) => ({ - x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w), - y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h), + w: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w), + h: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h), }), { - _equal: equalXY, + _equal: equalWH, _initialValue: { - x: 0, - y: 0, + w: 0, + h: 0, }, } ); @@ -1182,16 +1239,16 @@ const createOverflowLifecycle = (lifecycleHub) => { }); if (heightIntrinsic) { - const { _absolute: paddingAbsolute, _padding: padding } = _getPaddingInfo(); + const { _absolute: paddingAbsolute, _padding: padding } = _getLifecycleCommunication()._paddingInfo; const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState; const hostBCR = getBoundingClientRect(_host); const hostOffsetSize = offsetSize(_host); const hostClientSize = clientSize(_host); - const paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0; + const paddingVertical = paddingAbsolute || style(_viewport, 'boxSizing') === 'content-box' ? padding.b + padding.t : 0; const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h); style(_viewport, { - height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical, + height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingVertical, }); } }; @@ -1223,23 +1280,26 @@ const createOverflowLifecycle = (lifecycleHub) => { const setViewportOverflowState = (showNativeOverlaidScrollbars, overflowAmount, overflow, viewportStyleObj) => { const setPartialStylePerAxis = (horizontal, overflowAmount, behavior, styleObj) => { const overflowKey = horizontal ? 'overflowX' : 'overflowY'; + const behaviorIsVisible = behavior.indexOf('visible') === 0; + const behaviorIsVisibleHidden = behavior === 'visible-hidden'; const behaviorIsScroll = behavior === 'scroll'; - const behaviorIsVisibleScroll = behavior === 'visible-scroll'; - const hideOverflow = behaviorIsScroll || behavior === 'hidden'; - const applyStyle = overflowAmount > 0 && hideOverflow; - if (applyStyle) { + if (behaviorIsVisible) { + styleObj[overflowKey] = 'visible'; + } + + if (behaviorIsScroll && overflowAmount > 0) { styleObj[overflowKey] = behavior; } return { - _visible: !applyStyle, - _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden', + _visible: behaviorIsVisible, + _behavior: behaviorIsVisibleHidden ? 'hidden' : 'scroll', }; }; - const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount.x, overflow.x, viewportStyleObj); - const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount.y, overflow.y, viewportStyleObj); + const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount.w, overflow.x, viewportStyleObj); + const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount.h, overflow.y, viewportStyleObj); if (xVisible && !yVisible) { viewportStyleObj.overflowX = xVisibleBehavior; @@ -1258,7 +1318,7 @@ const createOverflowLifecycle = (lifecycleHub) => { const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset; - const viewportPaddingStyle = _getViewportPaddingStyle(); + const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication(); const viewportArrangeHorizontalPaddingKey = directionIsRTL ? 'paddingRight' : 'paddingLeft'; const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey]; @@ -1296,20 +1356,18 @@ const createOverflowLifecycle = (lifecycleHub) => { }; const hideNativeScrollbars = (viewportOverflowState, directionIsRTL, viewportArrange, viewportStyleObj) => { - const { _nativeScrollbarStyling } = getEnvironment(); - const { _overflowScroll, _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState; + const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState; const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset; - const { x: scrollX, y: scrollY } = _overflowScroll; - const paddingStyle = _getViewportPaddingStyle(); + const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication(); const horizontalMarginKey = directionIsRTL ? 'marginLeft' : 'marginRight'; const viewportHorizontalPaddingKey = directionIsRTL ? 'paddingLeft' : 'paddingRight'; - const horizontalMarginValue = paddingStyle[horizontalMarginKey]; - const verticalMarginValue = paddingStyle.marginBottom; - const horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey]; - const verticalPaddingValue = paddingStyle.paddingBottom; + const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey]; + const verticalMarginValue = viewportPaddingStyle.marginBottom; + const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey]; + const verticalPaddingValue = viewportPaddingStyle.paddingBottom; viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`; viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue; viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue; @@ -1318,19 +1376,13 @@ const createOverflowLifecycle = (lifecycleHub) => { viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0); viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0); } - - if (!_nativeScrollbarStyling) { - style(_padding || _host, { - overflow: scrollX || scrollY ? 'hidden' : '', - }); - } }; - const undoViewportArrange = (showNativeOverlaidScrollbars, viewportOverflowState) => { + const undoViewportArrange = (showNativeOverlaidScrollbars, directionIsRTL, viewportOverflowState) => { if (_doViewportArrange) { const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars); - const paddingStyle = _getViewportPaddingStyle(); + const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication(); const { _flexboxGlue } = getEnvironment(); const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState; @@ -1339,7 +1391,7 @@ const createOverflowLifecycle = (lifecycleHub) => { const assignProps = (props) => each(props.split(' '), (prop) => { - finalPaddingStyle[prop] = paddingStyle[prop]; + finalPaddingStyle[prop] = viewportPaddingStyle[prop]; }); if (!_flexboxGlue) { @@ -1359,6 +1411,7 @@ const createOverflowLifecycle = (lifecycleHub) => { style(_viewport, finalPaddingStyle); return { _redoViewportArrange: () => { + hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, _doViewportArrange, prevStyle); style(_viewport, prevStyle); addClass(_viewport, classNameViewportArrange); }, @@ -1402,6 +1455,7 @@ const createOverflowLifecycle = (lifecycleHub) => { if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) { const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange( showNativeOverlaidScrollbars, + directionIsRTL, preMeasureViewportOverflowState ); const contentSize = clientSize(_viewport); @@ -1471,7 +1525,10 @@ const createOverflowLifecycle = (lifecycleHub) => { style(_viewport, viewportStyle); - _setViewportOverflowScroll(viewportOverflowState._overflowScroll); + _setLifecycleCommunication({ + _viewportOverflowScroll: viewportOverflowState._overflowScroll, + _viewportOverflowAmount: overflowAmount, + }); } }; }; @@ -1593,16 +1650,12 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { const { _value, _changed } = directionIsRTLCacheValues; if (_changed) { + removeClass(listenerElement, 'ltr rtl'); + if (_value) { - style(listenerElement, { - left: 'auto', - right: 0, - }); + addClass(listenerElement, 'rtl'); } else { - style(listenerElement, { - left: 0, - right: 'auto', - }); + addClass(listenerElement, 'ltr'); } onSizeChangedCallbackProxy(directionIsRTLCacheValues); @@ -1884,7 +1937,8 @@ const createDOMObserver = (target, isContentObserver, callback, options) => { }; }; -const getPropByPath = (obj, path) => obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty$1(o, prop) ? o[prop] : undefined), obj); +const getPropByPath = (obj, path) => + obj ? path.split('.').reduce((o, prop) => (o && hasOwnProperty$1(o, prop) ? o[prop] : undefined), obj) : undefined; const emptyStylePropsToZero = (stlyeObj, baseStyle) => keys(stlyeObj).reduce((obj, key) => { @@ -1893,30 +1947,21 @@ const emptyStylePropsToZero = (stlyeObj, baseStyle) => return obj; }, _extends_1({}, baseStyle)); +const ignorePrefix = 'os-'; +const hostSelector = `.${classNameHost}`; +const viewportSelector = `.${classNameViewport}`; +const contentSelector = `.${classNameContent}`; const attrs = ['id', 'class', 'style', 'open']; -const paddingInfoFallback = { - _absolute: false, - _padding: { - t: 0, - r: 0, - b: 0, - l: 0, - }, -}; -const viewportPaddingStyleFallback = { - marginTop: 0, - marginRight: 0, - marginBottom: 0, - marginLeft: 0, - paddingTop: 0, - paddingRight: 0, - paddingBottom: 0, - paddingLeft: 0, -}; -const viewportOverflowScrollFallback = { - x: false, - y: false, + +const ignoreTargetChange = (target, attrName, oldValue, newValue) => { + if (attrName === 'class' && oldValue && newValue) { + const diff = diffClass(oldValue, newValue); + return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0); + } + + return false; }; + const directionIsRTLCacheValuesFallback = { _value: false, _previous: false, @@ -1927,10 +1972,37 @@ const heightIntrinsicCacheValuesFallback = { _previous: false, _changed: false, }; +const lifecycleCommunicationFallback = { + _paddingInfo: { + _absolute: false, + _padding: { + t: 0, + r: 0, + b: 0, + l: 0, + }, + }, + _viewportOverflowScroll: { + x: false, + y: false, + }, + _viewportOverflowAmount: { + w: 0, + h: 0, + }, + _viewportPaddingStyle: { + marginTop: 0, + marginRight: 0, + marginBottom: 0, + marginLeft: 0, + paddingTop: 0, + paddingRight: 0, + paddingBottom: 0, + paddingLeft: 0, + }, +}; const createLifecycleHub = (options, structureSetup) => { - let paddingInfo = paddingInfoFallback; - let viewportPaddingStyle = viewportPaddingStyleFallback; - let viewportOverflowScroll = viewportOverflowScrollFallback; + let lifecycleCommunication = lifecycleCommunicationFallback; const { _host, _viewport, _content } = structureSetup._targetObj; const { _nativeScrollbarStyling, @@ -1945,22 +2017,17 @@ const createLifecycleHub = (options, structureSetup) => { _options: options, _structureSetup: structureSetup, _doViewportArrange: doViewportArrange, - _getPaddingInfo: () => paddingInfo, + _getLifecycleCommunication: () => lifecycleCommunication, - _setPaddingInfo(newPaddingInfo) { - paddingInfo = newPaddingInfo || paddingInfoFallback; - }, + _setLifecycleCommunication(newLifecycleCommunication) { + if (newLifecycleCommunication && newLifecycleCommunication._viewportPaddingStyle) { + newLifecycleCommunication._viewportPaddingStyle = emptyStylePropsToZero( + newLifecycleCommunication._viewportPaddingStyle, + lifecycleCommunicationFallback._viewportPaddingStyle + ); + } - _getViewportPaddingStyle: () => viewportPaddingStyle, - - _setViewportPaddingStyle(newPaddingStlye) { - viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback; - }, - - _getViewportOverflowScroll: () => viewportOverflowScroll, - - _setViewportOverflowScroll(newViewportOverflowScroll) { - viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback; + lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication); }, }; push(lifecycles, createTrinsicLifecycle(instance)); @@ -2061,11 +2128,22 @@ const createLifecycleHub = (options, structureSetup) => { const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, { _styleChangingAttributes: attrs, _attributes: attrs, + _ignoreTargetChange: ignoreTargetChange, }); const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { _styleChangingAttributes: attrs, _attributes: attrs, _eventContentChange: options.updating.elementEvents, + _nestedTargetSelector: hostSelector, + _ignoreContentChange: (mutation, isNestedTarget) => { + const { target, attributeName } = mutation; + return isNestedTarget + ? false + : attributeName + ? liesBetween(target, hostSelector, viewportSelector) || liesBetween(target, hostSelector, contentSelector) + : false; + }, + _ignoreNestedTargetChange: ignoreTargetChange, }); const update = (changedOptions, force) => { @@ -2074,8 +2152,12 @@ const createLifecycleHub = (options, structureSetup) => { const envUpdateListener = update.bind(null, null, true); addEnvironmentListener(envUpdateListener); + console.log(getEnvironment()); return { _update: update, + _state: () => ({ + _overflowAmount: lifecycleCommunication._viewportOverflowAmount, + }), _destroy() { removeEnvironmentListener(envUpdateListener); @@ -2103,6 +2185,8 @@ const OverlayScrollbars = (target, options, extensions) => { return currentOptions; }, + state: () => lifecycleHub._state(), + update(force) { lifecycleHub._update(null, force); }, diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 8a101f4..9011892 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | false | null | undefined, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | null | undefined): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n opacity: 1,\r\n //order: 1,\r\n //orphans: 1,\r\n //widows: 1,\r\n zindex: 1,\r\n //zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as T, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\r\n};\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): OptionsWithOptionsTemplateTransformation => {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: ReadonlyArray<[string, string]> | null;\r\n contentMutationDebounce: number;\r\n hostMutationDebounce: number;\r\n resizeDebounce: number;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | ReadonlyArray | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n runEach,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? 'auto' : '100%',\r\n });\r\n }\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _setPaddingInfo, _setViewportPaddingStyle, _structureSetup } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setPaddingInfo({\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n });\r\n _setViewportPaddingStyle(\r\n _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n }\r\n );\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getViewportPaddingStyle, _getPaddingInfo, _setViewportOverflowScroll } = lifecycleHub;\r\n const { _host, _padding, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalXY, _initialValue: { x: 0, y: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getPaddingInfo();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n const paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: XY,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n const applyStyle = overflowAmount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.x, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.y, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportPaddingStyle = _getViewportPaddingStyle();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _overflowScroll, _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { x: scrollX, y: scrollY } = _overflowScroll;\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = paddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = paddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = paddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n\r\n // hide overflowing scrollbars if there are any\r\n if (!_nativeScrollbarStyling) {\r\n style(_padding || _host, {\r\n overflow: scrollX || scrollY ? 'hidden' : '',\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (showNativeOverlaidScrollbars: boolean, viewportOverflowState?: ViewportOverflowState): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = paddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginTop marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n preMeasureViewportOverflowState\r\n );\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, contentScrollSize!, directionIsRTL!)\r\n ) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setViewportOverflowScroll(viewportOverflowState._overflowScroll);\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\n/*\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction', 'writing-mode']);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\n*/\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, margin and border changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized();\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport interface TrinsicObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _heightIntrinsic: CacheValues;\r\n };\r\n}\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\n\r\ntype DOMContentObserverCallback = (contentChanged: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n _ignoreNestedTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed on nested targets if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true\r\n}\r\n\r\ninterface DOMObserverBase {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\r\n\r\ninterface DOMContentObserver extends DOMObserverBase {\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n}\r\n\r\ninterface DOMTargetObserver extends DOMObserverBase {}\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMContentObserverOptions | undefined\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = ContentObserver extends true ? DOMContentObserver : DOMTargetObserver;\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => {\r\n let map: Map | undefined;\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const _destroy = () => {\r\n if (map) {\r\n map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback));\r\n map.clear();\r\n }\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (map && eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));\r\n const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames;\r\n\r\n if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) {\r\n push(arr, [elements, parsedEventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const registredEventNames = map!.get(elm);\r\n const newEntry = isUndefined(registredEventNames);\r\n const changingExistingEntry = !newEntry && eventNames !== registredEventNames;\r\n const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;\r\n\r\n if (changingExistingEntry) {\r\n off(elm, registredEventNames!, callback);\r\n }\r\n\r\n map!.set(elm, finalEventNames);\r\n on(elm, finalEventNames, callback);\r\n })\r\n );\r\n }\r\n };\r\n const _updateEventContentChange = (newEventContentChange: DOMObserverEventContentChange) => {\r\n map = map || new Map();\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _updateEventContentChange(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _updateEventContentChange,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreNestedTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const {\r\n _destroy: destroyEventContentChange,\r\n _updateElements: updateEventContentChangeElements,\r\n _updateEventContentChange: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n isContentObserver && _eventContentChange,\r\n debounce(() => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(contentChanged);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _destroy: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && isContentObserver && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n } as DOMObserver;\r\n};\r\n","import { XY, TRBL, CacheValues, PartialOptions, each, push, keys, hasOwnProperty, isNumber, scrollLeft, scrollTop } from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface PaddingInfo {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getPaddingInfo(): PaddingInfo;\r\n _setPaddingInfo(newPadding?: PaddingInfo | null): void;\r\n // padding related styles applied to the viewport element\r\n _getViewportPaddingStyle(): StyleObject;\r\n _setViewportPaddingStyle(newPaddingStlye?: StyleObject | null): void;\r\n _getViewportOverflowScroll(): XY;\r\n _setViewportOverflowScroll(newViewportOverflowScroll: XY): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: tabindex, open etc.\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst paddingInfoFallback: PaddingInfo = {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n};\r\nconst viewportPaddingStyleFallback: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n};\r\nconst viewportOverflowScrollFallback: XY = {\r\n x: false,\r\n y: false,\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let paddingInfo = paddingInfoFallback;\r\n let viewportPaddingStyle = viewportPaddingStyleFallback;\r\n let viewportOverflowScroll = viewportOverflowScrollFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getPaddingInfo: () => paddingInfo,\r\n _setPaddingInfo(newPaddingInfo) {\r\n paddingInfo = newPaddingInfo || paddingInfoFallback;\r\n },\r\n _getViewportPaddingStyle: () => viewportPaddingStyle,\r\n _setViewportPaddingStyle(newPaddingStlye) {\r\n viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback;\r\n },\r\n _getViewportOverflowScroll: () => viewportOverflowScroll,\r\n _setViewportOverflowScroll(newViewportOverflowScroll) {\r\n viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback;\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n return {\r\n _update: update,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","stopAndPrevent","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","contentMutationDebounce","hostMutationDebounce","resizeDebounce","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","createPaddingLifecycle","_setPaddingInfo","_setViewportPaddingStyle","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_sizeChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_absolute","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getViewportPaddingStyle","_getPaddingInfo","_setViewportOverflowScroll","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateOverflowAmountCache","getCurrentOverflowAmountCache","max","_contentScrollSize","_viewportSize","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","paddingAbsoluteVertical","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","overflowAmount","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","scrollX","scrollY","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","contentSize","viewportClientSize","contentScrollSizeChanged","overflowChanged","overflowAmountChanged","viewportArranged","animationStartEventName","scrollEventName","scrollAmount","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","clear","_updateElements","getElements","eventElmList","elements","parsedEventNames","registredEventNames","newEntry","changingExistingEntry","finalEventNames","_updateEventContentChange","newEventContentChange","Map","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","attrs","paddingInfoFallback","viewportPaddingStyleFallback","viewportOverflowScrollFallback","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","paddingInfo","viewportOverflowScroll","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newPaddingInfo","newPaddingStlye","_getViewportOverflowScroll","newViewportOverflowScroll","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","envUpdateListener","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | false | null | undefined, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | null | undefined): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n opacity: 1,\r\n //order: 1,\r\n //orphans: 1,\r\n //widows: 1,\r\n zindex: 1,\r\n //zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as T, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\r\n};\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): OptionsWithOptionsTemplateTransformation => {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible' | 'visible-hidden';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[string, string]> | null;\r\n contentMutationDebounce: number;\r\n hostMutationDebounce: number;\r\n resizeDebounce: number;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | Array | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n runEach,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? '' : '100%',\r\n display: heightIntrinsic ? '' : 'inline',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _paddingInfo: {\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n },\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n },\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getLifecycleCommunication, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n w: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n h: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalWH, _initialValue: { w: 0, h: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const paddingVertical = paddingAbsolute || style(_viewport, 'boxSizing') === 'content-box' ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: WH,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsVisible = behavior.indexOf('visible') === 0;\r\n const behaviorIsVisibleHidden = behavior === 'visible-hidden';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && overflowAmount > 0) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: behaviorIsVisible,\r\n _behavior: behaviorIsVisibleHidden ? 'hidden' : 'scroll',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.w, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.h, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginTop marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, _doViewportArrange, prevStyle);\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n preMeasureViewportOverflowState\r\n );\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, contentScrollSize!, directionIsRTL!)\r\n ) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n // TODO: overflow: visible on padding / host if overflow visible on both axis\r\n // TODO: change lifecyclehub communication to single object & assign\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _viewportOverflowScroll: viewportOverflowState._overflowScroll,\r\n _viewportOverflowAmount: overflowAmount,\r\n });\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\n/*\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction', 'writing-mode']);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\n*/\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized();\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (_value) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport interface TrinsicObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _heightIntrinsic: CacheValues;\r\n };\r\n}\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\n\r\ntype DOMContentObserverCallback = (contentChanged: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n _ignoreNestedTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed on nested targets if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true\r\n}\r\n\r\ninterface DOMObserverBase {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\r\n\r\ninterface DOMContentObserver extends DOMObserverBase {\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n}\r\n\r\ninterface DOMTargetObserver extends DOMObserverBase {}\r\n\r\ntype ContentChangeArrayItem = [StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange = Array | false | null | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMContentObserverOptions | undefined\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = ContentObserver extends true ? DOMContentObserver : DOMTargetObserver;\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => {\r\n let map: Map | undefined;\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const _destroy = () => {\r\n if (map) {\r\n map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback));\r\n map.clear();\r\n }\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (map && eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));\r\n const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames;\r\n\r\n if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) {\r\n push(arr, [elements, parsedEventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const registredEventNames = map!.get(elm);\r\n const newEntry = isUndefined(registredEventNames);\r\n const changingExistingEntry = !newEntry && eventNames !== registredEventNames;\r\n const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;\r\n\r\n if (changingExistingEntry) {\r\n off(elm, registredEventNames!, callback);\r\n }\r\n\r\n map!.set(elm, finalEventNames);\r\n on(elm, finalEventNames, callback);\r\n })\r\n );\r\n }\r\n };\r\n const _updateEventContentChange = (newEventContentChange: DOMObserverEventContentChange) => {\r\n map = map || new Map();\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _updateEventContentChange(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _updateEventContentChange,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreNestedTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const {\r\n _destroy: destroyEventContentChange,\r\n _updateElements: updateEventContentChangeElements,\r\n _updateEventContentChange: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n isContentObserver && _eventContentChange,\r\n debounce(() => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(contentChanged);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _destroy: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && isContentObserver && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n } as DOMObserver;\r\n};\r\n","import {\r\n XY,\r\n WH,\r\n TRBL,\r\n CacheValues,\r\n PartialOptions,\r\n each,\r\n push,\r\n keys,\r\n hasOwnProperty,\r\n isNumber,\r\n scrollLeft,\r\n scrollTop,\r\n assignDeep,\r\n liesBetween,\r\n diffClass,\r\n} from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { classNameHost, classNameViewport, classNameContent } from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleCommunication {\r\n _paddingInfo: {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n };\r\n _viewportPaddingStyle: StyleObject;\r\n _viewportOverflowScroll: XY;\r\n _viewportOverflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubState {\r\n _overflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _state(): LifecycleHubState;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getLifecycleCommunication(): LifecycleCommunication;\r\n _setLifecycleCommunication(newLifecycleCommunication?: Partial): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj) : undefined;\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: tabindex, open etc.\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\nconst ignorePrefix = 'os-';\r\nconst hostSelector = `.${classNameHost}`;\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst contentSelector = `.${classNameContent}`;\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst ignoreTargetChange = (target: Node, attrName: string, oldValue: string | null, newValue: string | null) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0);\r\n }\r\n return false;\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst lifecycleCommunicationFallback: LifecycleCommunication = {\r\n _paddingInfo: {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n },\r\n _viewportOverflowScroll: {\r\n x: false,\r\n y: false,\r\n },\r\n _viewportOverflowAmount: {\r\n w: 0,\r\n h: 0,\r\n },\r\n _viewportPaddingStyle: {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getLifecycleCommunication: () => lifecycleCommunication,\r\n _setLifecycleCommunication(newLifecycleCommunication) {\r\n if (newLifecycleCommunication && newLifecycleCommunication._viewportPaddingStyle) {\r\n newLifecycleCommunication._viewportPaddingStyle = emptyStylePropsToZero(\r\n newLifecycleCommunication._viewportPaddingStyle,\r\n lifecycleCommunicationFallback._viewportPaddingStyle\r\n );\r\n }\r\n\r\n lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget\r\n ? false\r\n : attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector) || liesBetween(target as Element, hostSelector, contentSelector)\r\n : false;\r\n },\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n });\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log(getEnvironment());\r\n\r\n return {\r\n _update: update,\r\n _state: () => ({\r\n _overflowAmount: lifecycleCommunication._viewportOverflowAmount,\r\n }),\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n state: () => lifecycleHub._state(),\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","diffClass","classNameA","classNameB","classNameASplit","split","classNameBSplit","tempObj","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","stopAndPrevent","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","contentMutationDebounce","hostMutationDebounce","resizeDebounce","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","display","_sizeChanged","_contentMutation","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateOverflowAmountCache","getCurrentOverflowAmountCache","max","_contentScrollSize","_viewportSize","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","overflowAmount","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","contentSize","viewportClientSize","contentScrollSizeChanged","overflowChanged","overflowAmountChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","animationStartEventName","scrollEventName","scrollAmount","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","clear","_updateElements","getElements","eventElmList","elements","parsedEventNames","registredEventNames","newEntry","changingExistingEntry","finalEventNames","_updateEventContentChange","newEventContentChange","Map","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","ignorePrefix","hostSelector","viewportSelector","contentSelector","attrs","newValue","diff","addedOrRemovedClass","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","structureSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newLifecycleCommunication","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js index 1633de1..699bfdf 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -const t=(t,e)=>{const{o:n,s:r,u:o}=e||{};let i,s=r;return{_:(e,r)=>{const a=s,l=t?t(r,s,i):r,c=e||(n?!n(a,l):a!==l);return(c||o)&&(s=l,i=a),{g:s,v:i,p:c}},m:t=>({g:s,v:i,p:!!t})}},e=Node.ELEMENT_NODE,{toString:n,hasOwnProperty:r}=Object.prototype;function o(t){return void 0===t}function i(t){return null===t}const s=t=>o(t)||i(t)?""+t:n.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function a(t){return"number"==typeof t}function l(t){return"string"==typeof t}function c(t){return"boolean"==typeof t}function d(t){return"function"==typeof t}function u(t){return Array.isArray(t)}function _(t){return"object"==typeof t&&!u(t)&&!i(t)}function g(t){const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!!(u(t)||!d(t)&&n)&&(!(e>0&&_(t))||e-1 in t)}function v(t){if(!t||!_(t)||"object"!==s(t))return!1;let e;const n=t.constructor,i=n&&n.prototype,a=r.call(t,"constructor"),l=i&&r.call(i,"isPrototypeOf");if(n&&!a&&!l)return!1;for(e in t);return o(e)||r.call(t,e)}function f(t){const n=window.Element;return!!t&&(n?t instanceof n:t.nodeType===e)}function h(t,e){if(g(t))for(let n=0;ne(t[n],n,t));return t}const p=(t,e,n)=>(n||l(e)||!g(e)?t.push(e):Array.prototype.push.apply(t,e),t),w=t=>{if(Array.from)return Array.from(t);const e=[];return h(t,t=>{p(e,t)}),e},b=t=>t&&0===t.length,y=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):h(t,n)},m=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),S=t=>t?Object.keys(t):[];function x(t,e,n,r,o,s,a){const l=[e,n,r,o,s,a];return"object"==typeof t&&!i(t)||d(t)||(t={}),h(l,e=>{h(S(e),n=>{const r=e[n];if(t===r)return!0;const o=u(r);if(r&&(v(r)||o)){const e=t[n];let i=e;o&&!u(e)?i=[]:o||v(e)||(i={}),t[n]=x(i,r)}else t[n]=r})}),t}function O(t){for(const e in t)return!1;return!0}function z(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function C(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}function I(t,e){return z("scrollLeft",0,t,e)}function M(t,e){return z("scrollTop",0,t,e)}const A=Element.prototype,L=(t,e)=>{const n=[],r=e?f(e)?e:null:document;return r?p(n,r.querySelectorAll(t)):n},V=(t,e)=>{if(f(t)){return(A.matches||A.msMatchesSelector).call(t,e)}return!1},$=t=>t?w(t.childNodes):[],T=t=>t?t.parentElement:null,R=(t,e,n)=>{if(n){let r,o=e;t&&(g(n)?(r=document.createDocumentFragment(),h(n,t=>{t===o&&(o=t.previousSibling),r.appendChild(t)})):r=n,e&&(o?o!==e&&(o=o.nextSibling):o=t.firstChild),t.insertBefore(r,o||null))}},P=(t,e)=>{R(t,null,e)},j=(t,e)=>{R(t,t&&t.firstChild,e)},E=(t,e)=>{R(T(t),t&&t.nextSibling,e)},H=t=>{if(g(t))h(w(t),t=>H(t));else if(t){const e=T(t);e&&e.removeChild(t)}},B=t=>{const e=document.createElement("div");return t&&C(e,"class",t),e},D=t=>{const e=B();return e.innerHTML=t.trim(),h($(e),t=>H(t))},q=["WebKit","Moz","O","MS","webkit","moz","o","ms"],F={},N=t=>{let e=F[t]||window[t];return m(F,t)||(h(q,n=>{var r;return e=e||window[n+(r=t,r.charAt(0).toUpperCase()+r.slice(1))],!e}),F[t]=e),e},G=N("MutationObserver"),W=N("IntersectionObserver"),Y=N("ResizeObserver"),X=N("cancelAnimationFrame"),k=N("requestAnimationFrame"),U=/[^\x20\t\r\n\f]+/g,J=(t,e,n)=>{let r,o=0,i=!1;if(t&&l(e)){const s=e.match(U)||[];for(i=s.length>0;r=s[o++];)i=!!n(t.classList,r)&&i}return i},K=(t,e)=>{J(t,e,(t,e)=>t.add(e))},Q=(t,e)=>{J(t,e,(t,e)=>t.remove(e))},Z={w:0,h:0},tt=()=>({w:window.innerWidth,h:window.innerHeight}),et=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:Z,nt=t=>t?{w:t.clientWidth,h:t.clientHeight}:Z,rt=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:Z,ot=t=>t.getBoundingClientRect();let it;const st=t=>t.split(" "),at=(t,e,n,r)=>{h(st(e),e=>{t.removeEventListener(e,n,r)})},lt=(t,e,n,r)=>{const i=(()=>{if(o(it)){it=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){it=!0}}))}catch(t){}}return it})(),s=i&&r&&r.S||!1,a=r&&r.O||!1,l=r&&r.C||!1,c=[],d=i?{passive:s,capture:a}:a;return h(st(e),e=>{const r=l?o=>{t.removeEventListener(e,r,a),n&&n(o)}:n;p(c,at.bind(null,t,e,r,a)),t.addEventListener(e,r,d)}),y.bind(0,c)},ct=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),dt=(t,e,n,r)=>{if(t&&e){let o=!0;return h(n,n=>{(r?r(t[n]):t[n])!==(r?r(e[n]):e[n])&&(o=!1)}),o}return!1},ut=(t,e)=>dt(t,e,["w","h"]),_t=(t,e)=>dt(t,e,["x","y"]),gt=(t,e)=>dt(t,e,["t","r","b","l"]),vt=(t,e,n)=>dt(t,e,["width","height"],n&&(t=>Math.round(t))),ft=()=>{},ht=(t,e,n)=>{let r,o;const i=a(e)&&e>0,s=a(n)&&n>0,l=i?window.clearTimeout:X,c=i?window.setTimeout:k,d=function(e){o=s?performance.now():0,r&&l(r),t.apply(this,e)};return function(){const t=d.bind(this,arguments),i=!!s&&performance.now()-o>=n;r&&l(r),r=i?t():c(t,e)}},pt={opacity:1,zindex:1},wt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},bt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],yt=(t,e,n)=>{try{if(t){const{style:r}=t;o(r[e])?r.setProperty(e,n):r[e]=((t,e)=>!pt[t.toLowerCase()]&&a(e)?e+"px":e)(e,n)}}catch(r){}};function mt(t,e){const n=l(e);if(u(e)||n){let r=n?"":{};if(t){const o=window.getComputedStyle(t,null);r=n?bt(t,o,e):e.reduce((e,n)=>(e[n]=bt(t,o,n),e),r)}return r}h(S(e),n=>yt(t,n,e[n]))}const St={x:0,y:0},xt=t=>{const e=t?ot(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:St};var Ot=function(t){var e={exports:{}};return t(e,e.exports),e.exports}((function(t){function e(){return t.exports=e=Object.assign||function(t){for(var e=1;e(t[e]=Ct[0]+e+Ct[1],t),{}),Mt=(t,e,n,r,i)=>{const a={},c=Ot({},t);return h(S(e).filter(e=>m(t,e)),d=>{const _=o(n[d])?{}:n[d],g=t[d],f=e[d],w=v(f),b=i?i+".":"";if(w&&v(g)){const t=Mt(g,f,_,r,b+d);a[d]=t.I,c[d]=t.M,h([c,a],t=>{O(t[d])&&delete t[d]})}else if(!w){let t=!1;const e=[],n=[],i=s(g);if(h(u(f)?f:[f],r=>{let s;h(It,(t,e)=>{t===r&&(s=e)});const a=o(s);if(a&&l(g)){const n=r.split(" ");t=!!n.find(t=>t===g),p(e,n)}else t=It[i]===r;return p(n,a?It.string:s),!t}),t){(u(g)||v(g)?zt(g)!==zt(_):g!==_)&&(a[d]=g)}else r&&console.warn(`The option "${b}${d}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${g}".\r\nAccepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete c[d]}}),{M:c,I:a}},At=(t,e,n,r)=>Mt(t,e,n||{},r||!1),Lt=t=>{const e={A:{},L:{}};return h(S(t),n=>{const r=t[n];if(u(r))e.A[n]=r[1],e.L[n]=r[0];else{const t=Lt(r);e.A[n]=t.A,e.L[n]=t.L}}),e},Vt=It.number,$t=[It.string,It.array,It.null],Tt=[!0,It.boolean],Rt=[!1,It.boolean],Pt={resize:["none","none both horizontal vertical"],paddingAbsolute:Rt,updating:{elementEvents:[[["img","load"]],[It.array,It.null]],contentMutationDebounce:[80,Vt],hostMutationDebounce:[0,Vt],resizeDebounce:[0,Vt]},overflow:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,Vt],dragScroll:Tt,clickScroll:Rt,touch:Tt},textarea:{dynWidth:Rt,dynHeight:Rt,inheritedAttrs:[["style","class"],$t]},nativeScrollbarsOverlaid:{show:Rt,initialize:Rt}},{A:jt,L:Et}=Lt(Pt);let Ht;const{abs:Bt,round:Dt}=Math,qt=(t,e)=>{P(t,e);const n=nt(e),r=et(e);return{x:r.h-n.h,y:r.w-n.w}},Ft=(t,e)=>{mt(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),I(t,0);const n=xt(t),r=xt(e);I(t,-999);const o=xt(e);return{i:n.x===r.x,n:r.x!==o.x}},Nt=(t,e)=>{K(t,"os-environment-flexbox-glue");const n=ot(t),r=ot(e),o=vt(r,n,!0);K(t,"os-environment-flexbox-glue-max");const i=ot(t),s=ot(e),a=vt(s,i,!0);return o&&a},Gt=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},Wt=()=>{const{body:t}=document,e=D('
')[0],n=e.firstChild,r=new Set,o=qt(t,e),i={x:0===o.x,y:0===o.y},s=(t=>({V:!t,$:!1}))(!1);let a=s,l=Et;const c={T:o,R:i,P:!1,j:"-1"===mt(e,"zIndex"),H:Ft(e,n),B:Nt(e,n),D(t){r.add(t)},q(t){r.delete(t)},F:()=>Ot({},a),N(t){a=x({},a,t)},G:()=>Ot({},l),W(t){l=x({},l,t)},Y:s,X:l};var d,u;if(u="style",(d=e)&&d.removeAttribute(u),H(e),!i.x||!i.y){let n=tt(),i=Gt(),s=o;window.addEventListener("resize",()=>{if(r.size){const o=tt(),a={w:o.w-n.w,h:o.h-n.h};if(0===a.w&&0===a.h)return;const l={w:Bt(a.w),h:Bt(a.h)},c={w:Bt(Dt(o.w/(n.w/100))),h:Bt(Dt(o.h/(n.h/100)))},d=Gt(),u=l.w>2&&l.h>2,_=!((t,e)=>{const n=Bt(t),r=Bt(e);return!(n===r||n+1===r||n-1===r)})(c.w,c.h),g=d!==i&&i>0;if(u&&_&&g){const n=Ht.T=qt(t,e);H(e),s.x===n.x&&s.y===n.y||y(r),s=n}n=o,i=d}})}return c},Yt=()=>(Ht||(Ht=Wt()),Ht),Xt=t=>{P(T(t),$(t)),H(t)};let kt=0;const Ut=(t,e)=>{const n=c(t);return n||o(t)?(n?t:e)&&void 0:t},Jt=t=>{const{F:n,P:r,R:i,j:s}=Yt(),{V:a,$:l}=n(),c=function(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}(t),d=c?{}:{k:t.host,U:t.target,J:t.viewport,V:Ut(t.padding,a),$:Ut(t.content,l)};if(c){const e=B("os-viewport"),n=a&&B("os-padding"),r=l&&B("os-content");d.U=t,d.V=n,d.J=e,d.$=r}let{U:u,V:_,J:g,$:v}=d;const f=[],h=V(u,"textarea"),w=!h&&V(u,"body"),b=h?d.k||B():u,m=t=>h?u:$(t);if(h&&b!==d.k&&(E(u,b),p(f,()=>{E(b,u),H(b)})),c){const t=v||g;P(t,m(u)),P(b,_),P(_||b,g),P(g,v),p(f,()=>{P(b,$(t)),H(_||g),Q(b,"os-host")})}else{const t=v||g||_||b,e=o(_),n=o(g),r=o(v),i=m(t);_=d.V=e?B():_,g=d.J=n?B():g,v=d.$=r?B():v,P(b,_),P(_||b,g),P(g,v);P(v||g,i),p(f,()=>{r&&Xt(v),n&&Xt(g),e&&Xt(_),Q(b,"os-host"),Q(_,"os-padding"),Q(g,"os-viewport"),Q(v,"os-content")})}K(b,"os-host"),K(_,"os-padding"),K(g,"os-viewport"),K(v,"os-content");const S=u.ownerDocument,x=S.body,O={K:S.defaultView,Z:S,tt:T(x),et:x,nt:h,rt:w},z=Ot({},d,{k:b});if(r)p(f,Q.bind(0,g,"os-viewport-scrollbar-styled"));else if(!s&&(i.x||i.y)){const t=(()=>{const t=document.createElement("style");return C(t,"id","os-viewport-arrange-"+kt),kt++,t})();M=t,R(T(I=g),I,M),p(f,H.bind(0,t)),z.ot=t}var I,M;return{it:z,st:O,at:()=>{y(f)}}},Kt=e=>{const{lt:n,ct:r,dt:o}=e,{k:i,V:s,J:a}=o.it,{_:l,m:c}=t(()=>((t,e,n)=>{const r=e?e+"-":"",o=n?"-"+n:"",i=`${r}top${o}`,s=`${r}right${o}`,a=`${r}bottom${o}`,l=`${r}left${o}`,c=mt(t,[i,s,a,l]);return{t:wt(c[i]),r:wt(c[s]),b:wt(c[a]),l:wt(c[l])}})(i,"padding"),{o:gt});return(t,e,o)=>{let{g:i,p:d}=c(o);const{P:u}=Yt(),{ut:_,_t:g}=t,{g:v,p:f}=g,{g:h,p}=e("paddingAbsolute");(_||d)&&({g:i,p:d}=l(o));const w=p||f||d;if(w){const{g:t}=l(o),e=!h||!s&&!u,i=t.r+t.l,c=t.t+t.b,d={marginTop:0,marginRight:0,marginBottom:e?-c:0,marginLeft:0,top:e?-t.t:0,right:0,bottom:0,left:0,maxWidth:e?`calc(100% + ${i}px)`:""},_={paddingTop:e?t.t:0,paddingRight:e?t.r:0,paddingBottom:e?t.b:0,paddingLeft:e?t.l:0};if(e){const e=v?"right":"left",n=v?"marginLeft":"marginRight",r=v?t.r:t.l;d[e]=-r,d[n]=-i}mt(s||a,d),mt(a,_),n({gt:!e,V:t}),r(s?_:Ot({},d,_))}return{vt:w}}},Qt=e=>{const{dt:n,ft:r,ht:o,pt:i,wt:s}=e,{k:a,V:l,J:c,ot:d}=n.it,{_:u,m:_}=t(t=>f(t.bt,t.yt,t.St),{o:ut}),{_:g,m:v}=t(t=>({x:Math.max(0,t.xt.w-t.Ot.w),y:Math.max(0,t.xt.h-t.Ot.h)}),{o:_t,s:{x:0,y:0}}),f=(t,e,n)=>({w:t.w-Math.round(Math.max(0,n.width-e.w)),h:t.h-Math.round(Math.max(0,n.height-e.h))}),p=(t,e)=>{if(mt(c,{height:""}),e){const{gt:e,V:n}=i(),{zt:r,Ct:o}=t,s=ot(a),l=et(a),d=nt(a),u=e?n.b+n.t:0,_=d.h+(s.height-l.h);mt(c,{height:_+(r.x?o.x:0)-u})}},w=(t,e)=>{const{T:n,R:r,P:o}=Yt(),{x:i,y:s}=r,a=o||t?0:42,l=!e?mt(c,["overflowX","overflowY"]):e,d={x:"scroll"===l.overflowX,y:"scroll"===l.overflowY};return{zt:d,It:{x:i&&!!a,y:s&&!!a},Ct:{x:d.x&&!o?i?a:n.x:0,y:d.y&&!o?s?a:n.y:0}}},b=(t,e,n)=>{if(r){const{Ct:r,It:i}=t,{x:s,y:a}=i,{x:l,y:u}=r,_=o(),g=_[n?"paddingRight":"paddingLeft"],v=_.paddingTop,f={w:u&&a?u+e.w-g+"px":"",h:l&&s?l+e.h-v+"px":""};if(d){const{sheet:t}=d;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${C(d,"id")} + .os-viewport-arrange::before {}`,0);const n=e[0].style;n.width=f.w,n.height=f.h}}}else mt(c,{"--viewport-arrange-width":f.w,"--viewport-arrange-height":f.h})}return r};return(t,e,n)=>{const{_t:i,Mt:d,ut:y,At:m,Lt:x,vt:O}=t,{B:z,P:C,R:I}=Yt(),{g:M,p:A}=d,{g:L,p:V}=i,{g:$,p:T}=e("nativeScrollbarsOverlaid.show"),R=$&&I.x&&I.y,P=!z&&(y||x||m||T||A);let j,E=v(n),H=_(n);if(T&&C&&(R?Q(c,"os-viewport-scrollbar-styled"):K(c,"os-viewport-scrollbar-styled")),P&&(j=w(R),p(j,!!M)),y||O||x||T||V){const{Vt:t,$t:e}=((t,e)=>{if(r){const n=e||w(t),r=o(),{B:i}=Yt(),{It:s}=n,{x:a,y:l}=s,d={},u=t=>h(t.split(" "),t=>{d[t]=r[t]});i||(d.height=""),a&&u("marginTop marginBottom paddingTop paddingBottom"),l&&u("marginLeft marginRight paddingLeft paddingRight");const _=mt(c,S(d));return Q(c,"os-viewport-arrange"),mt(c,d),{Vt:()=>{mt(c,_),K(c,"os-viewport-arrange")},$t:n}}return{Vt:ft}})(R,j),i=nt(c),s=ot(c),a=et(c);let l=rt(c),d=i;const{g:_,p:v}=H=u(n,{St:s,yt:a,bt:l});t(),(v||T)&&e&&!R&&b(e,_,L)&&(d=nt(c),l=f(rt(c),et(c),ot(c))),E=g(n,{xt:{w:Math.max(_.w,l.w),h:Math.max(_.h,l.h)},Ot:{w:d.w+Math.max(0,i.w-_.w),h:d.h+Math.max(0,i.h-_.h)}})}const{g:B,p:D}=e("overflow"),{g:q,p:F}=H,{g:N,p:G}=E;if(O||F||G||D||T||V||P){const t={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,maxWidth:"",overflowY:"",overflowX:""},e=((t,e,n,r)=>{const o=(t,e,n,r)=>{const o="visible-scroll"===n,i=e>0&&("scroll"===n||"hidden"===n);return i&&(r[t?"overflowX":"overflowY"]=n),{Tt:!i,Rt:o?"scroll":"hidden"}},{Tt:i,Rt:s}=o(!0,e.x,n.x,r),{Tt:a,Rt:l}=o(!1,e.y,n.y,r);return i&&!a&&(r.overflowX=s),a&&!i&&(r.overflowY=l),w(t,r)})(R,N,B,t);((t,e,n,r)=>{const{P:i}=Yt(),{zt:s,Ct:c,It:d}=t,{x:u,y:_}=d,{x:g,y:v}=c,{x:f,y:h}=s,p=o(),w=e?"marginLeft":"marginRight",b=e?"paddingLeft":"paddingRight",y=p[w],m=p.marginBottom,S=p[b],x=p.paddingBottom;r.maxWidth=`calc(100% + ${v+-1*y}px)`,r[w]=-v+y,r.marginBottom=-g+m,n&&(r[b]=S+(_?v:0),r.paddingBottom=x+(u?g:0)),i||mt(l||a,{overflow:f||h?"hidden":""})})(e,L,b(e,q,L),t),P&&p(e,!!M),mt(c,t),s(e.zt)}}},Zt=t=>"rtl"===mt(t,"direction"),te=t=>t&&(t.height||t.width),ee=(e,n,r)=>{const{Pt:o=!1,jt:i=!1}=r||{},{H:s}=Yt(),a=D('
')[0],l=a.firstChild,{_:d}=t(0,{u:!0,o:(t,e)=>!(!t||!te(t)&&te(e))}),_=t=>{const e=t&&c(t.g);let r=!1;if(u(t)&&t.length>0){const{v:e,g:n,p:o}=d(0,t.pop().contentRect);r=!e||!te(n)}else e&&t.p;if(o){const n=e?t.g:Zt(a);I(a,n?s.n?-3333333:s.i?0:3333333:3333333),M(a,3333333)}r||n(e?t:void 0)},g=[];let v,f=!!i&&_;if(Y){const t=new Y(_);t.observe(l),p(g,()=>t.disconnect())}else{const t=D('
');P(l,t),K(l,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,r=e.firstChild,o=null==r?void 0:r.firstChild;let s,a=et(l),c=a,d=!1;const u=()=>{I(r,3333333),M(r,3333333),I(n,3333333),M(n,3333333)},v=()=>{s=0,d&&(a=c,_())},h=t=>{c=et(l),d=!t||!ut(c,a),t?(ct(t),d&&!s&&(X(s),s=k(v))):v(),u()};p(g,[lt(r,"scroll",h),lt(n,"scroll",h)]),mt(o,{width:3333333,height:3333333}),u(),f=i?h.bind(0,!1):u}if(o){v=t(()=>Zt(a));const{_:e}=v;p(g,lt(a,"scroll",t=>{const n=e(),{g:r,p:o}=n;o&&(mt(l,r?{left:"auto",right:0}:{left:0,right:"auto"}),_(n)),ct(t)}))}return f&&(K(a,"os-size-observer-appear"),p(g,lt(a,"animationstart",f,{C:!!Y}))),j(e,a),{at(){y(g),H(a)},Et:t=>({_t:v?v.m(t):{g:!1,v:!1,p:!1}})}},ne=(t,e,n,r)=>{let i=!1;const{Ht:s,Bt:a,Dt:c,qt:u,Ft:_,Nt:g,Gt:v}=r||{},{at:f,Wt:w,Yt:y}=((t,e,n)=>{let r,i;const s=()=>{r&&(r.forEach((t,e)=>at(e,t,n)),r.clear())},a=e=>{if(r&&i){h(i.reduce((n,r)=>{if(r){const o=r[0],i=r[1],s=i&&o&&(e?e(o):L(o,t)),a=d(i)?i(s):i;s&&s.length&&a&&l(a)&&p(n,[s,a.trim()],!0)}return n},[]),t=>h(t[0],e=>{const i=t[1],s=r.get(e),a=!o(s)&&i!==s,l=a?`${s} ${i}`:i;a&&at(e,s,n),r.set(e,l),lt(e,l,n)}))}},c=t=>{r=r||new Map,i=t,s(),a()};return e&&c(e),{at:s,Wt:a,Yt:c}})(t,e&&c,ht(()=>{i&&n(!0)},84)),m=a||[],S=(s||[]).concat(m),x=o=>{const i=(e?g:_)||ft,s=v||ft,a=[],c=[];let d=!1,f=!1,y=!1;h(o,n=>{const{attributeName:o,target:_,type:g,oldValue:v,addedNodes:h}=n,w="attributes"===g,b="childList"===g,S=t===_,x=w&&l(o)?C(_,o):0,O=0!==x&&v!==x,z=(I=o,m.indexOf(I,M)>-1&&O);var I,M;if(e&&!S){const e=!w,a=w&&z,l=a&&u&&V(_,u),d=(l?!i(_,o,v,x):e||a)&&!s(n,!!l,t,r);p(c,h),f=f||d,y=y||b}!e&&S&&O&&!i(_,o,v,x)&&(p(a,o),d=d||z)}),y&&!b(c)&&w(t=>c.reduce((e,n)=>(p(e,L(t,n)),V(n,t)?p(e,n):e),[])),e?f&&n(f):b(a)&&!d||n(a,d)},O=new G(x);return O.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:S,subtree:e,childList:e,characterData:e}),i=!0,{at:()=>{i&&(f(),O.disconnect(),i=!1)},Yt:t=>{y(i&&e&&t)},_:()=>{i&&x(O.takeRecords())}}},re=(t,e)=>t&&e.split(".").reduce((t,e)=>t&&m(t,e)?t[e]:void 0,t),oe=["id","class","style","open"],ie={gt:!1,V:{t:0,r:0,b:0,l:0}},se={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},ae={x:!1,y:!1},le={g:!1,v:!1,p:!1},ce={g:!1,v:!1,p:!1},de=(e,n)=>{let r=ie,o=se,i=ae;const{k:s,J:l,$:c}=n.it,{P:d,R:u,B:_,D:g,q:v}=Yt(),f=!d&&(u.x||u.y),w=[],b={L:e,dt:n,ft:f,pt:()=>r,lt(t){r=t||ie},ht:()=>o,ct(t){var e,n;o=t?(n=se,S(e=t).reduce((t,n)=>{const r=e[n];return t[n]=""===r?0:r,t},Ot({},n))):se},Xt:()=>i,wt(t){i=t||ae}};p(w,(t=>{const{dt:e}=t,{$:n}=e.it;return t=>{const{Mt:e}=t,{g:r,p:o}=e;o&&mt(n,{height:r?"auto":"100%"})}})(b)),p(w,Kt(b)),p(w,Qt(b));const m=(t,n,r)=>{let{_t:o,Mt:i,ut:s=r||!1,At:c=r||!1,Lt:d=r||!1,vt:u=r||!1}=t||{};const g=o||(O?O.Et(r)._t:le),v=i||(x?x.Et(r).Mt:ce),p=t=>({g:re(e,t),p:r||void 0!==re(n,t)}),b=f||!_,y=b&&I(l),m=b&&M(l);h(w,t=>{const{ut:e,At:n,Lt:o,vt:i}=t({_t:g,Mt:v,ut:s,At:c,Lt:d,vt:u},p,!!r)||{};s=e||s,c=n||c,d=o||d,u=i||u}),a(y)&&I(l,y),a(m)&&M(l,m)},x=(c||!_)&&((e,n)=>{const r=B("os-trinsic-observer"),o=[],{_:i,m:s}=t(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{s:!1});if(W){const t=new W(t=>{if(t&&t.length>0){const e=t.pop();if(e){const t=i(0,e);t.p&&n(t)}}},{root:e});t.observe(r),p(o,()=>t.disconnect())}else{const t=()=>{const t=et(r),e=i(0,t);e.p&&n(e)};p(o,ee(r,t).at),t()}return j(e,r),{at(){y(o),H(r)},Et:t=>({Mt:s(t)})}})(s,t=>{m({Mt:t})}),O=ee(s,t=>{m({_t:t,ut:!t})},{jt:!0,Pt:!d}),z=(ne(s,!1,()=>{requestAnimationFrame(()=>{m({At:!0})})},{Bt:oe,Ht:oe}),ne(c||l,!0,()=>{requestAnimationFrame(()=>{m({Lt:!0})})},{Bt:oe,Ht:oe,Dt:e.updating.elementEvents}),(t,e)=>{m(null,t,e)}),C=z.bind(null,null,!0);return g(C),{_:z,at(){v(C)}}};export default(t,e,n)=>{const{G:r}=Yt(),o=x({},r(),At(e||{},jt,null,!0).I),i=Jt(t),s=de(o,i),a={options(t){if(t){const{I:e}=At(t,jt,o,!0);O(e)||(x(o,e),s._(e))}return o},update(t){s._(null,t)}};return a.update(!0),a}; \ No newline at end of file +const t=(t,e)=>{const{o:n,s:o,u:r}=e||{};let i,s=o;return{_:(e,o)=>{const a=s,l=t?t(o,s,i):o,c=e||(n?!n(a,l):a!==l);return(c||r)&&(s=l,i=a),{g:s,v:i,p:c}},m:t=>({g:s,v:i,p:!!t})}},e=Node.ELEMENT_NODE,{toString:n,hasOwnProperty:o}=Object.prototype;function r(t){return void 0===t}function i(t){return null===t}const s=t=>r(t)||i(t)?""+t:n.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function a(t){return"number"==typeof t}function l(t){return"string"==typeof t}function c(t){return"boolean"==typeof t}function u(t){return"function"==typeof t}function d(t){return Array.isArray(t)}function _(t){return"object"==typeof t&&!d(t)&&!i(t)}function g(t){const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!!(d(t)||!u(t)&&n)&&(!(e>0&&_(t))||e-1 in t)}function v(t){if(!t||!_(t)||"object"!==s(t))return!1;let e;const n=t.constructor,i=n&&n.prototype,a=o.call(t,"constructor"),l=i&&o.call(i,"isPrototypeOf");if(n&&!a&&!l)return!1;for(e in t);return r(e)||o.call(t,e)}function f(t){const n=window.Element;return!!t&&(n?t instanceof n:t.nodeType===e)}function h(t,e){if(g(t))for(let n=0;ne(t[n],n,t));return t}const p=(t,e,n)=>(n||l(e)||!g(e)?t.push(e):Array.prototype.push.apply(t,e),t),w=t=>{if(Array.from)return Array.from(t);const e=[];return h(t,t=>{p(e,t)}),e},b=t=>t&&0===t.length,m=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):h(t,n)},y=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),S=t=>t?Object.keys(t):[];function x(t,e,n,o,r,s,a){const l=[e,n,o,r,s,a];return"object"==typeof t&&!i(t)||u(t)||(t={}),h(l,e=>{h(S(e),n=>{const o=e[n];if(t===o)return!0;const r=d(o);if(o&&(v(o)||r)){const e=t[n];let i=e;r&&!d(e)?i=[]:r||v(e)||(i={}),t[n]=x(i,o)}else t[n]=o})}),t}function C(t){for(const e in t)return!1;return!0}function O(t,e,n,o){if(r(o))return n?n[t]:e;n&&(n[t]=o)}function z(t,e,n){if(r(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}function L(t,e){return O("scrollLeft",0,t,e)}function M(t,e){return O("scrollTop",0,t,e)}const A=Element.prototype,I=(t,e)=>{const n=[],o=e?f(e)?e:null:document;return o?p(n,o.querySelectorAll(t)):n},T=(t,e)=>{if(f(t)){return(A.matches||A.msMatchesSelector).call(t,e)}return!1},$=t=>t?w(t.childNodes):[],R=t=>t?t.parentElement:null,V=(t,e)=>{if(f(t)){const n=A.closest;if(n)return n.call(t,e);do{if(T(t,e))return t;t=R(t)}while(t)}return null},j=(t,e,n)=>{const o=t&&V(t,e),r=t&&((t,e)=>{const n=e?f(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r)&&(o===t||r===t||V(V(t,n),e)!==o)},E=(t,e,n)=>{if(n){let o,r=e;t&&(g(n)?(o=document.createDocumentFragment(),h(n,t=>{t===r&&(r=t.previousSibling),o.appendChild(t)})):o=n,e&&(r?r!==e&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r||null))}},H=(t,e)=>{E(t,null,e)},P=(t,e)=>{E(t,t&&t.firstChild,e)},B=(t,e)=>{E(R(t),t&&t.nextSibling,e)},D=t=>{if(g(t))h(w(t),t=>D(t));else if(t){const e=R(t);e&&e.removeChild(t)}},q=t=>{const e=document.createElement("div");return t&&z(e,"class",t),e},N=t=>{const e=q();return e.innerHTML=t.trim(),h($(e),t=>D(t))},F=["WebKit","Moz","O","MS","webkit","moz","o","ms"],Y={},G=t=>{let e=Y[t]||window[t];return y(Y,t)||(h(F,n=>{var o;return e=e||window[n+(o=t,o.charAt(0).toUpperCase()+o.slice(1))],!e}),Y[t]=e),e},W=G("MutationObserver"),X=G("IntersectionObserver"),k=G("ResizeObserver"),U=G("cancelAnimationFrame"),J=G("requestAnimationFrame"),K=/[^\x20\t\r\n\f]+/g,Q=(t,e,n)=>{let o,r=0,i=!1;if(t&&l(e)){const s=e.match(K)||[];for(i=s.length>0;o=s[r++];)i=!!n(t.classList,o)&&i}return i},Z=(t,e)=>{Q(t,e,(t,e)=>t.add(e))},tt=(t,e)=>{Q(t,e,(t,e)=>t.remove(e))},et={w:0,h:0},nt=()=>({w:window.innerWidth,h:window.innerHeight}),ot=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:et,rt=t=>t?{w:t.clientWidth,h:t.clientHeight}:et,it=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:et,st=t=>t.getBoundingClientRect();let at;const lt=t=>t.split(" "),ct=(t,e,n,o)=>{h(lt(e),e=>{t.removeEventListener(e,n,o)})},ut=(t,e,n,o)=>{const i=(()=>{if(r(at)){at=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){at=!0}}))}catch(t){}}return at})(),s=i&&o&&o.S||!1,a=o&&o.C||!1,l=o&&o.O||!1,c=[],u=i?{passive:s,capture:a}:a;return h(lt(e),e=>{const o=l?r=>{t.removeEventListener(e,o,a),n&&n(r)}:n;p(c,ct.bind(null,t,e,o,a)),t.addEventListener(e,o,u)}),m.bind(0,c)},dt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),_t=(t,e,n,o)=>{if(t&&e){let r=!0;return h(n,n=>{(o?o(t[n]):t[n])!==(o?o(e[n]):e[n])&&(r=!1)}),r}return!1},gt=(t,e)=>_t(t,e,["w","h"]),vt=(t,e)=>_t(t,e,["t","r","b","l"]),ft=(t,e,n)=>_t(t,e,["width","height"],n&&(t=>Math.round(t))),ht=()=>{},pt=(t,e,n)=>{let o,r;const i=a(e)&&e>0,s=a(n)&&n>0,l=i?window.clearTimeout:U,c=i?window.setTimeout:J,u=function(e){r=s?performance.now():0,o&&l(o),t.apply(this,e)};return function(){const t=u.bind(this,arguments),i=!!s&&performance.now()-r>=n;o&&l(o),o=i?t():c(t,e)}},wt={opacity:1,zindex:1},bt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},mt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],yt=(t,e,n)=>{try{if(t){const{style:o}=t;r(o[e])?o.setProperty(e,n):o[e]=((t,e)=>!wt[t.toLowerCase()]&&a(e)?e+"px":e)(e,n)}}catch(o){}};function St(t,e){const n=l(e);if(d(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?mt(t,r,e):e.reduce((e,n)=>(e[n]=mt(t,r,n),e),o)}return o}h(S(e),n=>yt(t,n,e[n]))}const xt={x:0,y:0},Ct=t=>{const e=t?st(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:xt};var Ot=function(t){var e={exports:{}};return t(e,e.exports),e.exports}((function(t){function e(){return t.exports=e=Object.assign||function(t){for(var e=1;e(t[e]=Lt[0]+e+Lt[1],t),{}),At=(t,e,n,o,i)=>{const a={},c=Ot({},t);return h(S(e).filter(e=>y(t,e)),u=>{const _=r(n[u])?{}:n[u],g=t[u],f=e[u],w=v(f),b=i?i+".":"";if(w&&v(g)){const t=At(g,f,_,o,b+u);a[u]=t.L,c[u]=t.M,h([c,a],t=>{C(t[u])&&delete t[u]})}else if(!w){let t=!1;const e=[],n=[],i=s(g);if(h(d(f)?f:[f],o=>{let s;h(Mt,(t,e)=>{t===o&&(s=e)});const a=r(s);if(a&&l(g)){const n=o.split(" ");t=!!n.find(t=>t===g),p(e,n)}else t=Mt[i]===o;return p(n,a?Mt.string:s),!t}),t){(d(g)||v(g)?zt(g)!==zt(_):g!==_)&&(a[u]=g)}else o&&console.warn(`The option "${b}${u}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${g}".\r\nAccepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete c[u]}}),{M:c,L:a}},It=(t,e,n,o)=>At(t,e,n||{},o||!1),Tt=t=>{const e={A:{},I:{}};return h(S(t),n=>{const o=t[n];if(d(o))e.A[n]=o[1],e.I[n]=o[0];else{const t=Tt(o);e.A[n]=t.A,e.I[n]=t.I}}),e},$t=Mt.number,Rt=[Mt.string,Mt.array,Mt.null],Vt=[!0,Mt.boolean],jt=[!1,Mt.boolean],Et={resize:["none","none both horizontal vertical"],paddingAbsolute:jt,updating:{elementEvents:[[["img","load"]],[Mt.array,Mt.null]],contentMutationDebounce:[80,$t],hostMutationDebounce:[0,$t],resizeDebounce:[0,$t]},overflow:{x:["scroll","hidden scroll visible visible-hidden"],y:["scroll","hidden scroll visible visible-hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,$t],dragScroll:Vt,clickScroll:jt,touch:Vt},textarea:{dynWidth:jt,dynHeight:jt,inheritedAttrs:[["style","class"],Rt]},nativeScrollbarsOverlaid:{show:jt,initialize:jt}},{A:Ht,I:Pt}=Tt(Et);let Bt;const{abs:Dt,round:qt}=Math,Nt=(t,e)=>{H(t,e);const n=rt(e),o=ot(e);return{x:o.h-n.h,y:o.w-n.w}},Ft=(t,e)=>{St(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),L(t,0);const n=Ct(t),o=Ct(e);L(t,-999);const r=Ct(e);return{i:n.x===o.x,n:o.x!==r.x}},Yt=(t,e)=>{Z(t,"os-environment-flexbox-glue");const n=st(t),o=st(e),r=ft(o,n,!0);Z(t,"os-environment-flexbox-glue-max");const i=st(t),s=st(e),a=ft(s,i,!0);return r&&a},Gt=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},Wt=()=>{const{body:t}=document,e=N('
')[0],n=e.firstChild,o=new Set,r=Nt(t,e),i={x:0===r.x,y:0===r.y},s=(t=>({T:!t,$:!1}))(!1);let a=s,l=Pt;const c={R:r,V:i,j:!1,H:"-1"===St(e,"zIndex"),P:Ft(e,n),B:Yt(e,n),D(t){o.add(t)},q(t){o.delete(t)},N:()=>Ot({},a),F(t){a=x({},a,t)},Y:()=>Ot({},l),G(t){l=x({},l,t)},W:s,X:l};var u,d;if(d="style",(u=e)&&u.removeAttribute(d),D(e),!i.x||!i.y){let n=nt(),i=Gt(),s=r;window.addEventListener("resize",()=>{if(o.size){const r=nt(),a={w:r.w-n.w,h:r.h-n.h};if(0===a.w&&0===a.h)return;const l={w:Dt(a.w),h:Dt(a.h)},c={w:Dt(qt(r.w/(n.w/100))),h:Dt(qt(r.h/(n.h/100)))},u=Gt(),d=l.w>2&&l.h>2,_=!((t,e)=>{const n=Dt(t),o=Dt(e);return!(n===o||n+1===o||n-1===o)})(c.w,c.h),g=u!==i&&i>0;if(d&&_&&g){const n=Bt.R=Nt(t,e);D(e),s.x===n.x&&s.y===n.y||m(o),s=n}n=r,i=u}})}return c},Xt=()=>(Bt||(Bt=Wt()),Bt),kt=t=>{H(R(t),$(t)),D(t)};let Ut=0;const Jt=(t,e)=>{const n=c(t);return n||r(t)?(n?t:e)&&void 0:t},Kt=t=>{const{N:n,j:o,V:i,H:s}=Xt(),{T:a,$:l}=n(),c=function(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}(t),u=c?{}:{k:t.host,U:t.target,J:t.viewport,T:Jt(t.padding,a),$:Jt(t.content,l)};if(c){const e=q("os-viewport"),n=a&&q("os-padding"),o=l&&q("os-content");u.U=t,u.T=n,u.J=e,u.$=o}let{U:d,T:_,J:g,$:v}=u;const f=[],h=T(d,"textarea"),w=!h&&T(d,"body"),b=h?u.k||q():d,y=t=>h?d:$(t);if(h&&b!==u.k&&(B(d,b),p(f,()=>{B(b,d),D(b)})),c){const t=v||g;H(t,y(d)),H(b,_),H(_||b,g),H(g,v),p(f,()=>{H(b,$(t)),D(_||g),tt(b,"os-host")})}else{const t=v||g||_||b,e=r(_),n=r(g),o=r(v),i=y(t);_=u.T=e?q():_,g=u.J=n?q():g,v=u.$=o?q():v,H(b,_),H(_||b,g),H(g,v);H(v||g,i),p(f,()=>{o&&kt(v),n&&kt(g),e&&kt(_),tt(b,"os-host"),tt(_,"os-padding"),tt(g,"os-viewport"),tt(v,"os-content")})}Z(b,"os-host"),Z(_,"os-padding"),Z(g,"os-viewport"),Z(v,"os-content");const S=d.ownerDocument,x=S.body,C={K:S.defaultView,Z:S,tt:R(x),et:x,nt:h,ot:w},O=Ot({},u,{k:b});if(o)p(f,tt.bind(0,g,"os-viewport-scrollbar-styled"));else if(!s&&(i.x||i.y)){const t=(()=>{const t=document.createElement("style");return z(t,"id","os-viewport-arrange-"+Ut),Ut++,t})();M=t,E(R(L=g),L,M),p(f,D.bind(0,t)),O.rt=t}var L,M;return{it:O,st:C,at:()=>{m(f)}}},Qt=e=>{const{lt:n,ct:o}=e,{k:r,T:i,J:s}=n.it,{_:a,m:l}=t(()=>((t,e,n)=>{const o=e?e+"-":"",r=n?"-"+n:"",i=`${o}top${r}`,s=`${o}right${r}`,a=`${o}bottom${r}`,l=`${o}left${r}`,c=St(t,[i,s,a,l]);return{t:bt(c[i]),r:bt(c[s]),b:bt(c[a]),l:bt(c[l])}})(r,"padding"),{o:vt});return(t,e,n)=>{let{g:r,p:c}=l(n);const{j:u}=Xt(),{ut:d,dt:_}=t,{g,p:v}=_,{g:f,p:h}=e("paddingAbsolute");(d||c)&&({g:r,p:c}=a(n));const p=h||v||c;if(p){const{g:t}=a(n),e=!f||!i&&!u,r=t.r+t.l,l=t.t+t.b,c={marginTop:0,marginRight:0,marginBottom:e?-l:0,marginLeft:0,top:e?-t.t:0,right:0,bottom:0,left:0,maxWidth:e?`calc(100% + ${r}px)`:""},d={paddingTop:e?t.t:0,paddingRight:e?t.r:0,paddingBottom:e?t.b:0,paddingLeft:e?t.l:0};if(e){const e=g?"right":"left",n=g?"marginLeft":"marginRight",o=g?t.r:t.l;c[e]=-o,c[n]=-r}St(i||s,c),St(s,d),o({_t:{gt:!e,T:t},vt:i?d:Ot({},c,d)})}return{ft:p}}},Zt=e=>{const{lt:n,ht:o,pt:r,ct:i}=e,{k:s,J:a,rt:l}=n.it,{_:c,m:u}=t(t=>g(t.wt,t.bt,t.yt),{o:gt}),{_:d,m:_}=t(t=>({w:Math.max(0,t.St.w-t.xt.w),h:Math.max(0,t.St.h-t.xt.h)}),{o:gt,s:{w:0,h:0}}),g=(t,e,n)=>({w:t.w-Math.round(Math.max(0,n.width-e.w)),h:t.h-Math.round(Math.max(0,n.height-e.h))}),v=(t,e)=>{if(St(a,{height:""}),e){const{gt:e,T:n}=r()._t,{Ct:o,Ot:i}=t,l=st(s),c=ot(s),u=rt(s),d=e||"content-box"===St(a,"boxSizing")?n.b+n.t:0,_=u.h+(l.height-c.h);St(a,{height:_+(o.x?i.x:0)-d})}},f=(t,e)=>{const{R:n,V:o,j:r}=Xt(),{x:i,y:s}=o,l=r||t?0:42,c=!e?St(a,["overflowX","overflowY"]):e,u={x:"scroll"===c.overflowX,y:"scroll"===c.overflowY};return{Ct:u,zt:{x:i&&!!l,y:s&&!!l},Ot:{x:u.x&&!r?i?l:n.x:0,y:u.y&&!r?s?l:n.y:0}}},p=(t,e,n)=>{if(o){const{Ot:o,zt:i}=t,{x:s,y:c}=i,{x:u,y:d}=o,{vt:_}=r(),g=_[n?"paddingRight":"paddingLeft"],v=_.paddingTop,f={w:d&&c?d+e.w-g+"px":"",h:u&&s?u+e.h-v+"px":""};if(l){const{sheet:t}=l;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${z(l,"id")} + .os-viewport-arrange::before {}`,0);const n=e[0].style;n.width=f.w,n.height=f.h}}}else St(a,{"--viewport-arrange-width":f.w,"--viewport-arrange-height":f.h})}return o},w=(t,e,n,o)=>{const{Ot:i,zt:s}=t,{x:a,y:l}=s,{x:c,y:u}=i,{vt:d}=r(),_=e?"marginLeft":"marginRight",g=e?"paddingLeft":"paddingRight",v=d[_],f=d.marginBottom,h=d[g],p=d.paddingBottom;o.maxWidth=`calc(100% + ${u+-1*v}px)`,o[_]=-u+v,o.marginBottom=-c+f,n&&(o[g]=h+(l?u:0),o.paddingBottom=p+(a?c:0))};return(t,e,n)=>{const{dt:s,Lt:l,ut:b,Mt:m,At:y,ft:x}=t,{B:C,j:O,V:z}=Xt(),{g:L,p:M}=l,{g:A,p:I}=s,{g:T,p:$}=e("nativeScrollbarsOverlaid.show"),R=T&&z.x&&z.y,V=!C&&(b||y||m||$||M);let j,E=_(n),H=u(n);if($&&O&&(R?tt(a,"os-viewport-scrollbar-styled"):Z(a,"os-viewport-scrollbar-styled")),V&&(j=f(R),v(j,!!L)),b||x||y||$||I){const{It:t,Tt:e}=((t,e,n)=>{if(o){const i=n||f(t),{vt:s}=r(),{B:l}=Xt(),{zt:c}=i,{x:u,y:d}=c,_={},g=t=>h(t.split(" "),t=>{_[t]=s[t]});l||(_.height=""),u&&g("marginTop marginBottom paddingTop paddingBottom"),d&&g("marginLeft marginRight paddingLeft paddingRight");const v=St(a,S(_));return tt(a,"os-viewport-arrange"),St(a,_),{It:()=>{w(i,e,o,v),St(a,v),Z(a,"os-viewport-arrange")},Tt:i}}return{It:ht}})(R,A,j),i=rt(a),s=st(a),l=ot(a);let u=it(a),_=i;const{g:v,p:b}=H=c(n,{yt:s,bt:l,wt:u});t(),(b||$)&&e&&!R&&p(e,v,A)&&(_=rt(a),u=g(it(a),ot(a),st(a))),E=d(n,{St:{w:Math.max(v.w,u.w),h:Math.max(v.h,u.h)},xt:{w:_.w+Math.max(0,i.w-v.w),h:_.h+Math.max(0,i.h-v.h)}})}const{g:P,p:B}=e("overflow"),{g:D,p:q}=H,{g:N,p:F}=E;if(x||q||F||B||$||I||V){const t={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,maxWidth:"",overflowY:"",overflowX:""},e=((t,e,n,o)=>{const r=(t,e,n,o)=>{const r=t?"overflowX":"overflowY",i=0===n.indexOf("visible"),s="visible-hidden"===n,a="scroll"===n;return i&&(o[r]="visible"),a&&e>0&&(o[r]=n),{$t:i,Rt:s?"hidden":"scroll"}},{$t:i,Rt:s}=r(!0,e.w,n.x,o),{$t:a,Rt:l}=r(!1,e.h,n.y,o);return i&&!a&&(o.overflowX=s),a&&!i&&(o.overflowY=l),f(t,o)})(R,N,P,t),n=p(e,D,A);w(e,A,n,t),V&&v(e,!!L),St(a,t),i({Vt:e.Ct,jt:N})}}},te=t=>"rtl"===St(t,"direction"),ee=t=>t&&(t.height||t.width),ne=(e,n,o)=>{const{Et:r=!1,Ht:i=!1}=o||{},{P:s}=Xt(),a=N('
')[0],l=a.firstChild,{_:u}=t(0,{u:!0,o:(t,e)=>!(!t||!ee(t)&&ee(e))}),_=t=>{const e=t&&c(t.g);let o=!1;if(d(t)&&t.length>0){const{v:e,g:n,p:r}=u(0,t.pop().contentRect);o=!e||!ee(n)}else e&&t.p;if(r){const n=e?t.g:te(a);L(a,n?s.n?-3333333:s.i?0:3333333:3333333),M(a,3333333)}o||n(e?t:void 0)},g=[];let v,f=!!i&&_;if(k){const t=new k(_);t.observe(l),p(g,()=>t.disconnect())}else{const t=N('
');H(l,t),Z(l,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,o=e.firstChild,r=null==o?void 0:o.firstChild;let s,a=ot(l),c=a,u=!1;const d=()=>{L(o,3333333),M(o,3333333),L(n,3333333),M(n,3333333)},v=()=>{s=0,u&&(a=c,_())},h=t=>{c=ot(l),u=!t||!gt(c,a),t?(dt(t),u&&!s&&(U(s),s=J(v))):v(),d()};p(g,[ut(o,"scroll",h),ut(n,"scroll",h)]),St(r,{width:3333333,height:3333333}),d(),f=i?h.bind(0,!1):d}if(r){v=t(()=>te(a));const{_:e}=v;p(g,ut(a,"scroll",t=>{const n=e(),{g:o,p:r}=n;r&&(tt(l,"ltr rtl"),Z(l,o?"rtl":"ltr"),_(n)),dt(t)}))}return f&&(Z(a,"os-size-observer-appear"),p(g,ut(a,"animationstart",f,{O:!!k}))),P(e,a),{at(){m(g),D(a)},Pt:t=>({dt:v?v.m(t):{g:!1,v:!1,p:!1}})}},oe=(t,e,n,o)=>{let i=!1;const{Bt:s,Dt:a,qt:c,Nt:d,Ft:_,Yt:g,Gt:v}=o||{},{at:f,Wt:w,Xt:m}=((t,e,n)=>{let o,i;const s=()=>{o&&(o.forEach((t,e)=>ct(e,t,n)),o.clear())},a=e=>{if(o&&i){h(i.reduce((n,o)=>{if(o){const r=o[0],i=o[1],s=i&&r&&(e?e(r):I(r,t)),a=u(i)?i(s):i;s&&s.length&&a&&l(a)&&p(n,[s,a.trim()],!0)}return n},[]),t=>h(t[0],e=>{const i=t[1],s=o.get(e),a=!r(s)&&i!==s,l=a?`${s} ${i}`:i;a&&ct(e,s,n),o.set(e,l),ut(e,l,n)}))}},c=t=>{o=o||new Map,i=t,s(),a()};return e&&c(e),{at:s,Wt:a,Xt:c}})(t,e&&c,pt(()=>{i&&n(!0)},84)),y=a||[],S=(s||[]).concat(y),x=r=>{const i=(e?g:_)||ht,s=v||ht,a=[],c=[];let u=!1,f=!1,m=!1;h(r,n=>{const{attributeName:r,target:_,type:g,oldValue:v,addedNodes:h}=n,w="attributes"===g,b="childList"===g,S=t===_,x=w&&l(r)?z(_,r):0,C=0!==x&&v!==x,O=(L=r,y.indexOf(L,M)>-1&&C);var L,M;if(e&&!S){const e=!w,a=w&&O,l=a&&d&&T(_,d),u=(l?!i(_,r,v,x):e||a)&&!s(n,!!l,t,o);p(c,h),f=f||u,m=m||b}!e&&S&&C&&!i(_,r,v,x)&&(p(a,r),u=u||O)}),m&&!b(c)&&w(t=>c.reduce((e,n)=>(p(e,I(t,n)),T(n,t)?p(e,n):e),[])),e?f&&n(f):b(a)&&!u||n(a,u)},C=new W(x);return C.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:S,subtree:e,childList:e,characterData:e}),i=!0,{at:()=>{i&&(f(),C.disconnect(),i=!1)},Xt:t=>{m(i&&e&&t)},_:()=>{i&&x(C.takeRecords())}}},re=(t,e)=>t?e.split(".").reduce((t,e)=>t&&y(t,e)?t[e]:void 0,t):void 0,ie=["id","class","style","open"],se=(t,e,n,o)=>{if("class"===e&&n&&o){return!!((t,e)=>{const n=t&&t.split(" "),o=e&&e.split(" "),r={};return h(n,t=>{r[t]=1}),h(o,t=>{r[t]?delete r[t]:r[t]=1}),S(r)})(n,o).find(t=>0!==t.indexOf("os-"))}return!1},ae={g:!1,v:!1,p:!1},le={g:!1,v:!1,p:!1},ce={_t:{gt:!1,T:{t:0,r:0,b:0,l:0}},Vt:{x:!1,y:!1},jt:{w:0,h:0},vt:{marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}},ue=(e,n)=>{let o=ce;const{k:r,J:i,$:s}=n.it,{j:l,V:c,B:u,D:d,q:_}=Xt(),g=!l&&(c.x||c.y),v=[],f={I:e,lt:n,ht:g,pt:()=>o,ct(t){var e,n;t&&t.vt&&(t.vt=(e=t.vt,n=ce.vt,S(e).reduce((t,n)=>{const o=e[n];return t[n]=""===o?0:o,t},Ot({},n)))),o=x({},o,t)}};p(v,(t=>{const{lt:e}=t,{$:n}=e.it;return t=>{const{Lt:e}=t,{g:o,p:r}=e;return r&&St(n,{height:o?"":"100%",display:o?"":"inline"}),{ut:r,At:r}}})(f)),p(v,Qt(f)),p(v,Zt(f));const w=(t,n,o)=>{let{dt:r,Lt:s,ut:l=o||!1,Mt:c=o||!1,At:d=o||!1,ft:_=o||!1}=t||{};const f=r||(y?y.Pt(o).dt:ae),p=s||(b?b.Pt(o).Lt:le),w=t=>({g:re(e,t),p:o||void 0!==re(n,t)}),m=g||!u,S=m&&L(i),x=m&&M(i);h(v,t=>{const{ut:e,Mt:n,At:r,ft:i}=t({dt:f,Lt:p,ut:l,Mt:c,At:d,ft:_},w,!!o)||{};l=e||l,c=n||c,d=r||d,_=i||_}),a(S)&&L(i,S),a(x)&&M(i,x)},b=(s||!u)&&((e,n)=>{const o=q("os-trinsic-observer"),r=[],{_:i,m:s}=t(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{s:!1});if(X){const t=new X(t=>{if(t&&t.length>0){const e=t.pop();if(e){const t=i(0,e);t.p&&n(t)}}},{root:e});t.observe(o),p(r,()=>t.disconnect())}else{const t=()=>{const t=ot(o),e=i(0,t);e.p&&n(e)};p(r,ne(o,t).at),t()}return P(e,o),{at(){m(r),D(o)},Pt:t=>({Lt:s(t)})}})(r,t=>{w({Lt:t})}),y=ne(r,t=>{w({dt:t,ut:!t})},{Ht:!0,Et:!l}),C=(oe(r,!1,()=>{requestAnimationFrame(()=>{w({Mt:!0})})},{Dt:ie,Bt:ie,Ft:se}),oe(s||i,!0,()=>{requestAnimationFrame(()=>{w({At:!0})})},{Dt:ie,Bt:ie,qt:e.updating.elementEvents,Nt:".os-host",Gt:(t,e)=>{const{target:n,attributeName:o}=t;return!e&&(!!o&&(j(n,".os-host",".os-viewport")||j(n,".os-host",".os-content")))},Yt:se}),(t,e)=>{w(null,t,e)}),O=C.bind(null,null,!0);return d(O),console.log(Xt()),{_:C,kt:()=>({Ut:o.jt}),at(){_(O)}}};export default(t,e,n)=>{const{Y:o}=Xt(),r=x({},o(),It(e||{},Ht,null,!0).L),i=Kt(t),s=ue(r,i),a={options(t){if(t){const{L:e}=It(t,Ht,r,!0);C(e)||(x(r,e),s._(e))}return r},state:()=>s.kt(),update(t){s._(null,t)}};return a.update(!0),a}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 7be057e..d3f7935 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -244,6 +244,11 @@ return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr; }; + var findFirst = function findFirst(selector, elm) { + var rootElm = elm ? (isElement(elm) ? elm : null) : document; + return rootElm ? rootElm.querySelector(selector) : null; + }; + var is = function is(elm, selector) { if (isElement(elm)) { var fn = elmPrototype.matches || elmPrototype.msMatchesSelector; @@ -261,6 +266,36 @@ return elm ? elm.parentElement : null; }; + var closest = function closest(elm, selector) { + if (isElement(elm)) { + var closestFn = elmPrototype.closest; + + if (closestFn) { + return closestFn.call(elm, selector); + } + + do { + if (is(elm, selector)) { + return elm; + } + + elm = parent(elm); + } while (elm); + } + + return null; + }; + + var liesBetween = function liesBetween(elm, highBoundarySelector, deepBoundarySelector) { + var closestHighBoundaryElm = elm && closest(elm, highBoundarySelector); + var closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm); + return closestHighBoundaryElm && closestDeepBoundaryElm + ? closestHighBoundaryElm === elm || + closestDeepBoundaryElm === elm || + closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm + : false; + }; + var before = function before(parentElm, preferredAnchor, insertedElms) { if (insertedElms) { var anchor = preferredAnchor; @@ -390,6 +425,22 @@ return classList.remove(clazz); }); }; + var diffClass = function diffClass(classNameA, classNameB) { + var classNameASplit = classNameA && classNameA.split(' '); + var classNameBSplit = classNameB && classNameB.split(' '); + var tempObj = {}; + each(classNameASplit, function (className) { + tempObj[className] = 1; + }); + each(classNameBSplit, function (className) { + if (tempObj[className]) { + delete tempObj[className]; + } else { + tempObj[className] = 1; + } + }); + return keys(tempObj); + }; var zeroObj = { w: 0, @@ -513,9 +564,6 @@ var equalWH = function equalWH(a, b) { return equal(a, b, ['w', 'h']); }; - var equalXY = function equalXY(a, b) { - return equal(a, b, ['x', 'y']); - }; var equalTRBL = function equalTRBL(a, b) { return equal(a, b, ['t', 'r', 'b', 'l']); }; @@ -806,7 +854,7 @@ var booleanTrueTemplate = [true, optionsTemplateTypes.boolean]; var booleanFalseTemplate = [false, optionsTemplateTypes.boolean]; var resizeAllowedValues = 'none both horizontal vertical'; - var overflowAllowedValues = 'visible-hidden visible-scroll scroll hidden'; + var overflowAllowedValues = 'hidden scroll visible visible-hidden'; var scrollbarsVisibilityAllowedValues = 'visible hidden auto'; var scrollbarsAutoHideAllowedValues = 'never scroll leavemove'; var defaultOptionsWithTemplate = { @@ -1184,16 +1232,21 @@ if (heightIntrinsicChanged) { style(_content, { - height: heightIntrinsic ? 'auto' : '100%', + height: heightIntrinsic ? '' : '100%', + display: heightIntrinsic ? '' : 'inline', }); } + + return { + _sizeChanged: heightIntrinsicChanged, + _contentMutation: heightIntrinsicChanged, + }; }; }; var createPaddingLifecycle = function createPaddingLifecycle(lifecycleHub) { - var _setPaddingInfo = lifecycleHub._setPaddingInfo, - _setViewportPaddingStyle = lifecycleHub._setViewportPaddingStyle, - _structureSetup = lifecycleHub._structureSetup; + var _structureSetup = lifecycleHub._structureSetup, + _setLifecycleCommunication = lifecycleHub._setLifecycleCommunication; var _structureSetup$_targ = _structureSetup._targetObj, _host = _structureSetup$_targ._host, _padding = _structureSetup$_targ._padding, @@ -1272,12 +1325,13 @@ style(_padding || _viewport, paddingStyle); style(_viewport, viewportStyle); - _setPaddingInfo({ - _absolute: !paddingRelative, - _padding: _padding2, + _setLifecycleCommunication({ + _paddingInfo: { + _absolute: !paddingRelative, + _padding: _padding2, + }, + _viewportPaddingStyle: _padding ? viewportStyle : _extends_1({}, paddingStyle, viewportStyle), }); - - _setViewportPaddingStyle(_padding ? viewportStyle : _extends_1({}, paddingStyle, viewportStyle)); } return { @@ -1290,12 +1344,10 @@ var createOverflowLifecycle = function createOverflowLifecycle(lifecycleHub) { var _structureSetup = lifecycleHub._structureSetup, _doViewportArrange = lifecycleHub._doViewportArrange, - _getViewportPaddingStyle = lifecycleHub._getViewportPaddingStyle, - _getPaddingInfo = lifecycleHub._getPaddingInfo, - _setViewportOverflowScroll = lifecycleHub._setViewportOverflowScroll; + _getLifecycleCommunication = lifecycleHub._getLifecycleCommunication, + _setLifecycleCommunication = lifecycleHub._setLifecycleCommunication; var _structureSetup$_targ = _structureSetup._targetObj, _host = _structureSetup$_targ._host, - _padding = _structureSetup$_targ._padding, _viewport = _structureSetup$_targ._viewport, _viewportArrange = _structureSetup$_targ._viewportArrange; @@ -1313,15 +1365,15 @@ var _createCache2 = createCache( function (ctx) { return { - x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w), - y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h), + w: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w), + h: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h), }; }, { - _equal: equalXY, + _equal: equalWH, _initialValue: { - x: 0, - y: 0, + w: 0, + h: 0, }, } ), @@ -1341,19 +1393,19 @@ }); if (heightIntrinsic) { - var _getPaddingInfo2 = _getPaddingInfo(), - paddingAbsolute = _getPaddingInfo2._absolute, - padding = _getPaddingInfo2._padding; + var _getLifecycleCommunic = _getLifecycleCommunication()._paddingInfo, + paddingAbsolute = _getLifecycleCommunic._absolute, + padding = _getLifecycleCommunic._padding; var _overflowScroll = viewportOverflowState._overflowScroll, _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset; var hostBCR = getBoundingClientRect(_host); var hostOffsetSize = offsetSize(_host); var hostClientSize = clientSize(_host); - var paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0; + var paddingVertical = paddingAbsolute || style(_viewport, 'boxSizing') === 'content-box' ? padding.b + padding.t : 0; var clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h); style(_viewport, { - height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical, + height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingVertical, }); } }; @@ -1390,26 +1442,29 @@ var setViewportOverflowState = function setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount, overflow, viewportStyleObj) { var setPartialStylePerAxis = function setPartialStylePerAxis(horizontal, overflowAmount, behavior, styleObj) { var overflowKey = horizontal ? 'overflowX' : 'overflowY'; + var behaviorIsVisible = behavior.indexOf('visible') === 0; + var behaviorIsVisibleHidden = behavior === 'visible-hidden'; var behaviorIsScroll = behavior === 'scroll'; - var behaviorIsVisibleScroll = behavior === 'visible-scroll'; - var hideOverflow = behaviorIsScroll || behavior === 'hidden'; - var applyStyle = overflowAmount > 0 && hideOverflow; - if (applyStyle) { + if (behaviorIsVisible) { + styleObj[overflowKey] = 'visible'; + } + + if (behaviorIsScroll && overflowAmount > 0) { styleObj[overflowKey] = behavior; } return { - _visible: !applyStyle, - _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden', + _visible: behaviorIsVisible, + _behavior: behaviorIsVisibleHidden ? 'hidden' : 'scroll', }; }; - var _setPartialStylePerAx = setPartialStylePerAxis(true, overflowAmount.x, overflow.x, viewportStyleObj), + var _setPartialStylePerAx = setPartialStylePerAxis(true, overflowAmount.w, overflow.x, viewportStyleObj), xVisible = _setPartialStylePerAx._visible, xVisibleBehavior = _setPartialStylePerAx._behavior; - var _setPartialStylePerAx2 = setPartialStylePerAxis(false, overflowAmount.y, overflow.y, viewportStyleObj), + var _setPartialStylePerAx2 = setPartialStylePerAxis(false, overflowAmount.h, overflow.y, viewportStyleObj), yVisible = _setPartialStylePerAx2._visible, yVisibleBehavior = _setPartialStylePerAx2._behavior; @@ -1433,7 +1488,8 @@ var hideOffsetX = _scrollbarsHideOffset.x, hideOffsetY = _scrollbarsHideOffset.y; - var viewportPaddingStyle = _getViewportPaddingStyle(); + var _getLifecycleCommunic2 = _getLifecycleCommunication(), + viewportPaddingStyle = _getLifecycleCommunic2._viewportPaddingStyle; var viewportArrangeHorizontalPaddingKey = directionIsRTL ? 'paddingRight' : 'paddingLeft'; var viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey]; @@ -1471,27 +1527,22 @@ }; var hideNativeScrollbars = function hideNativeScrollbars(viewportOverflowState, directionIsRTL, viewportArrange, viewportStyleObj) { - var _getEnvironment2 = getEnvironment(), - _nativeScrollbarStyling = _getEnvironment2._nativeScrollbarStyling; - - var _overflowScroll = viewportOverflowState._overflowScroll, - _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset, + var _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset, _scrollbarsHideOffsetArrange = viewportOverflowState._scrollbarsHideOffsetArrange; var arrangeX = _scrollbarsHideOffsetArrange.x, arrangeY = _scrollbarsHideOffsetArrange.y; var hideOffsetX = _scrollbarsHideOffset.x, hideOffsetY = _scrollbarsHideOffset.y; - var scrollX = _overflowScroll.x, - scrollY = _overflowScroll.y; - var paddingStyle = _getViewportPaddingStyle(); + var _getLifecycleCommunic3 = _getLifecycleCommunication(), + viewportPaddingStyle = _getLifecycleCommunic3._viewportPaddingStyle; var horizontalMarginKey = directionIsRTL ? 'marginLeft' : 'marginRight'; var viewportHorizontalPaddingKey = directionIsRTL ? 'paddingLeft' : 'paddingRight'; - var horizontalMarginValue = paddingStyle[horizontalMarginKey]; - var verticalMarginValue = paddingStyle.marginBottom; - var horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey]; - var verticalPaddingValue = paddingStyle.paddingBottom; + var horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey]; + var verticalMarginValue = viewportPaddingStyle.marginBottom; + var horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey]; + var verticalPaddingValue = viewportPaddingStyle.paddingBottom; viewportStyleObj.maxWidth = 'calc(100% + ' + (hideOffsetY + horizontalMarginValue * -1) + 'px)'; viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue; viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue; @@ -1500,22 +1551,17 @@ viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0); viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0); } - - if (!_nativeScrollbarStyling) { - style(_padding || _host, { - overflow: scrollX || scrollY ? 'hidden' : '', - }); - } }; - var undoViewportArrange = function undoViewportArrange(showNativeOverlaidScrollbars, viewportOverflowState) { + var undoViewportArrange = function undoViewportArrange(showNativeOverlaidScrollbars, directionIsRTL, viewportOverflowState) { if (_doViewportArrange) { var finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars); - var paddingStyle = _getViewportPaddingStyle(); + var _getLifecycleCommunic4 = _getLifecycleCommunication(), + viewportPaddingStyle = _getLifecycleCommunic4._viewportPaddingStyle; - var _getEnvironment3 = getEnvironment(), - _flexboxGlue = _getEnvironment3._flexboxGlue; + var _getEnvironment2 = getEnvironment(), + _flexboxGlue = _getEnvironment2._flexboxGlue; var _scrollbarsHideOffsetArrange = finalViewportOverflowState._scrollbarsHideOffsetArrange; var arrangeX = _scrollbarsHideOffsetArrange.x, @@ -1524,7 +1570,7 @@ var assignProps = function assignProps(props) { return each(props.split(' '), function (prop) { - finalPaddingStyle[prop] = paddingStyle[prop]; + finalPaddingStyle[prop] = viewportPaddingStyle[prop]; }); }; @@ -1545,6 +1591,7 @@ style(_viewport, finalPaddingStyle); return { _redoViewportArrange: function _redoViewportArrange() { + hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, _doViewportArrange, prevStyle); style(_viewport, prevStyle); addClass(_viewport, classNameViewportArrange); }, @@ -1565,10 +1612,10 @@ _contentMutation = updateHints._contentMutation, _paddingStyleChanged = updateHints._paddingStyleChanged; - var _getEnvironment4 = getEnvironment(), - _flexboxGlue = _getEnvironment4._flexboxGlue, - _nativeScrollbarStyling = _getEnvironment4._nativeScrollbarStyling, - _nativeScrollbarIsOverlaid = _getEnvironment4._nativeScrollbarIsOverlaid; + var _getEnvironment3 = getEnvironment(), + _flexboxGlue = _getEnvironment3._flexboxGlue, + _nativeScrollbarStyling = _getEnvironment3._nativeScrollbarStyling, + _nativeScrollbarIsOverlaid = _getEnvironment3._nativeScrollbarIsOverlaid; var heightIntrinsic = _heightIntrinsic._value, heightIntrinsicChanged = _heightIntrinsic._changed; @@ -1600,7 +1647,7 @@ } if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) { - var _undoViewportArrange = undoViewportArrange(showNativeOverlaidScrollbars, preMeasureViewportOverflowState), + var _undoViewportArrange = undoViewportArrange(showNativeOverlaidScrollbars, directionIsRTL, preMeasureViewportOverflowState), _redoViewportArrange = _undoViewportArrange._redoViewportArrange, undoViewportArrangeOverflowState = _undoViewportArrange._viewportOverflowState; @@ -1681,7 +1728,10 @@ style(_viewport, viewportStyle); - _setViewportOverflowScroll(viewportOverflowState._overflowScroll); + _setLifecycleCommunication({ + _viewportOverflowScroll: viewportOverflowState._overflowScroll, + _viewportOverflowAmount: overflowAmount, + }); } }; }; @@ -1838,16 +1888,12 @@ _changed = directionIsRTLCacheValues._changed; if (_changed) { + removeClass(listenerElement, 'ltr rtl'); + if (_value) { - style(listenerElement, { - left: 'auto', - right: 0, - }); + addClass(listenerElement, 'rtl'); } else { - style(listenerElement, { - left: 0, - right: 'auto', - }); + addClass(listenerElement, 'ltr'); } onSizeChangedCallbackProxy(directionIsRTLCacheValues); @@ -2142,12 +2188,11 @@ }; var getPropByPath = function getPropByPath(obj, path) { - return ( - obj && - path.split('.').reduce(function (o, prop) { - return o && hasOwnProperty$1(o, prop) ? o[prop] : undefined; - }, obj) - ); + return obj + ? path.split('.').reduce(function (o, prop) { + return o && hasOwnProperty$1(o, prop) ? o[prop] : undefined; + }, obj) + : undefined; }; var emptyStylePropsToZero = function emptyStylePropsToZero(stlyeObj, baseStyle) { @@ -2158,30 +2203,23 @@ }, _extends_1({}, baseStyle)); }; + var ignorePrefix = 'os-'; + var hostSelector = '.' + classNameHost; + var viewportSelector = '.' + classNameViewport; + var contentSelector = '.' + classNameContent; var attrs = ['id', 'class', 'style', 'open']; - var paddingInfoFallback = { - _absolute: false, - _padding: { - t: 0, - r: 0, - b: 0, - l: 0, - }, - }; - var viewportPaddingStyleFallback = { - marginTop: 0, - marginRight: 0, - marginBottom: 0, - marginLeft: 0, - paddingTop: 0, - paddingRight: 0, - paddingBottom: 0, - paddingLeft: 0, - }; - var viewportOverflowScrollFallback = { - x: false, - y: false, + + var ignoreTargetChange = function ignoreTargetChange(target, attrName, oldValue, newValue) { + if (attrName === 'class' && oldValue && newValue) { + var diff = diffClass(oldValue, newValue); + return !!diff.find(function (addedOrRemovedClass) { + return addedOrRemovedClass.indexOf(ignorePrefix) !== 0; + }); + } + + return false; }; + var directionIsRTLCacheValuesFallback = { _value: false, _previous: false, @@ -2192,10 +2230,37 @@ _previous: false, _changed: false, }; + var lifecycleCommunicationFallback = { + _paddingInfo: { + _absolute: false, + _padding: { + t: 0, + r: 0, + b: 0, + l: 0, + }, + }, + _viewportOverflowScroll: { + x: false, + y: false, + }, + _viewportOverflowAmount: { + w: 0, + h: 0, + }, + _viewportPaddingStyle: { + marginTop: 0, + marginRight: 0, + marginBottom: 0, + marginLeft: 0, + paddingTop: 0, + paddingRight: 0, + paddingBottom: 0, + paddingLeft: 0, + }, + }; var createLifecycleHub = function createLifecycleHub(options, structureSetup) { - var paddingInfo = paddingInfoFallback; - var viewportPaddingStyle = viewportPaddingStyleFallback; - var viewportOverflowScroll = viewportOverflowScrollFallback; + var lifecycleCommunication = lifecycleCommunicationFallback; var _structureSetup$_targ = structureSetup._targetObj, _host = _structureSetup$_targ._host, _viewport = _structureSetup$_targ._viewport, @@ -2214,23 +2279,18 @@ _options: options, _structureSetup: structureSetup, _doViewportArrange: doViewportArrange, - _getPaddingInfo: function _getPaddingInfo() { - return paddingInfo; + _getLifecycleCommunication: function _getLifecycleCommunication() { + return lifecycleCommunication; }, - _setPaddingInfo: function _setPaddingInfo(newPaddingInfo) { - paddingInfo = newPaddingInfo || paddingInfoFallback; - }, - _getViewportPaddingStyle: function _getViewportPaddingStyle() { - return viewportPaddingStyle; - }, - _setViewportPaddingStyle: function _setViewportPaddingStyle(newPaddingStlye) { - viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback; - }, - _getViewportOverflowScroll: function _getViewportOverflowScroll() { - return viewportOverflowScroll; - }, - _setViewportOverflowScroll: function _setViewportOverflowScroll(newViewportOverflowScroll) { - viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback; + _setLifecycleCommunication: function _setLifecycleCommunication(newLifecycleCommunication) { + if (newLifecycleCommunication && newLifecycleCommunication._viewportPaddingStyle) { + newLifecycleCommunication._viewportPaddingStyle = emptyStylePropsToZero( + newLifecycleCommunication._viewportPaddingStyle, + lifecycleCommunicationFallback._viewportPaddingStyle + ); + } + + lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication); }, }; push(lifecycles, createTrinsicLifecycle(instance)); @@ -2337,11 +2397,23 @@ var hostMutationObserver = createDOMObserver(_host, false, onHostMutation, { _styleChangingAttributes: attrs, _attributes: attrs, + _ignoreTargetChange: ignoreTargetChange, }); var contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, { _styleChangingAttributes: attrs, _attributes: attrs, _eventContentChange: options.updating.elementEvents, + _nestedTargetSelector: hostSelector, + _ignoreContentChange: function _ignoreContentChange(mutation, isNestedTarget) { + var target = mutation.target, + attributeName = mutation.attributeName; + return isNestedTarget + ? false + : attributeName + ? liesBetween(target, hostSelector, viewportSelector) || liesBetween(target, hostSelector, contentSelector) + : false; + }, + _ignoreNestedTargetChange: ignoreTargetChange, }); var update = function update(changedOptions, force) { @@ -2350,8 +2422,14 @@ var envUpdateListener = update.bind(null, null, true); addEnvironmentListener(envUpdateListener); + console.log(getEnvironment()); return { _update: update, + _state: function _state() { + return { + _overflowAmount: lifecycleCommunication._viewportOverflowAmount, + }; + }, _destroy: function _destroy() { removeEnvironmentListener(envUpdateListener); }, @@ -2380,6 +2458,9 @@ return currentOptions; }, + state: function state() { + return lifecycleHub._state(); + }, update: function update(force) { lifecycleHub._update(null, force); }, diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 50af5f0..a3ee01a 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | false | null | undefined, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | null | undefined): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n opacity: 1,\r\n //order: 1,\r\n //orphans: 1,\r\n //widows: 1,\r\n zindex: 1,\r\n //zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as T, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\r\n};\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): OptionsWithOptionsTemplateTransformation => {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: ReadonlyArray<[string, string]> | null;\r\n contentMutationDebounce: number;\r\n hostMutationDebounce: number;\r\n resizeDebounce: number;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | ReadonlyArray | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n runEach,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? 'auto' : '100%',\r\n });\r\n }\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _setPaddingInfo, _setViewportPaddingStyle, _structureSetup } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setPaddingInfo({\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n });\r\n _setViewportPaddingStyle(\r\n _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n }\r\n );\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getViewportPaddingStyle, _getPaddingInfo, _setViewportOverflowScroll } = lifecycleHub;\r\n const { _host, _padding, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalXY, _initialValue: { x: 0, y: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getPaddingInfo();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n const paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: XY,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n const applyStyle = overflowAmount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.x, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.y, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportPaddingStyle = _getViewportPaddingStyle();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _overflowScroll, _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { x: scrollX, y: scrollY } = _overflowScroll;\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = paddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = paddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = paddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n\r\n // hide overflowing scrollbars if there are any\r\n if (!_nativeScrollbarStyling) {\r\n style(_padding || _host, {\r\n overflow: scrollX || scrollY ? 'hidden' : '',\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (showNativeOverlaidScrollbars: boolean, viewportOverflowState?: ViewportOverflowState): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = paddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginTop marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n preMeasureViewportOverflowState\r\n );\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, contentScrollSize!, directionIsRTL!)\r\n ) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setViewportOverflowScroll(viewportOverflowState._overflowScroll);\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\n/*\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction', 'writing-mode']);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\n*/\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, margin and border changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized();\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport interface TrinsicObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _heightIntrinsic: CacheValues;\r\n };\r\n}\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\n\r\ntype DOMContentObserverCallback = (contentChanged: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n _ignoreNestedTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed on nested targets if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true\r\n}\r\n\r\ninterface DOMObserverBase {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\r\n\r\ninterface DOMContentObserver extends DOMObserverBase {\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n}\r\n\r\ninterface DOMTargetObserver extends DOMObserverBase {}\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMContentObserverOptions | undefined\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = ContentObserver extends true ? DOMContentObserver : DOMTargetObserver;\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => {\r\n let map: Map | undefined;\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const _destroy = () => {\r\n if (map) {\r\n map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback));\r\n map.clear();\r\n }\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (map && eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));\r\n const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames;\r\n\r\n if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) {\r\n push(arr, [elements, parsedEventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const registredEventNames = map!.get(elm);\r\n const newEntry = isUndefined(registredEventNames);\r\n const changingExistingEntry = !newEntry && eventNames !== registredEventNames;\r\n const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;\r\n\r\n if (changingExistingEntry) {\r\n off(elm, registredEventNames!, callback);\r\n }\r\n\r\n map!.set(elm, finalEventNames);\r\n on(elm, finalEventNames, callback);\r\n })\r\n );\r\n }\r\n };\r\n const _updateEventContentChange = (newEventContentChange: DOMObserverEventContentChange) => {\r\n map = map || new Map();\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _updateEventContentChange(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _updateEventContentChange,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreNestedTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const {\r\n _destroy: destroyEventContentChange,\r\n _updateElements: updateEventContentChangeElements,\r\n _updateEventContentChange: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n isContentObserver && _eventContentChange,\r\n debounce(() => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(contentChanged);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _destroy: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && isContentObserver && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n } as DOMObserver;\r\n};\r\n","import { XY, TRBL, CacheValues, PartialOptions, each, push, keys, hasOwnProperty, isNumber, scrollLeft, scrollTop } from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface PaddingInfo {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getPaddingInfo(): PaddingInfo;\r\n _setPaddingInfo(newPadding?: PaddingInfo | null): void;\r\n // padding related styles applied to the viewport element\r\n _getViewportPaddingStyle(): StyleObject;\r\n _setViewportPaddingStyle(newPaddingStlye?: StyleObject | null): void;\r\n _getViewportOverflowScroll(): XY;\r\n _setViewportOverflowScroll(newViewportOverflowScroll: XY): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: tabindex, open etc.\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst paddingInfoFallback: PaddingInfo = {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n};\r\nconst viewportPaddingStyleFallback: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n};\r\nconst viewportOverflowScrollFallback: XY = {\r\n x: false,\r\n y: false,\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let paddingInfo = paddingInfoFallback;\r\n let viewportPaddingStyle = viewportPaddingStyleFallback;\r\n let viewportOverflowScroll = viewportOverflowScrollFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getPaddingInfo: () => paddingInfo,\r\n _setPaddingInfo(newPaddingInfo) {\r\n paddingInfo = newPaddingInfo || paddingInfoFallback;\r\n },\r\n _getViewportPaddingStyle: () => viewportPaddingStyle,\r\n _setViewportPaddingStyle(newPaddingStlye) {\r\n viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback;\r\n },\r\n _getViewportOverflowScroll: () => viewportOverflowScroll,\r\n _setViewportOverflowScroll(newViewportOverflowScroll) {\r\n viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback;\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n return {\r\n _update: update,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","Object","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","stopAndPrevent","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","contentMutationDebounce","hostMutationDebounce","resizeDebounce","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","createPaddingLifecycle","_setPaddingInfo","_setViewportPaddingStyle","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_sizeChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_absolute","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getViewportPaddingStyle","_getPaddingInfo","_setViewportOverflowScroll","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","max","_contentScrollSize","_viewportSize","updateOverflowAmountCache","getCurrentOverflowAmountCache","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","paddingAbsoluteVertical","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","overflowAmount","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","scrollX","scrollY","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","contentSize","viewportClientSize","contentScrollSizeChanged","overflowChanged","overflowAmountChanged","viewportArranged","animationStartEventName","scrollEventName","scrollAmount","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","ioEntryOrSize","isIntersecting","intersectionRatio","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","clear","_updateElements","getElements","eventElmList","elements","parsedEventNames","registredEventNames","newEntry","changingExistingEntry","finalEventNames","_updateEventContentChange","newEventContentChange","Map","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","attrs","paddingInfoFallback","viewportPaddingStyleFallback","viewportOverflowScrollFallback","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","paddingInfo","viewportOverflowScroll","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newPaddingInfo","newPaddingStlye","_getViewportOverflowScroll","newViewportOverflowScroll","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","envUpdateListener","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | false | null | undefined, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | null | undefined): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n opacity: 1,\r\n //order: 1,\r\n //orphans: 1,\r\n //widows: 1,\r\n zindex: 1,\r\n //zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as T, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\r\n};\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): OptionsWithOptionsTemplateTransformation => {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible' | 'visible-hidden';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[string, string]> | null;\r\n contentMutationDebounce: number;\r\n hostMutationDebounce: number;\r\n resizeDebounce: number;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | Array | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n runEach,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n});\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? '' : '100%',\r\n display: heightIntrinsic ? '' : 'inline',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _paddingInfo: {\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n },\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n },\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getLifecycleCommunication, _setLifecycleCommunication } = lifecycleHub;\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n w: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n h: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalWH, _initialValue: { w: 0, h: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const paddingVertical = paddingAbsolute || style(_viewport, 'boxSizing') === 'content-box' ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: WH,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsVisible = behavior.indexOf('visible') === 0;\r\n const behaviorIsVisibleHidden = behavior === 'visible-hidden';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && overflowAmount > 0) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: behaviorIsVisible,\r\n _behavior: behaviorIsVisibleHidden ? 'hidden' : 'scroll',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.w, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.h, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginTop marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n hideNativeScrollbars(finalViewportOverflowState, directionIsRTL, _doViewportArrange, prevStyle);\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n preMeasureViewportOverflowState\r\n );\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, contentScrollSize!, directionIsRTL!)\r\n ) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n // TODO: overflow: visible on padding / host if overflow visible on both axis\r\n // TODO: change lifecyclehub communication to single object & assign\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setLifecycleCommunication({\r\n _viewportOverflowScroll: viewportOverflowState._overflowScroll,\r\n _viewportOverflowAmount: overflowAmount,\r\n });\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\n/*\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction', 'writing-mode']);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\n*/\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized();\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (_value) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport interface TrinsicObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _heightIntrinsic: CacheValues;\r\n };\r\n}\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\n\r\ntype DOMContentObserverCallback = (contentChanged: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n _ignoreNestedTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed on nested targets if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange; // a function which will prevent marking certain attributes as changed if it returns true\r\n}\r\n\r\ninterface DOMObserverBase {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\r\n\r\ninterface DOMContentObserver extends DOMObserverBase {\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n}\r\n\r\ninterface DOMTargetObserver extends DOMObserverBase {}\r\n\r\ntype ContentChangeArrayItem = [StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange = Array | false | null | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMContentObserverOptions | undefined\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = ContentObserver extends true ? DOMContentObserver : DOMTargetObserver;\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (target: Element, eventContentChange: DOMObserverEventContentChange, callback: (...args: any) => any) => {\r\n let map: Map | undefined;\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const _destroy = () => {\r\n if (map) {\r\n map.forEach((eventName: string, elm: Node) => off(elm, eventName, callback));\r\n map.clear();\r\n }\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (map && eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));\r\n const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames;\r\n\r\n if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) {\r\n push(arr, [elements, parsedEventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const registredEventNames = map!.get(elm);\r\n const newEntry = isUndefined(registredEventNames);\r\n const changingExistingEntry = !newEntry && eventNames !== registredEventNames;\r\n const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;\r\n\r\n if (changingExistingEntry) {\r\n off(elm, registredEventNames!, callback);\r\n }\r\n\r\n map!.set(elm, finalEventNames);\r\n on(elm, finalEventNames, callback);\r\n })\r\n );\r\n }\r\n };\r\n const _updateEventContentChange = (newEventContentChange: DOMObserverEventContentChange) => {\r\n map = map || new Map();\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _updateEventContentChange(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _updateEventContentChange,\r\n };\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreNestedTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const {\r\n _destroy: destroyEventContentChange,\r\n _updateElements: updateEventContentChangeElements,\r\n _updateEventContentChange: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n isContentObserver && _eventContentChange,\r\n debounce(() => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(contentChanged);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _destroy: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && isContentObserver && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n } as DOMObserver;\r\n};\r\n","import {\r\n XY,\r\n WH,\r\n TRBL,\r\n CacheValues,\r\n PartialOptions,\r\n each,\r\n push,\r\n keys,\r\n hasOwnProperty,\r\n isNumber,\r\n scrollLeft,\r\n scrollTop,\r\n assignDeep,\r\n liesBetween,\r\n diffClass,\r\n} from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { classNameHost, classNameViewport, classNameContent } from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleCommunication {\r\n _paddingInfo: {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n };\r\n _viewportPaddingStyle: StyleObject;\r\n _viewportOverflowScroll: XY;\r\n _viewportOverflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubState {\r\n _overflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _state(): LifecycleHubState;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getLifecycleCommunication(): LifecycleCommunication;\r\n _setLifecycleCommunication(newLifecycleCommunication?: Partial): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj) : undefined;\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: tabindex, open etc.\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\nconst ignorePrefix = 'os-';\r\nconst hostSelector = `.${classNameHost}`;\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst contentSelector = `.${classNameContent}`;\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst ignoreTargetChange = (target: Node, attrName: string, oldValue: string | null, newValue: string | null) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n return !!diff.find((addedOrRemovedClass) => addedOrRemovedClass.indexOf(ignorePrefix) !== 0);\r\n }\r\n return false;\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst lifecycleCommunicationFallback: LifecycleCommunication = {\r\n _paddingInfo: {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n },\r\n _viewportOverflowScroll: {\r\n x: false,\r\n y: false,\r\n },\r\n _viewportOverflowAmount: {\r\n w: 0,\r\n h: 0,\r\n },\r\n _viewportPaddingStyle: {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getLifecycleCommunication: () => lifecycleCommunication,\r\n _setLifecycleCommunication(newLifecycleCommunication) {\r\n if (newLifecycleCommunication && newLifecycleCommunication._viewportPaddingStyle) {\r\n newLifecycleCommunication._viewportPaddingStyle = emptyStylePropsToZero(\r\n newLifecycleCommunication._viewportPaddingStyle,\r\n lifecycleCommunicationFallback._viewportPaddingStyle\r\n );\r\n }\r\n\r\n lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget\r\n ? false\r\n : attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector) || liesBetween(target as Element, hostSelector, contentSelector)\r\n : false;\r\n },\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n });\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log(getEnvironment());\r\n\r\n return {\r\n _update: update,\r\n _state: () => ({\r\n _overflowAmount: lifecycleCommunication._viewportOverflowAmount,\r\n }),\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n state: () => lifecycleHub._state(),\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","Object","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","diffClass","classNameA","classNameB","classNameASplit","split","classNameBSplit","tempObj","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","stopAndPrevent","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","contentMutationDebounce","hostMutationDebounce","resizeDebounce","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","display","_sizeChanged","_contentMutation","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","max","_contentScrollSize","_viewportSize","updateOverflowAmountCache","getCurrentOverflowAmountCache","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","overflowAmount","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","contentSize","viewportClientSize","contentScrollSizeChanged","overflowChanged","overflowAmountChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","animationStartEventName","scrollEventName","scrollAmount","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","ioEntryOrSize","isIntersecting","intersectionRatio","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","clear","_updateElements","getElements","eventElmList","elements","parsedEventNames","registredEventNames","newEntry","changingExistingEntry","finalEventNames","_updateEventContentChange","newEventContentChange","Map","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","ignorePrefix","hostSelector","viewportSelector","contentSelector","attrs","newValue","diff","addedOrRemovedClass","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","structureSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newLifecycleCommunication","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index 81f9699..9333711 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=t()}(this,(function(){"use strict";var n=function(n,t){var r,e=t||{},i=e.o,o=e.u,u=e.s,a=o;return{v:function(t,e){var o=a,c=n?n(e,a,r):e,f=t||(i?!i(o,c):o!==c);return(f||u)&&(a=c,r=o),{g:a,_:r,p:f}},m:function(n){return{g:a,_:r,p:!!n}}}},t=Node.ELEMENT_NODE,r=Object.prototype,e=r.toString,i=r.hasOwnProperty;function o(n){return void 0===n}function u(n){return null===n}var a=function(n){return o(n)||u(n)?""+n:e.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function f(n){return"string"==typeof n}function l(n){return"boolean"==typeof n}function s(n){return"function"==typeof n}function v(n){return Array.isArray(n)}function d(n){return"object"==typeof n&&!v(n)&&!u(n)}function g(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(v(n)||!s(n)&&r)&&(!(t>0&&d(n))||t-1 in n)}function h(n){if(!n||!d(n)||"object"!==a(n))return!1;var t,r=n.constructor,e=r&&r.prototype,u=i.call(n,"constructor"),c=e&&i.call(e,"isPrototypeOf");if(r&&!u&&!c)return!1;for(t in n);return o(t)||i.call(n,t)}function _(n){var r=window.Element;return!!n&&(r?n instanceof r:n.nodeType===t)}function p(n,t){if(g(n))for(var r=0;r0;e=u[i++];)o=!!r(n.classList,e)&&o}return o},Z=function(n,t){Q(n,t,(function(n,t){return n.add(t)}))},nn=function(n,t){Q(n,t,(function(n,t){return n.remove(t)}))},tn={w:0,h:0},rn=function(){return{w:window.innerWidth,h:window.innerHeight}},en=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:tn},on=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:tn},un=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:tn},an=function(n){return n.getBoundingClientRect()},cn=function(n){return n.split(" ")},fn=function(n,t,r,e){p(cn(t),(function(t){n.removeEventListener(t,r,e)}))},ln=function(n,t,r,e){var i=function(){if(o(T)){T=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){T=!0}}))}catch(n){}}return T}(),u=i&&e&&e.S||!1,a=e&&e.O||!1,c=e&&e.M||!1,f=[],l=i?{passive:u,capture:a}:a;return p(cn(t),(function(t){var e=c?function(i){n.removeEventListener(t,e,a),r&&r(i)}:r;w(f,fn.bind(null,n,t,e,a)),n.addEventListener(t,e,l)})),y.bind(0,f)},sn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},vn=function(n,t,r,e){if(n&&t){var i=!0;return p(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},dn=function(n,t){return vn(n,t,["w","h"])},gn=function(n,t){return vn(n,t,["x","y"])},hn=function(n,t){return vn(n,t,["t","r","b","l"])},_n=function(n,t,r){return vn(n,t,["width","height"],r&&function(n){return Math.round(n)})},pn=function(){},wn={opacity:1,zindex:1},bn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},mn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},yn=function(n,t,r){try{if(n){var e=n.style;o(e[t])?e.setProperty(t,r):e[t]=function(n,t){return!wn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r)}}catch(i){}};function xn(n,t){var r=f(t);if(v(t)||r){var e=r?"":{};if(n){var i=window.getComputedStyle(n,null);e=r?mn(n,i,t):t.reduce((function(t,r){return t[r]=mn(n,i,r),t}),e)}return e}p(S(t),(function(r){return yn(n,r,t[r])}))}var Sn={x:0,y:0},zn=function(n){var t=n?an(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:Sn};var On,Mn=function(n){var t={exports:{}};return n(t,t.exports),t.exports}((function(n){function t(){return n.exports=t=Object.assign||function(n){for(var t=1;t0?"\r\nValid strings are: [ "+S.join(", ")+" ].":""));delete l[s]}})),{A:l,L:c}}(n,t,r||{},e||!1)},In=Cn.number,Rn=[Cn.string,Cn.array,Cn.null],jn=[!0,Cn.boolean],Vn=[!1,Cn.boolean],En=function n(t){var r={C:{},T:{}};return p(S(t),(function(e){var i=t[e];if(v(i))r.C[e]=i[1],r.T[e]=i[0];else{var o=n(i);r.C[e]=o.C,r.T[e]=o.T}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:Vn,updating:{elementEvents:[[["img","load"]],[Cn.array,Cn.null]],contentMutationDebounce:[80,In],hostMutationDebounce:[0,In],resizeDebounce:[0,In]},overflow:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,In],dragScroll:jn,clickScroll:Vn,touch:jn},textarea:{dynWidth:Vn,dynHeight:Vn,inheritedAttrs:[["style","class"],Rn]},nativeScrollbarsOverlaid:{show:Vn,initialize:Vn}}),Bn=En.C,Dn=En.T,Pn=Math.abs,qn=Math.round,Fn=function(n,t){D(n,t);var r=on(t),e=en(t);return{x:e.h-r.h,y:e.w-r.w}},Hn=function(n,t){xn(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),A(n,0);var r=zn(n),e=zn(t);A(n,-999);var i=zn(t);return{i:r.x===e.x,n:e.x!==i.x}},Wn=function(n,t){Z(n,"os-environment-flexbox-glue");var r=an(n),e=an(t),i=_n(e,r,!0);Z(n,"os-environment-flexbox-glue-max");var o=an(n),u=an(t),a=_n(u,o,!0);return i&&a},Yn=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},Nn=function(){var n,t,r=document.body,e=W('
')[0],i=e.firstChild,o=new Set,u=Fn(r,e),a={x:0===u.x,y:0===u.y},c=function(n){return{I:!n,R:!1}}(!1),f=c,l=Dn,s={j:u,V:a,B:!1,D:"-1"===xn(e,"zIndex"),P:Hn(e,i),q:Wn(e,i),F:function(n){o.add(n)},H:function(n){o.delete(n)},W:function(){return Mn({},f)},Y:function(n){f=z({},f,n)},N:function(){return Mn({},l)},X:function(n){l=z({},l,n)},k:c,$:l};if(t="style",(n=e)&&n.removeAttribute(t),F(e),!a.x||!a.y){var v=rn(),d=Yn(),g=u;window.addEventListener("resize",(function(){if(o.size){var n=rn(),t={w:n.w-v.w,h:n.h-v.h};if(0===t.w&&0===t.h)return;var i={w:Pn(t.w),h:Pn(t.h)},u={w:Pn(qn(n.w/(v.w/100))),h:Pn(qn(n.h/(v.h/100)))},a=Yn(),c=i.w>2&&i.h>2,f=(s=u.h,h=Pn(u.w),_=Pn(s),!(h!==_&&h+1!==_&&h-1!==_));if(c&&f&&(a!==d&&d>0)){var l=On.j=Fn(r,e);F(e),g.x===l.x&&g.y===l.y||y(o),g=l}v=n,d=a}var s,h,_}))}return s},Xn=function(){return On||(On=Nn()),On},kn=function(n){D(E(n),V(n)),F(n)},$n=0,Gn=function(n,t){var r=l(n);return r||o(n)?(r?n:t)&&void 0:n},Jn=function(n){var r=Xn(),e=r.W,i=r.B,u=r.V,a=r.D,c=e(),f=c.I,l=c.R,s=function(n){var r=window.HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===t)}(n),v=s?{}:{G:n.host,J:n.target,K:n.viewport,I:Gn(n.padding,f),R:Gn(n.content,l)};if(s){var d=H("os-viewport"),g=f&&H("os-padding"),h=l&&H("os-content");v.J=n,v.I=g,v.K=d,v.R=h}var _=v.J,p=v.I,b=v.K,m=v.R,x=[],S=j(_,"textarea"),z=!S&&j(_,"body"),O=S?v.G||H():_,M=function(n){return S?_:V(n)};if(S&&O!==v.G&&(q(_,O),w(x,(function(){q(O,_),F(O)}))),s){var A=m||b;D(A,M(_)),D(O,p),D(p||O,b),D(b,m),w(x,(function(){D(O,V(A)),F(p||b),nn(O,"os-host")}))}else{var C=m||b||p||O,T=o(p),I=o(b),R=o(m),P=M(C);p=v.I=T?H():p,b=v.K=I?H():b,m=v.R=R?H():m,D(O,p),D(p||O,b),D(b,m),D(m||b,P),w(x,(function(){R&&kn(m),I&&kn(b),T&&kn(p),nn(O,"os-host"),nn(p,"os-padding"),nn(b,"os-viewport"),nn(m,"os-content")}))}Z(O,"os-host"),Z(p,"os-padding"),Z(b,"os-viewport"),Z(m,"os-content");var W,Y,N,X=_.ownerDocument,k=X.body,$={U:X.defaultView,Z:X,nn:E(k),tn:k,rn:S,en:z},G=Mn({},v,{G:O});if(i)w(x,nn.bind(0,b,"os-viewport-scrollbar-styled"));else if(!a&&(u.x||u.y)){var J=(L(N=document.createElement("style"),"id","os-viewport-arrange-"+$n),$n++,N);Y=J,B(E(W=b),W,Y),w(x,F.bind(0,J)),G.in=J}return{on:G,un:$,an:function(){y(x)}}},Kn=function(t){var r=t.cn,e=t.fn,i=t.ln.on,o=i.G,u=i.I,a=i.K,c=n((function(){return f=xn(o,[i=(r=(n="padding")?n+"-":"")+"top"+(e=t?"-"+t:""),u=r+"right"+e,a=r+"bottom"+e,c=r+"left"+e]),{t:bn(f[i]),r:bn(f[u]),b:bn(f[a]),l:bn(f[c])};var n,t,r,e,i,u,a,c,f}),{o:hn}),f=c.v,l=c.m;return function(n,t,i){var o=l(i),c=(o.g,o.p),s=Xn().B,v=n.sn,d=n.vn,g=d.g,h=d.p,_=t("paddingAbsolute"),p=_.g,w=_.p;if(v||c){var b=f(i);b.g,c=b.p}var m=w||h||c;if(m){var y=f(i).g,x=!p||!u&&!s,S=y.r+y.l,z=y.t+y.b,O={marginTop:0,marginRight:0,marginBottom:x?-z:0,marginLeft:0,top:x?-y.t:0,right:0,bottom:0,left:0,maxWidth:x?"calc(100% + "+S+"px)":""},M={paddingTop:x?y.t:0,paddingRight:x?y.r:0,paddingBottom:x?y.b:0,paddingLeft:x?y.l:0};if(x){var L=g?"right":"left",A=g?"marginLeft":"marginRight",C=g?y.r:y.l;O[L]=-C,O[A]=-S}xn(u||a,O),xn(a,M),r({dn:!x,I:y}),e(u?M:Mn({},O,M))}return{gn:m}}},Un=function(t){var r=t.ln,e=t.hn,i=t._n,o=t.pn,u=t.wn,a=r.on,c=a.G,f=a.I,l=a.K,s=a.in,v=n((function(n){return b(n.bn,n.mn,n.yn)}),{o:dn}),d=v.v,g=v.m,h=n((function(n){return{x:Math.max(0,n.xn.w-n.Sn.w),y:Math.max(0,n.xn.h-n.Sn.h)}}),{o:gn,u:{x:0,y:0}}),_=h.v,w=h.m,b=function(n,t,r){return{w:n.w-Math.round(Math.max(0,r.width-t.w)),h:n.h-Math.round(Math.max(0,r.height-t.h))}},m=function(n,t){if(xn(l,{height:""}),t){var r=o(),e=r.dn,i=r.I,u=n.zn,a=n.On,f=an(c),s=en(c),v=on(c),d=e?i.b+i.t:0,g=v.h+(f.height-s.h);xn(l,{height:g+(u.x?a.x:0)-d})}},y=function(n,t){var r=Xn(),e=r.j,i=r.V,o=r.B,u=i.x,a=i.y,c=o||n?0:42,f=!t?xn(l,["overflowX","overflowY"]):t,s={x:"scroll"===f.overflowX,y:"scroll"===f.overflowY};return{zn:s,Mn:{x:u&&!!c,y:a&&!!c},On:{x:s.x&&!o?u?c:e.x:0,y:s.y&&!o?a?c:e.y:0}}},x=function(n,t,r){if(e){var o=n.On,u=n.Mn,a=u.x,c=u.y,f=o.x,v=o.y,d=i(),g=d[r?"paddingRight":"paddingLeft"],h=d.paddingTop,_={w:v&&c?v+t.w-g+"px":"",h:f&&a?f+t.h-h+"px":""};if(s){var p=s.sheet;if(p){var w=p.cssRules;if(w){w.length||p.insertRule("#"+L(s,"id")+" + .os-viewport-arrange::before {}",0);var b=w[0].style;b.width=_.w,b.height=_.h}}}else xn(l,{"--viewport-arrange-width":_.w,"--viewport-arrange-height":_.h})}return e};return function(n,t,r){var o,a=n.vn,s=n.Ln,v=n.sn,h=n.An,z=n.Cn,O=n.gn,M=Xn(),L=M.q,A=M.B,C=M.V,T=s.g,I=s.p,R=a.g,j=a.p,V=t("nativeScrollbarsOverlaid.show"),E=V.g,B=V.p,D=E&&C.x&&C.y,P=!L&&(v||z||h||B||I),q=w(r),F=g(r);if(B&&A&&(D?nn(l,"os-viewport-scrollbar-styled"):Z(l,"os-viewport-scrollbar-styled")),P&&(o=y(D),m(o,!!T)),v||O||z||B||j){var H=function(n,t){if(e){var r=t||y(n),o=i(),u=Xn().q,a=r.Mn,c=a.x,f=a.y,s={},v=function(n){return p(n.split(" "),(function(n){s[n]=o[n]}))};u||(s.height=""),c&&v("marginTop marginBottom paddingTop paddingBottom"),f&&v("marginLeft marginRight paddingLeft paddingRight");var d=xn(l,S(s));return nn(l,"os-viewport-arrange"),xn(l,s),{Tn:function(){xn(l,d),Z(l,"os-viewport-arrange")},In:r}}return{Tn:pn}}(D,o),W=H.Tn,Y=H.In,N=on(l),X=an(l),k=en(l),$=un(l),G=N,J=F=d(r,{yn:X,mn:k,bn:$}),K=J.g,U=J.p;W(),(U||B)&&Y&&!D&&x(Y,K,R)&&(G=on(l),$=b(un(l),en(l),an(l))),q=_(r,{xn:{w:Math.max(K.w,$.w),h:Math.max(K.h,$.h)},Sn:{w:G.w+Math.max(0,N.w-K.w),h:G.h+Math.max(0,N.h-K.h)}})}var Q=t("overflow"),tn=Q.g,rn=Q.p,cn=F,fn=cn.g,ln=cn.p,sn=q,vn=sn.g,dn=sn.p;if(O||ln||dn||rn||B||j||P){var gn={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,maxWidth:"",overflowY:"",overflowX:""},hn=function(n,t,r,e){var i=function(n,t,r,e){var i="visible-scroll"===r,o=t>0&&("scroll"===r||"hidden"===r);return o&&(e[n?"overflowX":"overflowY"]=r),{Rn:!o,jn:i?"scroll":"hidden"}},o=i(!0,t.x,r.x,e),u=o.Rn,a=o.jn,c=i(!1,t.y,r.y,e),f=c.Rn,l=c.jn;return u&&!f&&(e.overflowX=a),f&&!u&&(e.overflowY=l),y(n,e)}(D,vn,tn,gn);!function(n,t,r,e){var o=Xn().B,u=n.zn,a=n.On,l=n.Mn,s=l.x,v=l.y,d=a.x,g=a.y,h=u.x,_=u.y,p=i(),w=t?"marginLeft":"marginRight",b=t?"paddingLeft":"paddingRight",m=p[w],y=p.marginBottom,x=p[b],S=p.paddingBottom;e.maxWidth="calc(100% + "+(g+-1*m)+"px)",e[w]=-g+m,e.marginBottom=-d+y,r&&(e[b]=x+(v?g:0),e.paddingBottom=S+(s?d:0)),o||xn(f||c,{overflow:h||_?"hidden":""})}(hn,R,x(hn,fn,R),gn),P&&m(hn,!!T),xn(l,gn),u(hn.zn)}}},Qn=function(n){return"rtl"===xn(n,"direction")},Zn=function(n){return n&&(n.height||n.width)},nt=function(t,r,e){var i,o=e||{},u=o.Vn,a=void 0!==u&&u,c=o.En,f=void 0!==c&&c,s=Xn().P,d=W('
')[0],g=d.firstChild,h=n(0,{s:!0,o:function(n,t){return!(!n||!Zn(n)&&Zn(t))}}).v,_=function(n){var t=n&&l(n.g),e=!1;if(v(n)&&n.length>0){var i=h(0,n.pop().contentRect),o=i._,u=i.g;i.p;e=!o||!Zn(u)}else t&&n.p;if(a){var c=t?n.g:Qn(d);A(d,c?s.n?-3333333:s.i?0:3333333:3333333),C(d,3333333)}e||r(t?n:void 0)},p=[],b=!!f&&_;if(G){var m=new G(_);m.observe(g),w(p,(function(){return m.disconnect()}))}else{var x=W('
');D(g,x),Z(g,"os-size-observer-listener-scroll");var S,z=x[0],O=z.lastChild,M=z.firstChild,L=null==M?void 0:M.firstChild,T=en(g),I=T,R=!1,j=function(){A(M,3333333),C(M,3333333),A(O,3333333),C(O,3333333)},V=function(){S=0,R&&(T=I,_())},E=function(n){I=en(g),R=!n||!dn(I,T),n?(sn(n),R&&!S&&(J(S),S=K(V))):V(),j()};w(p,[ln(M,"scroll",E),ln(O,"scroll",E)]),xn(L,{width:3333333,height:3333333}),j(),b=f?E.bind(0,!1):j}if(a){var B=(i=n((function(){return Qn(d)}))).v;w(p,ln(d,"scroll",(function(n){var t=B(),r=t.g;t.p&&(xn(g,r?{left:"auto",right:0}:{left:0,right:"auto"}),_(t)),sn(n)})))}return b&&(Z(d,"os-size-observer-appear"),w(p,ln(d,"animationstart",b,{M:!!G}))),P(t,d),{an:function(){y(p),F(d)},Bn:function(n){return{vn:i?i.m(n):{g:!1,_:!1,p:!1}}}}},tt=function(n,t,r,e){var i,u,a,l,v,d,g,h,_,b,y=!1,x=e||{},S=x.Dn,z=x.Pn,O=x.qn,M=x.Fn,A=x.Hn,C=x.Wn,T=x.Yn,I=function(n,t,r){var e,i,u=function(){e&&(e.forEach((function(n,t){return fn(t,n,r)})),e.clear())},a=function(t){e&&i&&p(i.reduce((function(r,e){if(e){var i=e[0],o=e[1],u=o&&i&&(t?t(i):R(i,n)),a=s(o)?o(u):o;u&&u.length&&a&&f(a)&&w(r,[u,a.trim()],!0)}return r}),[]),(function(n){return p(n[0],(function(t){var i=n[1],u=e.get(t),a=!o(u)&&i!==u,c=a?u+" "+i:i;a&&fn(t,u,r),e.set(t,c),ln(t,c,r)}))}))},c=function(n){e=e||new Map,i=n,u(),a()};return t&&c(t),{an:u,Nn:a,Xn:c}}(n,t&&O,(i=function(){y&&r(!0)},d=c(u=84)&&u>0,g=c(a)&&a>0,h=d?window.clearTimeout:J,_=d?window.setTimeout:K,b=function(n){v=g?performance.now():0,l&&h(l),i.apply(this,n)},function(){var n=b.bind(this,arguments),t=!!g&&performance.now()-v>=a;l&&h(l),l=t?n():_(n,u)})),V=I.an,E=I.Nn,B=I.Xn,D=z||[],P=(S||[]).concat(D),q=function(i){var o=(t?C:A)||pn,u=T||pn,a=[],c=[],l=!1,s=!1,v=!1;p(i,(function(r){var i,d,g=r.attributeName,h=r.target,_=r.type,p=r.oldValue,b=r.addedNodes,m="attributes"===_,y="childList"===_,x=n===h,S=m&&f(g)?L(h,g):0,z=0!==S&&p!==S,O=(i=g,D.indexOf(i,d)>-1&&z);if(t&&!x){var A=!m,C=m&&O,T=C&&M&&j(h,M),I=(T?!o(h,g,p,S):A||C)&&!u(r,!!T,n,e);w(c,b),s=s||I,v=v||y}!t&&x&&z&&!o(h,g,p,S)&&(w(a,g),l=l||O)})),v&&!m(c)&&E((function(n){return c.reduce((function(t,r){return w(t,R(n,r)),j(r,n)?w(t,r):t}),[])})),t?s&&r(s):m(a)&&!l||r(a,l)},F=new k(q);return F.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:P,subtree:t,childList:t,characterData:t}),y=!0,{an:function(){y&&(V(),F.disconnect(),y=!1)},Xn:function(n){B(y&&t&&n)},v:function(){y&&q(F.takeRecords())}}},rt=function(n,t){return n&&t.split(".").reduce((function(n,t){return n&&x(n,t)?n[t]:void 0}),n)},et=["id","class","style","open"],it={dn:!1,I:{t:0,r:0,b:0,l:0}},ot={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},ut={x:!1,y:!1},at={g:!1,_:!1,p:!1},ct={g:!1,_:!1,p:!1},ft=function(t,r){var e=it,i=ot,o=ut,u=r.on,a=u.G,f=u.K,l=u.R,s=Xn(),v=s.B,d=s.V,g=s.q,h=s.F,_=s.H,b=!v&&(d.x||d.y),m=[],x={T:t,ln:r,hn:b,pn:function(){return e},cn:function(n){e=n||it},_n:function(){return i},fn:function(n){var t,r;i=n?(r=ot,S(t=n).reduce((function(n,r){var e=t[r];return n[r]=""===e?0:e,n}),Mn({},r))):ot},kn:function(){return o},wn:function(n){o=n||ut}};w(m,function(n){var t=n.ln.on.R;return function(n){var r=n.Ln,e=r.g;r.p&&xn(t,{height:e?"auto":"100%"})}}(x)),w(m,Kn(x)),w(m,Un(x));var z=function(n,r,e){var i=n||{},o=i.vn,u=i.Ln,a=i.sn,l=void 0===a?e||!1:a,s=i.An,v=void 0===s?e||!1:s,d=i.Cn,h=void 0===d?e||!1:d,_=i.gn,w=void 0===_?e||!1:_,y=o||(M?M.Bn(e).vn:at),x=u||(O?O.Bn(e).Ln:ct),S=function(n){return{g:rt(t,n),p:e||void 0!==rt(r,n)}},z=b||!g,L=z&&A(f),T=z&&C(f);p(m,(function(n){var t=n({vn:y,Ln:x,sn:l,An:v,Cn:h,gn:w},S,!!e)||{},r=t.sn,i=t.An,o=t.Cn,u=t.gn;l=r||l,v=i||v,h=o||h,w=u||w})),c(L)&&A(f,L),c(T)&&C(f,T)},O=(l||!g)&&function(t,r){var e=H("os-trinsic-observer"),i=[],o=n((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{u:!1}),u=o.v,a=o.m;if($){var c=new $((function(n){if(n&&n.length>0){var t=n.pop();if(t){var e=u(0,t);e.p&&r(e)}}}),{root:t});c.observe(e),w(i,(function(){return c.disconnect()}))}else{var f=function(){var n=en(e),t=u(0,n);t.p&&r(t)};w(i,nt(e,f).an),f()}return P(t,e),{an:function(){y(i),F(e)},Bn:function(n){return{Ln:a(n)}}}}(a,(function(n){z({Ln:n})})),M=nt(a,(function(n){z({vn:n,sn:!n})}),{En:!0,Vn:!v}),L=(tt(a,!1,(function(){requestAnimationFrame((function(){z({An:!0})}))}),{Pn:et,Dn:et}),tt(l||f,!0,(function(){requestAnimationFrame((function(){z({Cn:!0})}))}),{Pn:et,Dn:et,qn:t.updating.elementEvents}),function(n,t){z(null,n,t)}),T=L.bind(null,null,!0);return h(T),{v:L,an:function(){_(T)}}};return function(n,t,r){var e=z({},(0,Xn().N)(),Tn(t||{},Bn,null,!0).L),i=Jn(n),o=ft(e,i),u={options:function(n){if(n){var t=Tn(n,Bn,e,!0).L;O(t)||(z(e,t),o.v(t))}return e},update:function(n){o.v(null,n)}};return u.update(!0),u}})); \ No newline at end of file +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=t()}(this,(function(){"use strict";var n=function(n,t){var r,e=t||{},i=e.o,o=e.u,u=e.s,a=o;return{v:function(t,e){var o=a,c=n?n(e,a,r):e,f=t||(i?!i(o,c):o!==c);return(f||u)&&(a=c,r=o),{_:a,g:r,p:f}},m:function(n){return{_:a,g:r,p:!!n}}}},t=Node.ELEMENT_NODE,r=Object.prototype,e=r.toString,i=r.hasOwnProperty;function o(n){return void 0===n}function u(n){return null===n}var a=function(n){return o(n)||u(n)?""+n:e.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function f(n){return"string"==typeof n}function l(n){return"boolean"==typeof n}function s(n){return"function"==typeof n}function v(n){return Array.isArray(n)}function d(n){return"object"==typeof n&&!v(n)&&!u(n)}function _(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(v(n)||!s(n)&&r)&&(!(t>0&&d(n))||t-1 in n)}function g(n){if(!n||!d(n)||"object"!==a(n))return!1;var t,r=n.constructor,e=r&&r.prototype,u=i.call(n,"constructor"),c=e&&i.call(e,"isPrototypeOf");if(r&&!u&&!c)return!1;for(t in n);return o(t)||i.call(n,t)}function h(n){var r=window.Element;return!!n&&(r?n instanceof r:n.nodeType===t)}function p(n,t){if(_(n))for(var r=0;r0;e=u[i++];)o=!!r(n.classList,e)&&o}return o},tn=function(n,t){nn(n,t,(function(n,t){return n.add(t)}))},rn=function(n,t){nn(n,t,(function(n,t){return n.remove(t)}))},en={w:0,h:0},on=function(){return{w:window.innerWidth,h:window.innerHeight}},un=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:en},an=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:en},cn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:en},fn=function(n){return n.getBoundingClientRect()},ln=function(n){return n.split(" ")},sn=function(n,t,r,e){p(ln(t),(function(t){n.removeEventListener(t,r,e)}))},vn=function(n,t,r,e){var i=function(){if(o(T)){T=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){T=!0}}))}catch(n){}}return T}(),u=i&&e&&e.S||!1,a=e&&e.O||!1,c=e&&e.C||!1,f=[],l=i?{passive:u,capture:a}:a;return p(ln(t),(function(t){var e=c?function(i){n.removeEventListener(t,e,a),r&&r(i)}:r;w(f,sn.bind(null,n,t,e,a)),n.addEventListener(t,e,l)})),y.bind(0,f)},dn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},_n=function(n,t,r,e){if(n&&t){var i=!0;return p(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},gn=function(n,t){return _n(n,t,["w","h"])},hn=function(n,t){return _n(n,t,["t","r","b","l"])},pn=function(n,t,r){return _n(n,t,["width","height"],r&&function(n){return Math.round(n)})},wn=function(){},bn={opacity:1,zindex:1},mn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},yn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},xn=function(n,t,r){try{if(n){var e=n.style;o(e[t])?e.setProperty(t,r):e[t]=function(n,t){return!bn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r)}}catch(i){}};function Sn(n,t){var r=f(t);if(v(t)||r){var e=r?"":{};if(n){var i=window.getComputedStyle(n,null);e=r?yn(n,i,t):t.reduce((function(t,r){return t[r]=yn(n,i,r),t}),e)}return e}p(S(t),(function(r){return xn(n,r,t[r])}))}var zn={x:0,y:0},On=function(n){var t=n?fn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:zn};var Cn,Mn=function(n){var t={exports:{}};return n(t,t.exports),t.exports}((function(n){function t(){return n.exports=t=Object.assign||function(n){for(var t=1;t0?"\r\nValid strings are: [ "+S.join(", ")+" ].":""));delete l[s]}})),{A:l,M:c}}(n,t,r||{},e||!1)},Rn=Tn.number,jn=[Tn.string,Tn.array,Tn.null],En=[!0,Tn.boolean],Vn=[!1,Tn.boolean],Bn=function n(t){var r={L:{},T:{}};return p(S(t),(function(e){var i=t[e];if(v(i))r.L[e]=i[1],r.T[e]=i[0];else{var o=n(i);r.L[e]=o.L,r.T[e]=o.T}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:Vn,updating:{elementEvents:[[["img","load"]],[Tn.array,Tn.null]],contentMutationDebounce:[80,Rn],hostMutationDebounce:[0,Rn],resizeDebounce:[0,Rn]},overflow:{x:["scroll","hidden scroll visible visible-hidden"],y:["scroll","hidden scroll visible visible-hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,Rn],dragScroll:En,clickScroll:Vn,touch:En},textarea:{dynWidth:Vn,dynHeight:Vn,inheritedAttrs:[["style","class"],jn]},nativeScrollbarsOverlaid:{show:Vn,initialize:Vn}}),Dn=Bn.L,qn=Bn.T,Fn=Math.abs,Pn=Math.round,Hn=function(n,t){F(n,t);var r=an(t),e=un(t);return{x:e.h-r.h,y:e.w-r.w}},Yn=function(n,t){Sn(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),A(n,0);var r=On(n),e=On(t);A(n,-999);var i=On(t);return{i:r.x===e.x,n:e.x!==i.x}},Nn=function(n,t){tn(n,"os-environment-flexbox-glue");var r=fn(n),e=fn(t),i=pn(e,r,!0);tn(n,"os-environment-flexbox-glue-max");var o=fn(n),u=fn(t),a=pn(u,o,!0);return i&&a},Wn=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},Xn=function(){var n,t,r=document.body,e=W('
')[0],i=e.firstChild,o=new Set,u=Hn(r,e),a={x:0===u.x,y:0===u.y},c=function(n){return{I:!n,R:!1}}(!1),f=c,l=qn,s={j:u,V:a,B:!1,D:"-1"===Sn(e,"zIndex"),q:Yn(e,i),F:Nn(e,i),P:function(n){o.add(n)},H:function(n){o.delete(n)},Y:function(){return Mn({},f)},N:function(n){f=z({},f,n)},W:function(){return Mn({},l)},X:function(n){l=z({},l,n)},k:c,$:l};if(t="style",(n=e)&&n.removeAttribute(t),Y(e),!a.x||!a.y){var v=on(),d=Wn(),_=u;window.addEventListener("resize",(function(){if(o.size){var n=on(),t={w:n.w-v.w,h:n.h-v.h};if(0===t.w&&0===t.h)return;var i={w:Fn(t.w),h:Fn(t.h)},u={w:Fn(Pn(n.w/(v.w/100))),h:Fn(Pn(n.h/(v.h/100)))},a=Wn(),c=i.w>2&&i.h>2,f=(s=u.h,g=Fn(u.w),h=Fn(s),!(g!==h&&g+1!==h&&g-1!==h));if(c&&f&&(a!==d&&d>0)){var l=Cn.j=Hn(r,e);Y(e),_.x===l.x&&_.y===l.y||y(o),_=l}v=n,d=a}var s,g,h}))}return s},kn=function(){return Cn||(Cn=Xn()),Cn},$n=function(n){F(V(n),E(n)),Y(n)},Gn=0,Jn=function(n,t){var r=l(n);return r||o(n)?(r?n:t)&&void 0:n},Kn=function(n){var r=kn(),e=r.Y,i=r.B,u=r.V,a=r.D,c=e(),f=c.I,l=c.R,s=function(n){var r=window.HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===t)}(n),v=s?{}:{G:n.host,J:n.target,K:n.viewport,I:Jn(n.padding,f),R:Jn(n.content,l)};if(s){var d=N("os-viewport"),_=f&&N("os-padding"),g=l&&N("os-content");v.J=n,v.I=_,v.K=d,v.R=g}var h=v.J,p=v.I,b=v.K,m=v.R,x=[],S=j(h,"textarea"),z=!S&&j(h,"body"),O=S?v.G||N():h,C=function(n){return S?h:E(n)};if(S&&O!==v.G&&(H(h,O),w(x,(function(){H(O,h),Y(O)}))),s){var A=m||b;F(A,C(h)),F(O,p),F(p||O,b),F(b,m),w(x,(function(){F(O,E(A)),Y(p||b),rn(O,"os-host")}))}else{var L=m||b||p||O,T=o(p),I=o(b),R=o(m),B=C(L);p=v.I=T?N():p,b=v.K=I?N():b,m=v.R=R?N():m,F(O,p),F(p||O,b),F(b,m),F(m||b,B),w(x,(function(){R&&$n(m),I&&$n(b),T&&$n(p),rn(O,"os-host"),rn(p,"os-padding"),rn(b,"os-viewport"),rn(m,"os-content")}))}tn(O,"os-host"),tn(p,"os-padding"),tn(b,"os-viewport"),tn(m,"os-content");var D,P,W,X=h.ownerDocument,k=X.body,$={U:X.defaultView,Z:X,nn:V(k),tn:k,rn:S,en:z},G=Mn({},v,{G:O});if(i)w(x,rn.bind(0,b,"os-viewport-scrollbar-styled"));else if(!a&&(u.x||u.y)){var J=(M(W=document.createElement("style"),"id","os-viewport-arrange-"+Gn),Gn++,W);P=J,q(V(D=b),D,P),w(x,Y.bind(0,J)),G.in=J}return{on:G,un:$,an:function(){y(x)}}},Un=function(t){var r=t.cn,e=t.fn,i=r.on,o=i.G,u=i.I,a=i.K,c=n((function(){return f=Sn(o,[i=(r=(n="padding")?n+"-":"")+"top"+(e=t?"-"+t:""),u=r+"right"+e,a=r+"bottom"+e,c=r+"left"+e]),{t:mn(f[i]),r:mn(f[u]),b:mn(f[a]),l:mn(f[c])};var n,t,r,e,i,u,a,c,f}),{o:hn}),f=c.v,l=c.m;return function(n,t,r){var i=l(r),o=(i._,i.p),c=kn().B,s=n.ln,v=n.sn,d=v._,_=v.p,g=t("paddingAbsolute"),h=g._,p=g.p;if(s||o){var w=f(r);w._,o=w.p}var b=p||_||o;if(b){var m=f(r)._,y=!h||!u&&!c,x=m.r+m.l,S=m.t+m.b,z={marginTop:0,marginRight:0,marginBottom:y?-S:0,marginLeft:0,top:y?-m.t:0,right:0,bottom:0,left:0,maxWidth:y?"calc(100% + "+x+"px)":""},O={paddingTop:y?m.t:0,paddingRight:y?m.r:0,paddingBottom:y?m.b:0,paddingLeft:y?m.l:0};if(y){var C=d?"right":"left",M=d?"marginLeft":"marginRight",A=d?m.r:m.l;z[C]=-A,z[M]=-x}Sn(u||a,z),Sn(a,O),e({vn:{dn:!y,I:m},_n:u?O:Mn({},z,O)})}return{gn:b}}},Qn=function(t){var r=t.cn,e=t.hn,i=t.pn,o=t.fn,u=r.on,a=u.G,c=u.K,f=u.in,l=n((function(n){return h(n.wn,n.bn,n.mn)}),{o:gn}),s=l.v,v=l.m,d=n((function(n){return{w:Math.max(0,n.yn.w-n.xn.w),h:Math.max(0,n.yn.h-n.xn.h)}}),{o:gn,u:{w:0,h:0}}),_=d.v,g=d.m,h=function(n,t,r){return{w:n.w-Math.round(Math.max(0,r.width-t.w)),h:n.h-Math.round(Math.max(0,r.height-t.h))}},w=function(n,t){if(Sn(c,{height:""}),t){var r=i().vn,e=r.dn,o=r.I,u=n.Sn,f=n.zn,l=fn(a),s=un(a),v=an(a),d=e||"content-box"===Sn(c,"boxSizing")?o.b+o.t:0,_=v.h+(l.height-s.h);Sn(c,{height:_+(u.x?f.x:0)-d})}},b=function(n,t){var r=kn(),e=r.j,i=r.V,o=r.B,u=i.x,a=i.y,f=o||n?0:42,l=!t?Sn(c,["overflowX","overflowY"]):t,s={x:"scroll"===l.overflowX,y:"scroll"===l.overflowY};return{Sn:s,On:{x:u&&!!f,y:a&&!!f},zn:{x:s.x&&!o?u?f:e.x:0,y:s.y&&!o?a?f:e.y:0}}},m=function(n,t,r){if(e){var o=n.zn,u=n.On,a=u.x,l=u.y,s=o.x,v=o.y,d=i()._n,_=d[r?"paddingRight":"paddingLeft"],g=d.paddingTop,h={w:v&&l?v+t.w-_+"px":"",h:s&&a?s+t.h-g+"px":""};if(f){var p=f.sheet;if(p){var w=p.cssRules;if(w){w.length||p.insertRule("#"+M(f,"id")+" + .os-viewport-arrange::before {}",0);var b=w[0].style;b.width=h.w,b.height=h.h}}}else Sn(c,{"--viewport-arrange-width":h.w,"--viewport-arrange-height":h.h})}return e},y=function(n,t,r,e){var o=n.zn,u=n.On,a=u.x,c=u.y,f=o.x,l=o.y,s=i()._n,v=t?"marginLeft":"marginRight",d=t?"paddingLeft":"paddingRight",_=s[v],g=s.marginBottom,h=s[d],p=s.paddingBottom;e.maxWidth="calc(100% + "+(l+-1*_)+"px)",e[v]=-l+_,e.marginBottom=-f+g,r&&(e[d]=h+(c?l:0),e.paddingBottom=p+(a?f:0))};return function(n,t,r){var u,a=n.sn,f=n.Cn,l=n.ln,d=n.Mn,x=n.An,z=n.gn,O=kn(),C=O.F,M=O.B,A=O.V,L=f._,T=f.p,I=a._,R=a.p,j=t("nativeScrollbarsOverlaid.show"),E=j._,V=j.p,B=E&&A.x&&A.y,D=!C&&(l||x||d||V||T),q=g(r),F=v(r);if(V&&M&&(B?rn(c,"os-viewport-scrollbar-styled"):tn(c,"os-viewport-scrollbar-styled")),D&&(u=b(B),w(u,!!L)),l||z||x||V||R){var P=function(n,t,r){if(e){var o=r||b(n),u=i()._n,a=kn().F,f=o.On,l=f.x,s=f.y,v={},d=function(n){return p(n.split(" "),(function(n){v[n]=u[n]}))};a||(v.height=""),l&&d("marginTop marginBottom paddingTop paddingBottom"),s&&d("marginLeft marginRight paddingLeft paddingRight");var _=Sn(c,S(v));return rn(c,"os-viewport-arrange"),Sn(c,v),{Ln:function(){y(o,t,e,_),Sn(c,_),tn(c,"os-viewport-arrange")},Tn:o}}return{Ln:wn}}(B,I,u),H=P.Ln,Y=P.Tn,N=an(c),W=fn(c),X=un(c),k=cn(c),$=N,G=F=s(r,{mn:W,bn:X,wn:k}),J=G._,K=G.p;H(),(K||V)&&Y&&!B&&m(Y,J,I)&&($=an(c),k=h(cn(c),un(c),fn(c))),q=_(r,{yn:{w:Math.max(J.w,k.w),h:Math.max(J.h,k.h)},xn:{w:$.w+Math.max(0,N.w-J.w),h:$.h+Math.max(0,N.h-J.h)}})}var U=t("overflow"),Q=U._,Z=U.p,nn=F,en=nn._,on=nn.p,ln=q,sn=ln._,vn=ln.p;if(z||on||vn||Z||V||R||D){var dn={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,maxWidth:"",overflowY:"",overflowX:""},_n=function(n,t,r,e){var i=function(n,t,r,e){var i=n?"overflowX":"overflowY",o=0===r.indexOf("visible"),u="visible-hidden"===r,a="scroll"===r;return o&&(e[i]="visible"),a&&t>0&&(e[i]=r),{In:o,Rn:u?"hidden":"scroll"}},o=i(!0,t.w,r.x,e),u=o.In,a=o.Rn,c=i(!1,t.h,r.y,e),f=c.In,l=c.Rn;return u&&!f&&(e.overflowX=a),f&&!u&&(e.overflowY=l),b(n,e)}(B,sn,Q,dn),gn=m(_n,en,I);y(_n,I,gn,dn),D&&w(_n,!!L),Sn(c,dn),o({jn:_n.Sn,En:sn})}}},Zn=function(n){return"rtl"===Sn(n,"direction")},nt=function(n){return n&&(n.height||n.width)},tt=function(t,r,e){var i,o=e||{},u=o.Vn,a=void 0!==u&&u,c=o.Bn,f=void 0!==c&&c,s=kn().q,d=W('
')[0],_=d.firstChild,g=n(0,{s:!0,o:function(n,t){return!(!n||!nt(n)&&nt(t))}}).v,h=function(n){var t=n&&l(n._),e=!1;if(v(n)&&n.length>0){var i=g(0,n.pop().contentRect),o=i.g,u=i._;i.p;e=!o||!nt(u)}else t&&n.p;if(a){var c=t?n._:Zn(d);A(d,c?s.n?-3333333:s.i?0:3333333:3333333),L(d,3333333)}e||r(t?n:void 0)},p=[],b=!!f&&h;if(K){var m=new K(h);m.observe(_),w(p,(function(){return m.disconnect()}))}else{var x=W('
');F(_,x),tn(_,"os-size-observer-listener-scroll");var S,z=x[0],O=z.lastChild,C=z.firstChild,M=null==C?void 0:C.firstChild,T=un(_),I=T,R=!1,j=function(){A(C,3333333),L(C,3333333),A(O,3333333),L(O,3333333)},E=function(){S=0,R&&(T=I,h())},V=function(n){I=un(_),R=!n||!gn(I,T),n?(dn(n),R&&!S&&(U(S),S=Q(E))):E(),j()};w(p,[vn(C,"scroll",V),vn(O,"scroll",V)]),Sn(M,{width:3333333,height:3333333}),j(),b=f?V.bind(0,!1):j}if(a){var B=(i=n((function(){return Zn(d)}))).v;w(p,vn(d,"scroll",(function(n){var t=B(),r=t._;t.p&&(rn(_,"ltr rtl"),tn(_,r?"rtl":"ltr"),h(t)),dn(n)})))}return b&&(tn(d,"os-size-observer-appear"),w(p,vn(d,"animationstart",b,{C:!!K}))),P(t,d),{an:function(){y(p),Y(d)},Dn:function(n){return{sn:i?i.m(n):{_:!1,g:!1,p:!1}}}}},rt=function(n,t,r,e){var i,u,a,l,v,d,_,g,h,b,y=!1,x=e||{},S=x.qn,z=x.Fn,O=x.Pn,C=x.Hn,A=x.Yn,L=x.Nn,T=x.Wn,I=function(n,t,r){var e,i,u=function(){e&&(e.forEach((function(n,t){return sn(t,n,r)})),e.clear())},a=function(t){e&&i&&p(i.reduce((function(r,e){if(e){var i=e[0],o=e[1],u=o&&i&&(t?t(i):R(i,n)),a=s(o)?o(u):o;u&&u.length&&a&&f(a)&&w(r,[u,a.trim()],!0)}return r}),[]),(function(n){return p(n[0],(function(t){var i=n[1],u=e.get(t),a=!o(u)&&i!==u,c=a?u+" "+i:i;a&&sn(t,u,r),e.set(t,c),vn(t,c,r)}))}))},c=function(n){e=e||new Map,i=n,u(),a()};return t&&c(t),{an:u,Xn:a,kn:c}}(n,t&&O,(i=function(){y&&r(!0)},d=c(u=84)&&u>0,_=c(a)&&a>0,g=d?window.clearTimeout:U,h=d?window.setTimeout:Q,b=function(n){v=_?performance.now():0,l&&g(l),i.apply(this,n)},function(){var n=b.bind(this,arguments),t=!!_&&performance.now()-v>=a;l&&g(l),l=t?n():h(n,u)})),E=I.an,V=I.Xn,B=I.kn,D=z||[],q=(S||[]).concat(D),F=function(i){var o=(t?L:A)||wn,u=T||wn,a=[],c=[],l=!1,s=!1,v=!1;p(i,(function(r){var i,d,_=r.attributeName,g=r.target,h=r.type,p=r.oldValue,b=r.addedNodes,m="attributes"===h,y="childList"===h,x=n===g,S=m&&f(_)?M(g,_):0,z=0!==S&&p!==S,O=(i=_,D.indexOf(i,d)>-1&&z);if(t&&!x){var A=!m,L=m&&O,T=L&&C&&j(g,C),I=(T?!o(g,_,p,S):A||L)&&!u(r,!!T,n,e);w(c,b),s=s||I,v=v||y}!t&&x&&z&&!o(g,_,p,S)&&(w(a,_),l=l||O)})),v&&!m(c)&&V((function(n){return c.reduce((function(t,r){return w(t,R(n,r)),j(r,n)?w(t,r):t}),[])})),t?s&&r(s):m(a)&&!l||r(a,l)},P=new G(F);return P.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:q,subtree:t,childList:t,characterData:t}),y=!0,{an:function(){y&&(E(),P.disconnect(),y=!1)},kn:function(n){B(y&&t&&n)},v:function(){y&&F(P.takeRecords())}}},et=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&x(n,t)?n[t]:void 0}),n):void 0},it=["id","class","style","open"],ot=function(n,t,r,e){var i,o,u,a,c;return!("class"!==t||!r||!e)&&!!(o=e,u=(i=r)&&i.split(" "),a=o&&o.split(" "),c={},p(u,(function(n){c[n]=1})),p(a,(function(n){c[n]?delete c[n]:c[n]=1})),S(c)).find((function(n){return 0!==n.indexOf("os-")}))},ut={_:!1,g:!1,p:!1},at={_:!1,g:!1,p:!1},ct={vn:{dn:!1,I:{t:0,r:0,b:0,l:0}},jn:{x:!1,y:!1},En:{w:0,h:0},_n:{marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}},ft=function(t,r){var e=ct,i=r.on,o=i.G,u=i.K,a=i.R,f=kn(),l=f.B,s=f.V,v=f.F,d=f.P,_=f.H,g=!l&&(s.x||s.y),h=[],b={T:t,cn:r,hn:g,pn:function(){return e},fn:function(n){var t,r;n&&n._n&&(n._n=(t=n._n,r=ct._n,S(t).reduce((function(n,r){var e=t[r];return n[r]=""===e?0:e,n}),Mn({},r)))),e=z({},e,n)}};w(h,function(n){var t=n.cn.on.R;return function(n){var r=n.Cn,e=r._,i=r.p;return i&&Sn(t,{height:e?"":"100%",display:e?"":"inline"}),{ln:i,An:i}}}(b)),w(h,Un(b)),w(h,Qn(b));var m=function(n,r,e){var i=n||{},o=i.sn,a=i.Cn,f=i.ln,l=void 0===f?e||!1:f,s=i.Mn,d=void 0===s?e||!1:s,_=i.An,w=void 0===_?e||!1:_,b=i.gn,m=void 0===b?e||!1:b,y=o||(O?O.Dn(e).sn:ut),S=a||(x?x.Dn(e).Cn:at),z=function(n){return{_:et(t,n),p:e||void 0!==et(r,n)}},C=g||!v,M=C&&A(u),T=C&&L(u);p(h,(function(n){var t=n({sn:y,Cn:S,ln:l,Mn:d,An:w,gn:m},z,!!e)||{},r=t.ln,i=t.Mn,o=t.An,u=t.gn;l=r||l,d=i||d,w=o||w,m=u||m})),c(M)&&A(u,M),c(T)&&L(u,T)},x=(a||!v)&&function(t,r){var e=N("os-trinsic-observer"),i=[],o=n((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{u:!1}),u=o.v,a=o.m;if(J){var c=new J((function(n){if(n&&n.length>0){var t=n.pop();if(t){var e=u(0,t);e.p&&r(e)}}}),{root:t});c.observe(e),w(i,(function(){return c.disconnect()}))}else{var f=function(){var n=un(e),t=u(0,n);t.p&&r(t)};w(i,tt(e,f).an),f()}return P(t,e),{an:function(){y(i),Y(e)},Dn:function(n){return{Cn:a(n)}}}}(o,(function(n){m({Cn:n})})),O=tt(o,(function(n){m({sn:n,ln:!n})}),{Bn:!0,Vn:!l}),C=(rt(o,!1,(function(){requestAnimationFrame((function(){m({Mn:!0})}))}),{Fn:it,qn:it,Yn:ot}),rt(a||u,!0,(function(){requestAnimationFrame((function(){m({An:!0})}))}),{Fn:it,qn:it,Pn:t.updating.elementEvents,Hn:".os-host",Wn:function(n,t){var r=n.target,e=n.attributeName;return!t&&(!!e&&(D(r,".os-host",".os-viewport")||D(r,".os-host",".os-content")))},Nn:ot}),function(n,t){m(null,n,t)}),M=C.bind(null,null,!0);return d(M),console.log(kn()),{v:C,$n:function(){return{Gn:e.En}},an:function(){_(M)}}};return function(n,t,r){var e=z({},(0,kn().W)(),In(t||{},Dn,null,!0).M),i=Kn(n),o=ft(e,i),u={options:function(n){if(n){var t=In(n,Dn,e,!0).M;O(t)||(z(e,t),o.v(t))}return e},state:function(){return o.$n()},update:function(n){o.v(null,n)}};return u.update(!0),u}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/types/lifecycles/lifecycleHub.d.ts b/packages/overlayscrollbars/types/lifecycles/lifecycleHub.d.ts index d5bc31d..c6c5ca4 100644 --- a/packages/overlayscrollbars/types/lifecycles/lifecycleHub.d.ts +++ b/packages/overlayscrollbars/types/lifecycles/lifecycleHub.d.ts @@ -1,16 +1,21 @@ -import { XY, TRBL, CacheValues, PartialOptions } from 'support'; +import { XY, WH, TRBL, CacheValues, PartialOptions } from 'support'; import { OSOptions } from 'options'; import { StructureSetup } from 'setups/structureSetup'; import { StyleObject } from 'typings'; export declare type LifecycleCheckOption = (path: string) => LifecycleOptionInfo; -export interface PaddingInfo { - _absolute: boolean; - _padding: TRBL; -} export interface LifecycleOptionInfo { readonly _value: T; _changed: boolean; } +export interface LifecycleCommunication { + _paddingInfo: { + _absolute: boolean; + _padding: TRBL; + }; + _viewportPaddingStyle: StyleObject; + _viewportOverflowScroll: XY; + _viewportOverflowAmount: WH; +} export interface LifecycleAdaptiveUpdateHints { _sizeChanged: boolean; _hostMutation: boolean; @@ -22,19 +27,19 @@ export interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints { _heightIntrinsic: CacheValues; } export declare type Lifecycle = (updateHints: LifecycleUpdateHints, checkOption: LifecycleCheckOption, force: boolean) => Partial | void; +export interface LifecycleHubState { + _overflowAmount: WH; +} export interface LifecycleHubInstance { _update(changedOptions?: PartialOptions | null, force?: boolean): void; + _state(): LifecycleHubState; _destroy(): void; } export interface LifecycleHub { _options: OSOptions; _structureSetup: StructureSetup; _doViewportArrange: boolean; - _getPaddingInfo(): PaddingInfo; - _setPaddingInfo(newPadding?: PaddingInfo | null): void; - _getViewportPaddingStyle(): StyleObject; - _setViewportPaddingStyle(newPaddingStlye?: StyleObject | null): void; - _getViewportOverflowScroll(): XY; - _setViewportOverflowScroll(newViewportOverflowScroll: XY): void; + _getLifecycleCommunication(): LifecycleCommunication; + _setLifecycleCommunication(newLifecycleCommunication?: Partial): void; } export declare const createLifecycleHub: (options: OSOptions, structureSetup: StructureSetup) => LifecycleHubInstance; diff --git a/packages/overlayscrollbars/types/observers/domObserver.d.ts b/packages/overlayscrollbars/types/observers/domObserver.d.ts index 6656d79..2bdb0b3 100644 --- a/packages/overlayscrollbars/types/observers/domObserver.d.ts +++ b/packages/overlayscrollbars/types/observers/domObserver.d.ts @@ -23,7 +23,8 @@ interface DOMContentObserver extends DOMObserverBase { } interface DOMTargetObserver extends DOMObserverBase { } -export declare type DOMObserverEventContentChange = Array<[StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined> | false | null | undefined; +declare type ContentChangeArrayItem = [StringNullUndefined, ((elms: Node[]) => StringNullUndefined) | StringNullUndefined] | null | undefined; +export declare type DOMObserverEventContentChange = Array | false | null | undefined; export declare type DOMObserverIgnoreContentChange = (mutation: MutationRecord, isNestedTarget: boolean, domObserverTarget: HTMLElement, domObserverOptions: DOMContentObserverOptions | undefined) => boolean; export declare type DOMObserverIgnoreTargetChange = (target: Node, attributeName: string, oldAttributeValue: string | null, newAttributeValue: string | null) => boolean; export declare type DOMObserverCallback = ContentObserver extends true ? DOMContentObserverCallback : DOMTargetObserverCallback; diff --git a/packages/overlayscrollbars/types/observers/sizeObserver.d.ts b/packages/overlayscrollbars/types/observers/sizeObserver.d.ts index 0688c6e..3b818e7 100644 --- a/packages/overlayscrollbars/types/observers/sizeObserver.d.ts +++ b/packages/overlayscrollbars/types/observers/sizeObserver.d.ts @@ -10,7 +10,7 @@ export interface SizeObserver { }; } /** - * Creates a size observer which observes any size, padding, margin and border changes of the target element. Depending on the options also direction and appear can be observed. + * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed. * @param target The target element which shall be observed. * @param onSizeChangedCallback The callback which gets called after a size change was detected. * @param options The options for size detection, whether to observe also direction and appear. diff --git a/packages/overlayscrollbars/types/options.d.ts b/packages/overlayscrollbars/types/options.d.ts index 40574fc..ffe2b5c 100644 --- a/packages/overlayscrollbars/types/options.d.ts +++ b/packages/overlayscrollbars/types/options.d.ts @@ -1,5 +1,5 @@ export declare type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical'; -export declare type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll'; +export declare type OverflowBehavior = 'hidden' | 'scroll' | 'visible' | 'visible-hidden'; export declare type VisibilityBehavior = 'visible' | 'hidden' | 'auto'; export declare type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move'; export declare type ScrollBehavior = 'always' | 'ifneeded' | 'never'; @@ -14,7 +14,7 @@ export interface OSOptions { resize: ResizeBehavior; paddingAbsolute: boolean; updating: { - elementEvents: ReadonlyArray<[string, string]> | null; + elementEvents: Array<[string, string]> | null; contentMutationDebounce: number; hostMutationDebounce: number; resizeDebounce: number; @@ -34,7 +34,7 @@ export interface OSOptions { textarea: { dynWidth: boolean; dynHeight: boolean; - inheritedAttrs: string | ReadonlyArray | null; + inheritedAttrs: string | Array | null; }; nativeScrollbarsOverlaid: { show: boolean; diff --git a/packages/overlayscrollbars/types/overlayscrollbars.d.ts b/packages/overlayscrollbars/types/overlayscrollbars.d.ts index 546608d..f841e0f 100644 --- a/packages/overlayscrollbars/types/overlayscrollbars.d.ts +++ b/packages/overlayscrollbars/types/overlayscrollbars.d.ts @@ -8,5 +8,6 @@ export interface OverlayScrollbars { options(): OSOptions; options(newOptions?: PartialOptions): OSOptions; update(force?: boolean): void; + state(): any; } export declare const OverlayScrollbars: OverlayScrollbarsStatic;