From 1fbc761483789becbda3a15372ba83672403ddcf Mon Sep 17 00:00:00 2001 From: Rene Date: Wed, 15 Jun 2022 22:22:45 +0200 Subject: [PATCH] improve cache code and prettier --- config/rollup/pipeline.build.js | 7 + .../dist/overlayscrollbars.esm.js | 124 +++++----- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 150 ++++++------ .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- .../overlayscrollbars/src/autoUpdateLoop.ts | 14 +- .../src/lifecycles/lifecycleHub.ts | 12 +- .../src/lifecycles/lifecycleHubObservers.ts | 53 ++--- .../src/lifecycles/overflowLifecycle.ts | 117 +++++---- .../src/lifecycles/paddingLifecycle.ts | 10 +- .../src/observers/domObserver.ts | 62 ++++- .../src/observers/sizeObserver.ts | 15 +- .../src/observers/trinsicObserver.ts | 22 +- .../src/overlayscrollbars.ts | 2 +- .../src/support/cache/cache.ts | 85 +++---- .../src/support/compatibility/apis.ts | 4 +- .../src/support/dom/attribute.ts | 6 +- .../src/support/dom/class.ts | 5 +- .../src/support/dom/dimensions.ts | 6 +- .../src/support/dom/events.ts | 10 +- .../src/support/dom/manipulation.ts | 11 +- .../src/support/dom/style.ts | 64 +++-- .../src/support/dom/traversal.ts | 9 +- .../src/support/options/transformation.ts | 12 +- .../src/support/options/validation.ts | 66 ++++-- .../src/support/utils/array.ts | 18 +- .../src/support/utils/object.ts | 27 ++- .../src/support/utils/types.ts | 23 +- .../tests/jest/support/cache/cache.test.ts | 224 ++++++++++-------- 31 files changed, 660 insertions(+), 506 deletions(-) diff --git a/config/rollup/pipeline.build.js b/config/rollup/pipeline.build.js index bdc3e56..be4d1cc 100644 --- a/config/rollup/pipeline.build.js +++ b/config/rollup/pipeline.build.js @@ -83,11 +83,18 @@ module.exports = (esm, options, declarationFiles = false) => { rollupBabelInputPlugin({ ...(esm ? babelConfigEsm : babelConfigUmd), assumptions: { + enumerableModuleMeta: false, + constantReexports: true, iterableIsArray: true, + objectRestNoSymbols: true, noNewArrows: true, noClassCalls: true, ignoreToPrimitiveHint: true, ignoreFunctionLength: true, + // privateFieldsAsProperties: true, + // setPublicClassFields: true, + setSpreadProperties: true, + pureGetters: true, }, plugins: [ '@babel/plugin-transform-runtime', diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index f40c408..b27ceed 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -1,16 +1,16 @@ -const createCache = (update, options) => { +function createCache(options, update) { const { _initialValue, _equal, _alwaysUpdateValues - } = options || {}; + } = options; let _value = _initialValue; let _previous; - const cacheUpdate = (force, context) => { + const cacheUpdateContextual = (newValue, force) => { const curr = _value; - const newVal = update ? update(context, _value, _previous) : context; + const newVal = newValue; const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal); if (changed || _alwaysUpdateValues) { @@ -21,8 +21,12 @@ const createCache = (update, options) => { return [_value, changed, _previous]; }; - return [cacheUpdate, force => [_value, !!force, _previous]]; -}; + const cacheUpdateIsolated = force => cacheUpdateContextual(update(_value, _previous), force); + + const getCurrentCache = force => [_value, !!force, _previous]; + + return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache]; +} const ElementNodeType = Node.ELEMENT_NODE; const { @@ -35,9 +39,7 @@ function isUndefined(obj) { function isNull(obj) { return obj === null; } -const type = obj => { - return isUndefined(obj) || isNull(obj) ? `${obj}` : toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase(); -}; +const type = obj => isUndefined(obj) || isNull(obj) ? `${obj}` : toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase(); function isNumber(obj) { return typeof obj === 'number'; } @@ -100,7 +102,7 @@ function each(source, callback) { return source; } -const indexOf = (arr, item, fromIndex) => arr.indexOf(item, fromIndex); +const indexOf = (arr, item, fromIndex) => isArray(arr) ? arr.indexOf(item, fromIndex) : -1; const push = (array, items, arrayIsSingleItem) => { !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items) : array.push(items); return array; @@ -116,7 +118,7 @@ const from = arr => { }); return result; }; -const isEmptyArray = array => array && array.length === 0; +const isEmptyArray = array => !!array && array.length === 0; const runEach = (arr, p1) => { const runFn = fn => fn && fn(p1); @@ -464,8 +466,6 @@ const equalWH = (a, b) => equal(a, b, ['w', 'h']); 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))); -const setT = window.setTimeout; - const clearTimeouts = id => { id && window.clearTimeout(id); id && cAF(id); @@ -481,7 +481,8 @@ const debounce = (functionToDebounce, options) => { _timeout, _maxDelay, _mergeParams - } = options; + } = options || {}; + const setT = window.setTimeout; const invokeFunctionToDebounce = function invokeFunctionToDebounce(args) { clearTimeouts(timeoutId); @@ -499,7 +500,7 @@ const debounce = (functionToDebounce, options) => { }; const debouncedFn = function debouncedFn() { - const args = arguments; + const args = from(arguments); const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout; const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0; @@ -510,11 +511,6 @@ const debounce = (functionToDebounce, options) => { const mergeParamsResult = mergeParms(args); const invokedArgs = mergeParamsResult || args; const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs); - - if (!mergeParamsResult) { - invokeFunctionToDebounce(prevArguments || args); - } - clearTimeouts(timeoutId); timeoutId = setTimeoutFn(boundInvoke, finalTimeout); @@ -550,13 +546,13 @@ const setCSSVal = (elm, prop, val) => { try { if (elm) { const { - style + style: elmStyle } = elm; - if (!isUndefined(style[prop])) { - style[prop] = adaptCSSVal(prop, val); + if (!isUndefined(elmStyle[prop])) { + elmStyle[prop] = adaptCSSVal(prop, val); } else { - style.setProperty(prop, val); + elmStyle.setProperty(prop, val); } } } catch (e) {} @@ -717,9 +713,7 @@ const validateRecursive = (options, template, optionsDiff, doWriteErrors, propPa }; }; -const validateOptions = (options, template, optionsDiff, doWriteErrors) => { - return validateRecursive(options, template, optionsDiff || {}, doWriteErrors || false); -}; +const validateOptions = (options, template, optionsDiff, doWriteErrors) => validateRecursive(options, template, optionsDiff || {}, doWriteErrors || false); const transformOptions = optionsWithOptionsTemplate => { const result = { @@ -1224,7 +1218,7 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { const sizeObserver = baseElements[0]; const listenerElement = sizeObserver.firstChild; const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver); - const [updateResizeObserverContentRectCache] = createCache(0, { + const [updateResizeObserverContentRectCache] = createCache({ _initialValue: undefined, _alwaysUpdateValues: true, _equal: (currVal, newVal) => !(!currVal || !domRectHasDimensions(currVal) && domRectHasDimensions(newVal)) @@ -1238,7 +1232,7 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { let doDirectionScroll = true; if (isResizeObserverCall) { - const [currRContentRect,, prevContentRect] = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect); + const [currRContentRect,, prevContentRect] = updateResizeObserverContentRectCache(sizeChangedContext.pop().contentRect); const hasDimensions = domRectHasDimensions(currRContentRect); const hadDimensions = domRectHasDimensions(prevContentRect); skip = !prevContentRect || !hasDimensions; @@ -1332,9 +1326,9 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { } if (observeDirectionChange) { - directionIsRTLCache = createCache(getIsDirectionRTL, { + directionIsRTLCache = createCache({ _initialValue: !getIsDirectionRTL() - }); + }, getIsDirectionRTL); const [updateDirectionIsRTLCache] = directionIsRTLCache; push(offListeners, on(sizeObserver, scrollEventName, event => { const directionIsRTLCacheValues = updateDirectionIsRTLCache(); @@ -1379,16 +1373,18 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { }; }; +const isHeightIntrinsic = ioEntryOrSize => ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0; + const createTrinsicObserver = (target, onTrinsicChangedCallback) => { const trinsicObserver = createDiv(classNameTrinsicObserver); const offListeners = []; - const [updateHeightIntrinsicCache, getCurrentHeightIntrinsicCache] = createCache(ioEntryOrSize => ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0, { + const [updateHeightIntrinsicCache, getCurrentHeightIntrinsicCache] = createCache({ _initialValue: false }); const triggerOnTrinsicChangedCallback = updateValue => { if (updateValue) { - const heightIntrinsic = updateHeightIntrinsicCache(0, updateValue); + const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue)); const [, heightIntrinsicChanged] = heightIntrinsic; if (heightIntrinsicChanged) { @@ -1819,10 +1815,10 @@ const createPaddingLifecycle = lifecycleHub => { _padding, _viewport } = _structureSetup._targetObj; - const [updatePaddingCache, currentPaddingCache] = createCache(topRightBottomLeft.bind(0, _host, 'padding'), { + const [updatePaddingCache, currentPaddingCache] = createCache({ _equal: equalTRBL, _initialValue: topRightBottomLeft() - }); + }, topRightBottomLeft.bind(0, _host, 'padding', '')); return (updateHints, checkOption, force) => { let [padding, paddingChanged] = currentPaddingCache(force); const { @@ -1927,6 +1923,11 @@ const setAxisOverflowStyle = (horizontal, overflowAmount, behavior, styleObj) => }; }; +const getOverflowAmount = (viewportScrollSize, viewportClientSize, viewportSizeFraction) => ({ + w: max(0, round(max(0, viewportScrollSize.w - viewportClientSize.w) - (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.w)))), + h: max(0, round(max(0, viewportScrollSize.h - viewportClientSize.h) - (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.h)))) +}); + const createOverflowLifecycle = lifecycleHub => { const { _structureSetup, @@ -1939,16 +1940,9 @@ const createOverflowLifecycle = lifecycleHub => { _viewport, _viewportArrange } = _structureSetup._targetObj; - const [updateViewportSizeFraction, getCurrentViewportSizeFraction] = createCache(sizeFraction.bind(0, _viewport), whCacheOptions); - const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache(scrollSize.bind(0, _viewport), whCacheOptions); - const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache(({ - _viewportScrollSize, - _viewportClientSize, - _viewportSizeFraction - }) => ({ - w: max(0, round(max(0, _viewportScrollSize.w - _viewportClientSize.w) - (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.w)))), - h: max(0, round(max(0, _viewportScrollSize.h - _viewportClientSize.h) - (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.h)))) - }), whCacheOptions); + const [updateViewportSizeFraction, getCurrentViewportSizeFraction] = createCache(whCacheOptions, sizeFraction.bind(0, _viewport)); + const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache(whCacheOptions, scrollSize.bind(0, _viewport)); + const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache(whCacheOptions); const fixFlexboxGlue = (viewportOverflowState, heightIntrinsic) => { style(_viewport, { @@ -1998,9 +1992,13 @@ const createOverflowLifecycle = lifecycleHub => { x: styleObj.overflowX === 'scroll', y: styleObj.overflowY === 'scroll' }; + const nonScrollbarStylingHideOffset = { + x: overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x, + y: overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y + }; const scrollbarsHideOffset = { - x: scroll.x && !_nativeScrollbarStyling ? overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x : 0, - y: scroll.y && !_nativeScrollbarStyling ? overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y : 0 + x: scroll.x && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.x : 0, + y: scroll.y && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.y : 0 }; return { _overflowScroll: scroll, @@ -2223,30 +2221,26 @@ const createOverflowLifecycle = lifecycleHub => { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(showNativeOverlaidScrollbars, directionIsRTL, preMeasureViewportOverflowState); - const [_viewportSizeFraction2, viewportSizeFractionCahnged] = viewportSizeFractionCache = updateViewportSizeFraction(force); - const [_viewportScrollSize2, _viewportScrollSizeChanged] = viewportScrollSizeCache = updateViewportScrollSizeCache(force); + const [_viewportSizeFraction, viewportSizeFractionCahnged] = viewportSizeFractionCache = updateViewportSizeFraction(force); + const [_viewportScrollSize, _viewportScrollSizeChanged] = viewportScrollSizeCache = updateViewportScrollSizeCache(force); const viewportContentSize = clientSize(_viewport); - let arrangedViewportScrollSize = _viewportScrollSize2; + let arrangedViewportScrollSize = _viewportScrollSize; let arrangedViewportClientSize = viewportContentSize; _redoViewportArrange(); - if ((_viewportScrollSizeChanged || viewportSizeFractionCahnged || showNativeOverlaidScrollbarsChanged) && undoViewportArrangeOverflowState && !showNativeOverlaidScrollbars && arrangeViewport(undoViewportArrangeOverflowState, _viewportScrollSize2, _viewportSizeFraction2, directionIsRTL)) { + if ((_viewportScrollSizeChanged || viewportSizeFractionCahnged || showNativeOverlaidScrollbarsChanged) && undoViewportArrangeOverflowState && !showNativeOverlaidScrollbars && arrangeViewport(undoViewportArrangeOverflowState, _viewportScrollSize, _viewportSizeFraction, directionIsRTL)) { arrangedViewportClientSize = clientSize(_viewport); arrangedViewportScrollSize = scrollSize(_viewport); } - overflowAmuntCache = updateOverflowAmountCache(force, { - _viewportSizeFraction: _viewportSizeFraction2, - _viewportScrollSize: { - w: max(_viewportScrollSize2.w, arrangedViewportScrollSize.w), - h: max(_viewportScrollSize2.h, arrangedViewportScrollSize.h) - }, - _viewportClientSize: { - w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - _viewportScrollSize2.w), - h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - _viewportScrollSize2.h) - } - }); + overflowAmuntCache = updateOverflowAmountCache(getOverflowAmount({ + w: max(_viewportScrollSize.w, arrangedViewportScrollSize.w), + h: max(_viewportScrollSize.h, arrangedViewportScrollSize.h) + }, { + w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - _viewportScrollSize.w), + h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - _viewportScrollSize.h) + }, _viewportSizeFraction), force); } const [viewportSizeFraction, viewportSizeFractionChanged] = viewportSizeFractionCache; @@ -2400,9 +2394,9 @@ const createLifecycleHub = (options, structureSetup, scrollbarsSetup) => { _destroy: destroyObservers } = lifecycleHubOservers(instance, updateLifecycles); - const update = (changedOptions, force) => updateLifecycles(null, changedOptions, force); + const update = (changedOptions, force) => updateLifecycles({}, changedOptions, force); - const envUpdateListener = update.bind(null, null, true); + const envUpdateListener = update.bind(0, {}, true); addEnvironmentListener(envUpdateListener); console.log(getEnvironment()); return { @@ -2451,7 +2445,7 @@ const OverlayScrollbars = (target, options, extensions) => { state: () => lifecycleHub._state(), update(force) { - lifecycleHub._update(null, force); + lifecycleHub._update({}, force); }, destroy: () => lifecycleHub._destroy() diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index d99b4d2..f8d2006 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/setups/scrollbarsSetup.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHubObservers.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export type CacheValues = [\r\n T, // value\r\n boolean, // changed\r\n T | undefined // previous\r\n];\r\n\r\nexport type Cache = [\r\n CacheUpdate,\r\n (force?: boolean) => CacheValues // getCurrent\r\n];\r\n\r\nexport interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: T;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\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 Ctx\r\n ? (context?: Ctx, current?: Value, previous?: Value) => Value\r\n : Ctx extends Value\r\n ? ((context: Ctx, current?: Value, previous?: Value) => Value) | 0\r\n : (context: Ctx, current?: Value, previous?: Value) => Value;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (\r\n update: UpdateCachePropFunction,\r\n options: CacheOptions\r\n): Cache => {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options || {};\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: Ctx) => {\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 [_value, changed, _previous];\r\n }) as CacheUpdate;\r\n\r\n return [\r\n cacheUpdate,\r\n (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\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: any[]) => any {\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 it, or and empty string 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 => {\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 return !(result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined));\r\n });\r\n\r\n return (cssCache[name] = 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 without it, or an empty string 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 => {\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 return (cssCache[name] = 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, isFunction } from 'support/utils/types';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst setT = window.setTimeout;\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\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 options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (curr: Parameters): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n const args: Parameters = arguments as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout! > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n if (!mergeParamsResult) {\r\n invokeFunctionToDebounce(prevArguments || args);\r\n }\r\n\r\n clearTimeouts(timeoutId);\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\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 the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\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 ? Object.assign.bind() : 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 }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString, isNumber, isBoolean } 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 isPrimitiveArr = isArray(optionsValue) && !optionsValue.some((val) => !isNumber(val) && !isString(val) && !isBoolean(val));\r\n const doStringifyComparison = isPrimitiveArr || 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\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\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 attributes: string[] | null;\r\n debounce: number | [number, number] | null;\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 callbacks: {\r\n onUpdated: (() => any) | null;\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 arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\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']], arrayNullValues], // array of tuples || null\r\n attributes: [null, arrayNullValues],\r\n debounce: [\r\n [0, 33],\r\n [oTypes.number, oTypes.array, oTypes.null],\r\n ], // number || number array || null\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 callbacks: {\r\n onUpdated: [null, [oTypes.function, oTypes.null]],\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 cssProperty,\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\nimport { OSTargetElement } from 'typings';\r\n\r\ntype StructureInitializationElementFn = ((target: OSTargetElement) => HTMLElement | T) | T;\r\n\r\ntype ScrollbarsInitializationElementFn = ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T) | T;\r\n\r\n/**\r\n * A Static element is an element which MUST be generated.\r\n * If null (or the returned result is null), the initialization function is generatig the element, otherwise\r\n * the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationStaticElement = StructureInitializationElementFn;\r\n\r\n/**\r\n * A Dynamic element is an element which CAN be generated.\r\n * If null (or the returned result is null), then the default behavior is used.\r\n * If boolean (or the returned result is boolean), the generation of the element is forced (or not).\r\n * If the function returns and element, the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationDynamicElement = StructureInitializationElementFn;\r\n\r\nexport interface StructureInitializationStrategy {\r\n _host: StructureInitializationStaticElement;\r\n _viewport: StructureInitializationStaticElement;\r\n _padding: StructureInitializationDynamicElement;\r\n _content: StructureInitializationDynamicElement;\r\n}\r\n\r\nexport interface ScrollbarsInitializationStrategy {\r\n _scrollbarsSlot: ScrollbarsInitializationElementFn;\r\n}\r\n\r\nexport interface InitializationStrategy extends StructureInitializationStrategy, ScrollbarsInitializationStrategy {}\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, cssProperty('scrollbar-width')) === 'none' ||\r\n 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\n// init function decides for all values\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _host: null,\r\n _viewport: null,\r\n _padding: null,\r\n _content: null,\r\n _scrollbarsSlot: null,\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 = getNativeScrollbarStyling(envElm);\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 indexOf,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n isFunction,\r\n keys,\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 {\r\n getEnvironment,\r\n StructureInitializationStaticElement,\r\n StructureInitializationDynamicElement,\r\n StructureInitializationStrategy,\r\n} from 'environment';\r\nimport { OSTarget, OSTargetElement, StructureInitialization } 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 _targetIsElm: boolean;\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;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\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\nlet contentArrangeCounter = 0;\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\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n /* istanbul ignore next */\r\n const create = !_cssCustomProperties && !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst staticCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | undefined,\r\n strategy: StructureInitializationStaticElement,\r\n elementClass: string\r\n): HTMLElement => {\r\n const result = initializationValue ? initializationValue : isFunction(strategy) ? strategy(target) : (strategy as null);\r\n return result ? result : createDiv(elementClass);\r\n};\r\n\r\nconst dynamicCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | boolean | undefined,\r\n strategy: StructureInitializationDynamicElement,\r\n elementClass: string,\r\n defaultValue: boolean\r\n): HTMLElement | false => {\r\n const takeInitializationValue = isBoolean(initializationValue) || initializationValue;\r\n const result = takeInitializationValue ? (initializationValue as boolean | HTMLElement) : isFunction(strategy) ? strategy(target) : strategy;\r\n\r\n if (result === null) {\r\n return defaultValue ? createDiv(elementClass) : false;\r\n }\r\n\r\n return result === true ? createDiv(elementClass) : result;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | StructureInitialization): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy() as StructureInitializationStrategy;\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm ? (target as OSTargetElement) : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument: HTMLDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const evaluatedTargetObj: PreparedOSTargetObject = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticCreationFromStrategy(targetElement, targetStructureInitialization.host, hostInitializationStrategy, classNameHost)\r\n : (targetElement as HTMLElement),\r\n _viewport: staticCreationFromStrategy(targetElement, targetStructureInitialization.viewport, viewportInitializationStrategy, classNameViewport),\r\n _padding: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.padding,\r\n paddingInitializationStrategy,\r\n classNamePadding,\r\n !_nativeScrollbarStyling // default value for padding\r\n ),\r\n _content: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.content,\r\n contentInitializationStrategy,\r\n classNameContent,\r\n false // default value for content\r\n ),\r\n _viewportArrange: createUniqueViewportArrangeElement(),\r\n };\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 _targetIsElm: targetIsElm,\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) => (elm ? indexOf(generatedElements, elm) > -1 : null);\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents([_content, _viewport, _padding, _host, _target].find((elm) => elementIsGenerated(elm) === false));\r\n const contentSlot = _content || _viewport;\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 appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\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 push(destroyFns, () => {\r\n if (targetIsElm) {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n } else {\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\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 if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return {\r\n _targetObj: evaluatedTargetObj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { appendChildren, createDiv, removeElements, isFunction } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment, ScrollbarsInitializationStrategy } from 'environment';\r\nimport { OSTarget, ScrollbarsInitialization } from 'typings';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetup {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n _destroy: () => void;\r\n}\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetup = (target: OSTarget | ScrollbarsInitialization, structureSetup: StructureSetup): ScrollbarsSetup => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } = _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _targetObj, _targetCtx } = structureSetup;\r\n const { _target, _host, _viewport } = _targetObj;\r\n const initializationScrollbarSlot = !_targetCtx._targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot)\r\n ? initializationScrollbarSlot(_target, _host, _viewport)\r\n : initializationScrollbarSlot;\r\n const evaluatedScrollbarSlot =\r\n initializationScrollbarSlotResult ||\r\n (isFunction(environmentScrollbarSlot) ? environmentScrollbarSlot(_target, _host, _viewport) : environmentScrollbarSlot) ||\r\n _host;\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n _destroy() {\r\n removeElements([horizontalScrollbar, verticalScrollbar]);\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 isObject,\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 interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\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\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (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: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache<\r\n DOMRectReadOnly | undefined,\r\n DOMRectReadOnly\r\n >(0, {\r\n _initialValue: undefined,\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 = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = 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 (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n 0,\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : 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, () => {\r\n resizeObserverInstance.disconnect();\r\n });\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(observerElementChildrenRoot);\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 = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\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(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\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(getIsDirectionRTL, {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n });\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\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[1](force) // get current cache values\r\n : [false, false, false],\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 [updateHeightIntrinsicCache, 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 const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, updateValue);\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\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 triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\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 { each, noop, debounce, indexOf, isString, MutationObserverConstructor, isEmptyArray, on, attr, is, find, push } from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: 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\ntype ContentChangeArrayItem = [string?, string?] | 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\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 interface DOMObserver {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\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, callback: (...args: any) => any, eventContentChange?: DOMObserverEventContentChange) => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const _destroy = () => {\r\n destroyed = true;\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.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\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.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 entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n _updateElements();\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\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 { _destroy: destroyEventContentChange, _updateElements: updateEventContentChangeElements } = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\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)(false);\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 _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import {\r\n CacheValues,\r\n diffClass,\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecycles/lifecycleHub';\r\n\r\n// const hostSelector = `.${classNameHost}`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\n\r\n// const viewportSelector = `.${classNameViewport}`;\r\n// const contentSelector = `.${classNameContent}`;\r\nconst ignorePrefix = 'os-';\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nconst ignoreTargetChange = (\r\n target: Node,\r\n attrName: string,\r\n oldValue: string | null,\r\n newValue: string | null\r\n) => {\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\n\r\nexport const lifecycleHubOservers = (\r\n instance: LifecycleHub,\r\n updateLifecycles: (updateHints?: Partial | null) => unknown\r\n) => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const { _structureSetup } = instance;\r\n const { _targetObj, _targetCtx } = _structureSetup;\r\n const { _host, _viewport, _content } = _targetObj;\r\n const { _isTextarea } = _targetCtx;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(\r\n updateLifecycles as (updateHints: Partial) => any,\r\n {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const {\r\n _sizeChanged: prevSizeChanged,\r\n _hostMutation: prevHostMutation,\r\n _contentMutation: prevContentMutation,\r\n } = prev[0];\r\n const {\r\n _sizeChanged: currSizeChanged,\r\n _hostMutation: currvHostMutation,\r\n _contentMutation: currContentMutation,\r\n } = curr[0];\r\n const merged: [Partial] = [\r\n {\r\n _sizeChanged: prevSizeChanged || currSizeChanged,\r\n _hostMutation: prevHostMutation || currvHostMutation,\r\n _contentMutation: prevContentMutation || currContentMutation,\r\n },\r\n ];\r\n\r\n return merged;\r\n },\r\n }\r\n );\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? updateLifecycles\r\n : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _sizeChanged,\r\n _directionIsRTL: _directionIsRTLCache,\r\n });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? updateLifecycles\r\n : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const trinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n\r\n const updateOptions = (checkOption: LifecycleCheckOption) => {\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver._update();\r\n contentMutationObserver._destroy();\r\n }\r\n contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n // _nestedTargetSelector: hostSelector,\r\n /*\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 */\r\n });\r\n }\r\n\r\n if (debounceChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n };\r\n\r\n updateViewportAttrsFromHost();\r\n\r\n return {\r\n _trinsicObserver: trinsicObserver,\r\n _sizeObserver: sizeObserver,\r\n _updateObserverOptions: updateOptions,\r\n _destroy() {\r\n contentMutationObserver && contentMutationObserver._destroy();\r\n trinsicObserver && trinsicObserver._destroy();\r\n sizeObserver._destroy();\r\n hostMutationObserver._destroy();\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 [heightIntrinsic, 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, TRBL } 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 [updatePaddingCache, currentPaddingCache] = createCache(\r\n topRightBottomLeft.bind(0, _host, 'padding'),\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n }\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL, _contentMutation } = updateHints;\r\n const [directionIsRTL, directionChanged] = _directionIsRTL;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute 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 marginRight: paddingRelative && !directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: paddingRelative ? (directionIsRTL ? -padding!.r : 'auto') : 0,\r\n left: paddingRelative ? (directionIsRTL ? 'auto' : -padding!.l) : 0,\r\n width: 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 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 OverflowAmountCacheContext {\r\n _viewportScrollSize: WH;\r\n _viewportClientSize: WH;\r\n _viewportSizeFraction: 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 { max, abs, round } = Math;\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst sizeFraction = (elm: HTMLElement): WH => {\r\n const viewportOffsetSize = offsetSize(elm);\r\n const viewportRect = getBoundingClientRect(elm);\r\n return {\r\n w: viewportRect.width - viewportOffsetSize.w,\r\n h: viewportRect.height - viewportOffsetSize.h,\r\n };\r\n};\r\nconst fractionalPixelRatioTollerance = () => (window.devicePixelRatio % 1 === 0 ? 0 : 1);\r\nconst setAxisOverflowStyle = (\r\n horizontal: boolean,\r\n overflowAmount: number,\r\n behavior: OverflowBehavior,\r\n styleObj: StyleObject\r\n) => {\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 const hasOverflow = overflowAmount > 0;\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && hasOverflow) {\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\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 {\r\n _structureSetup,\r\n _doViewportArrange,\r\n _getLifecycleCommunication,\r\n _setLifecycleCommunication,\r\n } = lifecycleHub;\r\n\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n\r\n const [updateViewportSizeFraction, getCurrentViewportSizeFraction] = createCache>(\r\n sizeFraction.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(scrollSize.bind(0, _viewport), whCacheOptions);\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache<\r\n WH,\r\n OverflowAmountCacheContext\r\n >(\r\n ({ _viewportScrollSize, _viewportClientSize, _viewportSizeFraction }) => ({\r\n w: max(\r\n 0,\r\n round(\r\n max(0, _viewportScrollSize.w - _viewportClientSize.w) -\r\n (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.w))\r\n )\r\n ),\r\n h: max(\r\n 0,\r\n round(\r\n max(0, _viewportScrollSize.h - _viewportClientSize.h) -\r\n (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.h))\r\n )\r\n ),\r\n }),\r\n whCacheOptions\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 = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const {\r\n _absolute: paddingAbsolute,\r\n _padding: padding,\r\n } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostSizeFraction = sizeFraction(_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 isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const fractionalClientHeight =\r\n hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n fractionalClientHeight +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n 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 = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow\r\n ? style(_viewport, ['overflowX', 'overflowY'])\r\n : 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:\r\n scroll.x && !_nativeScrollbarStyling\r\n ? overlaidX\r\n ? arrangeHideOffset\r\n : _nativeScrollbarSize.x\r\n : 0,\r\n y:\r\n scroll.y && !_nativeScrollbarStyling\r\n ? overlaidY\r\n ? arrangeHideOffset\r\n : _nativeScrollbarSize.y\r\n : 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 { _visible: xVisible, _behavior: xVisibleBehavior } = setAxisOverflowStyle(\r\n true,\r\n overflowAmount!.w,\r\n overflow.x,\r\n viewportStyleObj\r\n );\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setAxisOverflowStyle(\r\n false,\r\n overflowAmount!.h,\r\n overflow.y,\r\n viewportStyleObj\r\n );\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 viewportScrollSize 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 = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n viewportSizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\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\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth =\r\n viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);\r\n const fractionalContenHeight =\r\n viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\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(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\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<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': 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\r\n ? 'paddingLeft'\r\n : '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.width = `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] =\r\n 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 =\r\n 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('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(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n _doViewportArrange,\r\n prevStyle\r\n );\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 {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const [heightIntrinsic, heightIntrinsicChanged] = _heightIntrinsic;\r\n const [directionIsRTL, directionChanged] = _directionIsRTL;\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] = checkOption<\r\n boolean\r\n >('nativeScrollbarsOverlaid.show');\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n heightIntrinsicChanged);\r\n\r\n let viewportSizeFractionCache: CacheValues> = getCurrentViewportSizeFraction(force);\r\n let viewportScrollSizeCache: CacheValues> = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(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 (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged\r\n ) {\r\n const {\r\n _redoViewportArrange,\r\n _viewportOverflowState: undoViewportArrangeOverflowState,\r\n } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n preMeasureViewportOverflowState\r\n );\r\n const [\r\n viewportSizeFraction,\r\n viewportSizeFractionCahnged,\r\n ] = (viewportSizeFractionCache = updateViewportSizeFraction(force));\r\n const [\r\n viewportScrollSize,\r\n viewportScrollSizeChanged,\r\n ] = (viewportScrollSizeCache = updateViewportScrollSizeCache(force));\r\n const viewportContentSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize!;\r\n let arrangedViewportClientSize = viewportContentSize;\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 (viewportScrollSizeChanged ||\r\n viewportSizeFractionCahnged ||\r\n showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize!,\r\n viewportSizeFraction!,\r\n directionIsRTL!\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _viewportSizeFraction: viewportSizeFraction!,\r\n _viewportScrollSize: {\r\n w: max(viewportScrollSize!.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize!.h, arrangedViewportScrollSize.h),\r\n },\r\n _viewportClientSize: {\r\n w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize!.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const [viewportSizeFraction, viewportSizeFractionChanged] = viewportSizeFractionCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [overflow, overflowChanged] = checkOption('overflow');\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n viewportSizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n overflowAmount!,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize!,\r\n viewportSizeFraction!,\r\n directionIsRTL!\r\n );\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: 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\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 XY,\r\n WH,\r\n TRBL,\r\n CacheValues,\r\n PartialOptions,\r\n each,\r\n hasOwnProperty,\r\n isNumber,\r\n scrollLeft,\r\n scrollTop,\r\n assignDeep,\r\n} from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { lifecycleHubOservers } from 'lifecycles/lifecycleHubObservers';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { StyleObject } from 'typings';\r\nimport { ScrollbarsSetup } from 'setups/scrollbarsSetup';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\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 type LifecycleOptionInfo = [T, boolean];\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 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\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nconst booleanCacheValuesFallback: CacheValues = [false, false, false];\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 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 = (\r\n options: OSOptions,\r\n structureSetup: StructureSetup,\r\n scrollbarsSetup: ScrollbarsSetup\r\n): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _viewport } = 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 =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\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 lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n const lifecycles: Lifecycle[] = [\r\n createTrinsicLifecycle(instance),\r\n createPaddingLifecycle(instance),\r\n createOverflowLifecycle(instance),\r\n ];\r\n\r\n const updateLifecycles = (\r\n updateHints?: Partial | null,\r\n changedOptions?: Partial | null,\r\n force?: boolean\r\n ) => {\r\n let {\r\n // eslint-disable-next-line prefer-const\r\n _directionIsRTL,\r\n // eslint-disable-next-line prefer-const\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\r\n const finalDirectionIsRTL =\r\n _directionIsRTL ||\r\n (_sizeObserver\r\n ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL\r\n : booleanCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic ||\r\n (_trinsicObserver\r\n ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic\r\n : booleanCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => [\r\n getPropByPath(options, path),\r\n 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 // place before updating lifecycles because of possible flushing of debounce\r\n if (_updateObserverOptions) {\r\n _updateObserverOptions(checkOption);\r\n }\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 if (options.callbacks.onUpdated) {\r\n options.callbacks.onUpdated();\r\n }\r\n };\r\n const {\r\n _sizeObserver,\r\n _trinsicObserver,\r\n _updateObserverOptions,\r\n _destroy: destroyObservers,\r\n } = lifecycleHubOservers(instance, updateLifecycles);\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) =>\r\n updateLifecycles(null, changedOptions, force);\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 destroyObservers();\r\n removeEnvironmentListener(envUpdateListener);\r\n\r\n structureSetup._destroy();\r\n scrollbarsSetup._destroy();\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSInitializationObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createScrollbarsSetup, ScrollbarsSetup } from 'setups/scrollbarsSetup';\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 (\r\n target: OSTarget | OSInitializationObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n ): 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 destroy(): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSInitializationObject,\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)\r\n ._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const scrollbarsSetup: ScrollbarsSetup = createScrollbarsSetup(target, structureSetup);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup, scrollbarsSetup);\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(\r\n newOptions,\r\n optionsTemplate,\r\n currentOptions,\r\n true\r\n );\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 destroy: () => lifecycleHub._destroy(),\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","update","options","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","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","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","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","setT","setTimeout","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","invokeFunctionToDebounce","args","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","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","exports","__esModule","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","isPrimitiveArr","some","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","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","numberAllowedValues","oTypes","number","arrayNullValues","null","stringArrayNullAllowedValues","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","attributes","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","callbacks","onUpdated","function","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","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","_host","_viewport","_padding","_content","_scrollbarsSlot","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","contentArrangeCounter","unwrap","createUniqueViewportArrangeElement","create","staticCreationFromStrategy","initializationValue","strategy","elementClass","dynamicCreationFromStrategy","defaultValue","takeInitializationValue","createStructureSetup","hostInitializationStrategy","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","evaluatedTargetObj","_target","host","viewport","padding","content","_viewportArrange","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","_targetObj","_targetCtx","_destroy","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetup","structureSetup","environmentScrollbarSlot","initializationScrollbarSlot","scrollbarsSlot","initializationScrollbarSlotResult","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","height","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_sizeChanged","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","directionIsRTL","directionIsRTLChanged","_getCurrentCacheValues","_directionIsRTL","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","triggerOnTrinsicChangedCallback","updateValue","heightIntrinsic","heightIntrinsicChanged","intersectionObserverInstance","entries","root","onSizeChanged","newSize","_heightIntrinsic","createEventContentChange","eventContentChange","map","destroyed","_updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","set","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","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","attributeOldValue","attributeFilter","subtree","childList","characterData","_update","takeRecords","ignorePrefix","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","newValue","diff","addedOrRemovedClass","lifecycleHubOservers","instance","updateLifecycles","debounceTimeout","debounceMaxDelay","contentMutationObserver","_structureSetup","contentMutationObserverAttr","updateLifecyclesWithDebouncedAdaptiveUpdateHints","prev","prevSizeChanged","_hostMutation","prevHostMutation","_contentMutation","prevContentMutation","currSizeChanged","currvHostMutation","currContentMutation","merged","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","updateFn","onContentMutation","contentChangedTroughEvent","onHostMutation","hostMutationObserver","updateOptions","checkOption","elementEventsChanged","attributesChanged","debounceValue","debounceChanged","updateContentMutationObserver","timeout","maxWait","_trinsicObserver","_sizeObserver","_updateObserverOptions","createTrinsicLifecycle","lifecycleHub","updateHints","display","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","paddingChanged","directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","max","overlaidScrollbarsHideOffset","whCacheOptions","sizeFraction","viewportOffsetSize","viewportRect","fractionalPixelRatioTollerance","setAxisOverflowStyle","horizontal","overflowAmount","behavior","styleObj","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","hasOverflow","_visible","_behavior","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateViewportSizeFraction","getCurrentViewportSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","_viewportScrollSize","_viewportClientSize","_viewportSizeFraction","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostSizeFraction","hostClientSize","isContentBox","fractionalClientHeight","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","viewportScrollSize","viewportSizeFraction","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","viewportSizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","viewportSizeFractionCahnged","viewportScrollSizeChanged","viewportContentSize","arrangedViewportScrollSize","arrangedViewportClientSize","viewportSizeFractionChanged","overflowAmountChanged","overflowChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","getPropByPath","path","o","booleanCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","scrollbarsSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","newLifecycleCommunication","lifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","destroyObservers","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state","destroy"],"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/setups/scrollbarsSetup.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHubObservers.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [\r\n T, // value\r\n boolean, // changed\r\n T? // previous\r\n];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\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 [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\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 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\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: any[]) => any {\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)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : 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\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : 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\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString, isArray } 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(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): 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: T[], item: T, fromIndex?: number): number =>\r\n isArray(arr) ? arr.indexOf(item, fromIndex) : -1;\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: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : 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: T[] = [];\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: any[] | null | undefined): boolean =>\r\n !!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 =>\r\n 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(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\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): T & U & V & W & X;\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): 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(\r\n elm: HTMLElement | null,\r\n attrName: string,\r\n value?: string\r\n): 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 =>\r\n 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 = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): 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 = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | null | undefined,\r\n insertedElms: NodeCollection\r\n): 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 = (\r\n node: Node | null | undefined,\r\n insertedNodes: NodeCollection\r\n): 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 = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\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 it, or and empty string 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 => {\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\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = 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 without it, or an empty string 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 => {\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 // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = 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(\r\n 'IntersectionObserver'\r\n);\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 = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\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 =>\r\n !!(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 =>\r\n 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 = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): 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 =>\r\n (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, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\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 options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\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 // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 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 =>\r\n !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\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.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(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [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 the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): 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 ? Object.assign.bind() : 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 }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport {\r\n type,\r\n isArray,\r\n isUndefined,\r\n isPlainObject,\r\n isString,\r\n isNumber,\r\n isBoolean,\r\n} 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\n OptionsTemplateTypeMap,\r\n T\r\n>;\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 = [\r\n 'boolean',\r\n 'number',\r\n 'string',\r\n 'array',\r\n 'object',\r\n 'function',\r\n 'null',\r\n].reduce((result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n}, {} as OptionsTemplateTypesDictionary);\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 =\r\n 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(\r\n optionsValue,\r\n templateValue as T,\r\n optionsDiffValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\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 isPrimitiveArr =\r\n isArray(optionsValue) &&\r\n !optionsValue.some((val) => !isNumber(val) && !isString(val) && !isBoolean(val));\r\n const doStringifyComparison = isPrimitiveArr || isPlainObject(optionsValue);\r\n if (\r\n doStringifyComparison\r\n ? stringify(optionsValue) !== stringify(optionsDiffValue)\r\n : optionsValue !== optionsDiffValue\r\n ) {\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 }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\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 validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\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 = [\r\n T,\r\n OptionsTemplateValue\r\n];\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 = (\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): 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 =\r\n 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\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\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 attributes: string[] | null;\r\n debounce: number | [number, number] | null;\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 callbacks: {\r\n onUpdated: (() => any) | null;\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 arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\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']], arrayNullValues], // array of tuples || null\r\n attributes: [null, arrayNullValues],\r\n debounce: [\r\n [0, 33],\r\n [oTypes.number, oTypes.array, oTypes.null],\r\n ], // number || number array || null\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 callbacks: {\r\n onUpdated: [null, [oTypes.function, oTypes.null]],\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 cssProperty,\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\nimport { OSTargetElement } from 'typings';\r\n\r\ntype StructureInitializationElementFn = ((target: OSTargetElement) => HTMLElement | T) | T;\r\n\r\ntype ScrollbarsInitializationElementFn =\r\n | ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T)\r\n | T;\r\n\r\n/**\r\n * A Static element is an element which MUST be generated.\r\n * If null (or the returned result is null), the initialization function is generatig the element, otherwise\r\n * the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationStaticElement = StructureInitializationElementFn;\r\n\r\n/**\r\n * A Dynamic element is an element which CAN be generated.\r\n * If null (or the returned result is null), then the default behavior is used.\r\n * If boolean (or the returned result is boolean), the generation of the element is forced (or not).\r\n * If the function returns and element, the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationDynamicElement = StructureInitializationElementFn<\r\n boolean | null\r\n>;\r\n\r\nexport interface StructureInitializationStrategy {\r\n _host: StructureInitializationStaticElement;\r\n _viewport: StructureInitializationStaticElement;\r\n _padding: StructureInitializationDynamicElement;\r\n _content: StructureInitializationDynamicElement;\r\n}\r\n\r\nexport interface ScrollbarsInitializationStrategy {\r\n _scrollbarsSlot: ScrollbarsInitializationElementFn;\r\n}\r\n\r\nexport interface InitializationStrategy\r\n extends StructureInitializationStrategy,\r\n ScrollbarsInitializationStrategy {}\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, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { 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\n// init function decides for all values\r\nconst getDefaultInitializationStrategy = (\r\n nativeScrollbarStyling: boolean\r\n): InitializationStrategy => ({\r\n _host: null,\r\n _viewport: null,\r\n _padding: null,\r\n _content: null,\r\n _scrollbarsSlot: null,\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 = getNativeScrollbarStyling(envElm);\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(\r\n body,\r\n envElm\r\n ));\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 indexOf,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n isFunction,\r\n keys,\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 {\r\n getEnvironment,\r\n StructureInitializationStaticElement,\r\n StructureInitializationDynamicElement,\r\n StructureInitializationStrategy,\r\n} from 'environment';\r\nimport { OSTarget, OSTargetElement, StructureInitialization } 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 _targetIsElm: boolean;\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;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\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\nlet contentArrangeCounter = 0;\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\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n /* istanbul ignore next */\r\n const create = !_cssCustomProperties && !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst staticCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | undefined,\r\n strategy: StructureInitializationStaticElement,\r\n elementClass: string\r\n): HTMLElement => {\r\n const result = initializationValue ? initializationValue : isFunction(strategy) ? strategy(target) : (strategy as null);\r\n return result ? result : createDiv(elementClass);\r\n};\r\n\r\nconst dynamicCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | boolean | undefined,\r\n strategy: StructureInitializationDynamicElement,\r\n elementClass: string,\r\n defaultValue: boolean\r\n): HTMLElement | false => {\r\n const takeInitializationValue = isBoolean(initializationValue) || initializationValue;\r\n const result = takeInitializationValue ? (initializationValue as boolean | HTMLElement) : isFunction(strategy) ? strategy(target) : strategy;\r\n\r\n if (result === null) {\r\n return defaultValue ? createDiv(elementClass) : false;\r\n }\r\n\r\n return result === true ? createDiv(elementClass) : result;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | StructureInitialization): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy() as StructureInitializationStrategy;\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm ? (target as OSTargetElement) : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument: HTMLDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const evaluatedTargetObj: PreparedOSTargetObject = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticCreationFromStrategy(targetElement, targetStructureInitialization.host, hostInitializationStrategy, classNameHost)\r\n : (targetElement as HTMLElement),\r\n _viewport: staticCreationFromStrategy(targetElement, targetStructureInitialization.viewport, viewportInitializationStrategy, classNameViewport),\r\n _padding: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.padding,\r\n paddingInitializationStrategy,\r\n classNamePadding,\r\n !_nativeScrollbarStyling // default value for padding\r\n ),\r\n _content: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.content,\r\n contentInitializationStrategy,\r\n classNameContent,\r\n false // default value for content\r\n ),\r\n _viewportArrange: createUniqueViewportArrangeElement(),\r\n };\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 _targetIsElm: targetIsElm,\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) => (elm ? indexOf(generatedElements, elm) > -1 : null);\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents([_content, _viewport, _padding, _host, _target].find((elm) => elementIsGenerated(elm) === false));\r\n const contentSlot = _content || _viewport;\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 appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\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 push(destroyFns, () => {\r\n if (targetIsElm) {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n } else {\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\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 if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return {\r\n _targetObj: evaluatedTargetObj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { appendChildren, createDiv, removeElements, isFunction } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment, ScrollbarsInitializationStrategy } from 'environment';\r\nimport { OSTarget, ScrollbarsInitialization } from 'typings';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetup {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n _destroy: () => void;\r\n}\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetup = (target: OSTarget | ScrollbarsInitialization, structureSetup: StructureSetup): ScrollbarsSetup => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } = _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _targetObj, _targetCtx } = structureSetup;\r\n const { _target, _host, _viewport } = _targetObj;\r\n const initializationScrollbarSlot = !_targetCtx._targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot)\r\n ? initializationScrollbarSlot(_target, _host, _viewport)\r\n : initializationScrollbarSlot;\r\n const evaluatedScrollbarSlot =\r\n initializationScrollbarSlotResult ||\r\n (isFunction(environmentScrollbarSlot) ? environmentScrollbarSlot(_target, _host, _viewport) : environmentScrollbarSlot) ||\r\n _host;\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n _destroy() {\r\n removeElements([horizontalScrollbar, verticalScrollbar]);\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 isObject,\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 interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\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\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (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: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\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 = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = 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 (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : 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, () => {\r\n resizeObserverInstance.disconnect();\r\n });\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(observerElementChildrenRoot);\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 = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\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(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\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(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\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[1](force) // get current cache values\r\n : [false, false, false],\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\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\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 [updateHeightIntrinsicCache, getCurrentHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\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 triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\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 attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: 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\ntype ContentChangeArrayItem = [string?, string?] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\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\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\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport interface DOMObserver {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\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 = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n) => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const _destroy = () => {\r\n destroyed = true;\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.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 entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n _updateElements();\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\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 } = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\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 =\r\n (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 =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n 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 =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n 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)\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)(false);\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 _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import {\r\n CacheValues,\r\n diffClass,\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecycles/lifecycleHub';\r\n\r\n// const hostSelector = `.${classNameHost}`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\n\r\n// const viewportSelector = `.${classNameViewport}`;\r\n// const contentSelector = `.${classNameContent}`;\r\nconst ignorePrefix = 'os-';\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nconst ignoreTargetChange = (\r\n target: Node,\r\n attrName: string,\r\n oldValue: string | null,\r\n newValue: string | null\r\n) => {\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\n\r\nexport const lifecycleHubOservers = (\r\n instance: LifecycleHub,\r\n updateLifecycles: (updateHints: Partial) => unknown\r\n) => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const { _structureSetup } = instance;\r\n const { _targetObj, _targetCtx } = _structureSetup;\r\n const { _host, _viewport, _content } = _targetObj;\r\n const { _isTextarea } = _targetCtx;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(updateLifecycles, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const {\r\n _sizeChanged: prevSizeChanged,\r\n _hostMutation: prevHostMutation,\r\n _contentMutation: prevContentMutation,\r\n } = prev[0];\r\n const {\r\n _sizeChanged: currSizeChanged,\r\n _hostMutation: currvHostMutation,\r\n _contentMutation: currContentMutation,\r\n } = curr[0];\r\n const merged: [Partial] = [\r\n {\r\n _sizeChanged: prevSizeChanged || currSizeChanged,\r\n _hostMutation: prevHostMutation || currvHostMutation,\r\n _contentMutation: prevContentMutation || currContentMutation,\r\n },\r\n ];\r\n\r\n return merged;\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? updateLifecycles\r\n : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _sizeChanged,\r\n _directionIsRTL: _directionIsRTLCache,\r\n });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? updateLifecycles\r\n : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const trinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n\r\n const updateOptions = (checkOption: LifecycleCheckOption) => {\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver._update();\r\n contentMutationObserver._destroy();\r\n }\r\n contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n // _nestedTargetSelector: hostSelector,\r\n /*\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 */\r\n });\r\n }\r\n\r\n if (debounceChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n };\r\n\r\n updateViewportAttrsFromHost();\r\n\r\n return {\r\n _trinsicObserver: trinsicObserver,\r\n _sizeObserver: sizeObserver,\r\n _updateObserverOptions: updateOptions,\r\n _destroy() {\r\n contentMutationObserver && contentMutationObserver._destroy();\r\n trinsicObserver && trinsicObserver._destroy();\r\n sizeObserver._destroy();\r\n hostMutationObserver._destroy();\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 [heightIntrinsic, 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 [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL, _contentMutation } = updateHints;\r\n const [directionIsRTL, directionChanged] = _directionIsRTL;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute 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 marginRight: paddingRelative && !directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: 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 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 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 { max, abs, round } = Math;\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst sizeFraction = (elm: HTMLElement): WH => {\r\n const viewportOffsetSize = offsetSize(elm);\r\n const viewportRect = getBoundingClientRect(elm);\r\n return {\r\n w: viewportRect.width - viewportOffsetSize.w,\r\n h: viewportRect.height - viewportOffsetSize.h,\r\n };\r\n};\r\nconst fractionalPixelRatioTollerance = () => (window.devicePixelRatio % 1 === 0 ? 0 : 1);\r\nconst setAxisOverflowStyle = (\r\n horizontal: boolean,\r\n overflowAmount: number,\r\n behavior: OverflowBehavior,\r\n styleObj: StyleObject\r\n) => {\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 const hasOverflow = overflowAmount > 0;\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && hasOverflow) {\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\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n viewportSizeFraction: WH\r\n) => ({\r\n w: max(\r\n 0,\r\n round(\r\n max(0, viewportScrollSize.w - viewportClientSize.w) -\r\n (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.w))\r\n )\r\n ),\r\n h: max(\r\n 0,\r\n round(\r\n max(0, viewportScrollSize.h - viewportClientSize.h) -\r\n (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.h))\r\n )\r\n ),\r\n});\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 {\r\n _structureSetup,\r\n _doViewportArrange,\r\n _getLifecycleCommunication,\r\n _setLifecycleCommunication,\r\n } = lifecycleHub;\r\n\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n\r\n const [updateViewportSizeFraction, getCurrentViewportSizeFraction] = createCache>(\r\n whCacheOptions,\r\n sizeFraction.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache>(\r\n whCacheOptions\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 = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const {\r\n _absolute: paddingAbsolute,\r\n _padding: padding,\r\n } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostSizeFraction = sizeFraction(_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 isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const fractionalClientHeight =\r\n hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n fractionalClientHeight +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n 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 = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow\r\n ? style(_viewport, ['overflowX', 'overflowY'])\r\n : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj.overflowX === 'scroll',\r\n y: styleObj.overflowY === 'scroll',\r\n };\r\n const nonScrollbarStylingHideOffset = {\r\n x: overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x,\r\n y: overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y,\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.x : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.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 { _visible: xVisible, _behavior: xVisibleBehavior } = setAxisOverflowStyle(\r\n true,\r\n overflowAmount.w,\r\n overflow.x,\r\n viewportStyleObj\r\n );\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setAxisOverflowStyle(\r\n false,\r\n overflowAmount.h,\r\n overflow.y,\r\n viewportStyleObj\r\n );\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 viewportScrollSize 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 = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n viewportSizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\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\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth =\r\n viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);\r\n const fractionalContenHeight =\r\n viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\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(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\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<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': 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\r\n ? 'paddingLeft'\r\n : '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.width = `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] =\r\n 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 =\r\n 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('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(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n _doViewportArrange,\r\n prevStyle\r\n );\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 {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const [heightIntrinsic, heightIntrinsicChanged] = _heightIntrinsic;\r\n const [directionIsRTL, directionChanged] = _directionIsRTL;\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] = checkOption<\r\n boolean\r\n >('nativeScrollbarsOverlaid.show');\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n heightIntrinsicChanged);\r\n\r\n let viewportSizeFractionCache: CacheValues> = getCurrentViewportSizeFraction(force);\r\n let viewportScrollSizeCache: CacheValues> = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(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 (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged\r\n ) {\r\n const {\r\n _redoViewportArrange,\r\n _viewportOverflowState: undoViewportArrangeOverflowState,\r\n } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [\r\n viewportSizeFraction,\r\n viewportSizeFractionCahnged,\r\n ] = (viewportSizeFractionCache = updateViewportSizeFraction(force));\r\n const [\r\n viewportScrollSize,\r\n viewportScrollSizeChanged,\r\n ] = (viewportScrollSizeCache = updateViewportScrollSizeCache(force));\r\n const viewportContentSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportContentSize;\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 (viewportScrollSizeChanged ||\r\n viewportSizeFractionCahnged ||\r\n showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n viewportSizeFraction,\r\n directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize.h),\r\n }, // client size\r\n viewportSizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [viewportSizeFraction, viewportSizeFractionChanged] = viewportSizeFractionCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [overflow, overflowChanged] = checkOption('overflow');\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n viewportSizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n overflowAmount,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n viewportSizeFraction,\r\n directionIsRTL\r\n );\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: 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\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 XY,\r\n WH,\r\n TRBL,\r\n CacheValues,\r\n PartialOptions,\r\n each,\r\n hasOwnProperty,\r\n isNumber,\r\n scrollLeft,\r\n scrollTop,\r\n assignDeep,\r\n} from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { lifecycleHubOservers } from 'lifecycles/lifecycleHubObservers';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { StyleObject } from 'typings';\r\nimport { ScrollbarsSetup } from 'setups/scrollbarsSetup';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\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 type LifecycleOptionInfo = [T, boolean];\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 interface LifecycleHubState {\r\n _overflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions: PartialOptions, 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\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nconst booleanCacheValuesFallback: CacheValues = [false, false, false];\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 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 = (\r\n options: OSOptions,\r\n structureSetup: StructureSetup,\r\n scrollbarsSetup: ScrollbarsSetup\r\n): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _viewport } = 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 =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\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 lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n const lifecycles: Lifecycle[] = [\r\n createTrinsicLifecycle(instance),\r\n createPaddingLifecycle(instance),\r\n createOverflowLifecycle(instance),\r\n ];\r\n\r\n const updateLifecycles = (\r\n updateHints: Partial,\r\n changedOptions?: Partial,\r\n force?: boolean\r\n ) => {\r\n let {\r\n // eslint-disable-next-line prefer-const\r\n _directionIsRTL,\r\n // eslint-disable-next-line prefer-const\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\r\n const finalDirectionIsRTL =\r\n _directionIsRTL ||\r\n (_sizeObserver\r\n ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL\r\n : booleanCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic ||\r\n (_trinsicObserver\r\n ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic\r\n : booleanCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => [\r\n getPropByPath(options, path),\r\n 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 // place before updating lifecycles because of possible flushing of debounce\r\n if (_updateObserverOptions) {\r\n _updateObserverOptions(checkOption);\r\n }\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 if (options.callbacks.onUpdated) {\r\n options.callbacks.onUpdated();\r\n }\r\n };\r\n const {\r\n _sizeObserver,\r\n _trinsicObserver,\r\n _updateObserverOptions,\r\n _destroy: destroyObservers,\r\n } = lifecycleHubOservers(instance, updateLifecycles);\r\n\r\n const update = (changedOptions: Partial, force?: boolean) =>\r\n updateLifecycles({}, changedOptions, force);\r\n const envUpdateListener = update.bind(0, {}, 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 destroyObservers();\r\n removeEnvironmentListener(envUpdateListener);\r\n\r\n structureSetup._destroy();\r\n scrollbarsSetup._destroy();\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSInitializationObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createScrollbarsSetup, ScrollbarsSetup } from 'setups/scrollbarsSetup';\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 (\r\n target: OSTarget | OSInitializationObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n ): 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 destroy(): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSInitializationObject,\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)\r\n ._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const scrollbarsSetup: ScrollbarsSetup = createScrollbarsSetup(target, structureSetup);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup, scrollbarsSetup);\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(\r\n newOptions,\r\n optionsTemplate,\r\n currentOptions,\r\n true\r\n );\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({}, force);\r\n },\r\n destroy: () => lifecycleHub._destroy(),\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","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","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","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","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","args","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","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","exports","__esModule","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","isPrimitiveArr","some","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","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","numberAllowedValues","oTypes","number","arrayNullValues","null","stringArrayNullAllowedValues","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","attributes","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","callbacks","onUpdated","function","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","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","_host","_viewport","_padding","_content","_scrollbarsSlot","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","contentArrangeCounter","unwrap","createUniqueViewportArrangeElement","create","staticCreationFromStrategy","initializationValue","strategy","elementClass","dynamicCreationFromStrategy","defaultValue","takeInitializationValue","createStructureSetup","hostInitializationStrategy","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","evaluatedTargetObj","_target","host","viewport","padding","content","_viewportArrange","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","_targetObj","_targetCtx","_destroy","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetup","structureSetup","environmentScrollbarSlot","initializationScrollbarSlot","scrollbarsSlot","initializationScrollbarSlotResult","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","height","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_sizeChanged","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","directionIsRTL","directionIsRTLChanged","_getCurrentCacheValues","_directionIsRTL","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","heightIntrinsic","heightIntrinsicChanged","intersectionObserverInstance","entries","root","onSizeChanged","newSize","_heightIntrinsic","createEventContentChange","eventContentChange","map","destroyed","_updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","set","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","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","attributeOldValue","attributeFilter","subtree","childList","characterData","_update","takeRecords","ignorePrefix","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","diff","addedOrRemovedClass","lifecycleHubOservers","instance","updateLifecycles","debounceTimeout","debounceMaxDelay","contentMutationObserver","_structureSetup","contentMutationObserverAttr","updateLifecyclesWithDebouncedAdaptiveUpdateHints","prev","prevSizeChanged","_hostMutation","prevHostMutation","_contentMutation","prevContentMutation","currSizeChanged","currvHostMutation","currContentMutation","merged","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","updateFn","onContentMutation","contentChangedTroughEvent","onHostMutation","hostMutationObserver","updateOptions","checkOption","elementEventsChanged","attributesChanged","debounceValue","debounceChanged","updateContentMutationObserver","timeout","maxWait","_trinsicObserver","_sizeObserver","_updateObserverOptions","createTrinsicLifecycle","lifecycleHub","updateHints","display","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","paddingChanged","directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","max","overlaidScrollbarsHideOffset","whCacheOptions","sizeFraction","viewportOffsetSize","viewportRect","fractionalPixelRatioTollerance","setAxisOverflowStyle","horizontal","overflowAmount","behavior","styleObj","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","hasOverflow","_visible","_behavior","getOverflowAmount","viewportScrollSize","viewportClientSize","viewportSizeFraction","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateViewportSizeFraction","getCurrentViewportSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostSizeFraction","hostClientSize","isContentBox","fractionalClientHeight","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","scroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","viewportSizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","viewportSizeFractionCahnged","viewportScrollSizeChanged","viewportContentSize","arrangedViewportScrollSize","arrangedViewportClientSize","viewportSizeFractionChanged","overflowAmountChanged","overflowChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","getPropByPath","path","o","booleanCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","scrollbarsSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","newLifecycleCommunication","lifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","destroyObservers","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state","destroy"],"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 2abe1d2..14722f6 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=n;return[(e,n)=>{const l=s,a=t?t(n,s,i):n,c=e||(r?!r(l,a):l!==a);return(c||o)&&(s=a,i=l),[s,c,i]},t=>[s,!!t,i]]},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 l(t){return"number"==typeof t}function a(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=l(e)&&e>-1&&e%1==0;return!!(d(t)||!u(t)&&n)&&(!(e>0&&_(t))||e-1 in t)}function f(t){if(!t||!_(t)||"object"!==s(t))return!1;let e;const n="constructor",i=t[n],l=i&&i.prototype,a=r.call(t,n),c=l&&r.call(l,"isPrototypeOf");if(i&&!a&&!c)return!1;for(e in t);return o(e)||r.call(t,e)}function v(t){const n=window.Element;return!!t&&(n?t instanceof n:t.nodeType===e)}function p(t,e){if(g(t))for(let n=0;ne(t[n],n,t));return t}const h=(t,e,n)=>t.indexOf(e,n),b=(t,e,n)=>(n||a(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 p(t,t=>{b(e,t)}),e},y=t=>t&&0===t.length,m=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):p(t,n)},S=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),x=t=>t?Object.keys(t):[];function O(t,e,n,r,o,s,l){const a=[e,n,r,o,s,l];return"object"==typeof t&&!i(t)||u(t)||(t={}),p(a,e=>{p(x(e),n=>{const r=e[n];if(t===r)return!0;const o=d(r);if(r&&(f(r)||o)){const e=t[n];let i=e;o&&!d(e)?i=[]:o||f(e)||(i={}),t[n]=O(i,r)}else t[n]=r})}),t}function $(t){for(const e in t)return!1;return!0}function C(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function z(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}const I=(t,e)=>{t&&t.removeAttribute(e)};function L(t,e){return C("scrollLeft",0,t,e)}function A(t,e){return C("scrollTop",0,t,e)}const M=Element.prototype,T=(t,e)=>{const n=[],r=e?v(e)?e:null:document;return r?b(n,r.querySelectorAll(t)):n},R=(t,e)=>{if(v(t)){return(M.matches||M.msMatchesSelector).call(t,e)}return!1},V=t=>t?w(t.childNodes):[],j=t=>t?t.parentElement:null,P=(t,e,n)=>{if(n){let r,o=e;t&&(g(n)?(r=document.createDocumentFragment(),p(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))}},E=(t,e)=>{P(t,null,e)},H=(t,e)=>{P(t,t&&t.firstChild,e)},B=(t,e)=>{P(j(t),t&&t.nextSibling,e)},D=t=>{if(g(t))p(w(t),t=>D(t));else if(t){const e=j(t);e&&e.removeChild(t)}},k=t=>{const e=document.createElement("div");return t&&z(e,"class",t),e},N=t=>{const e=k();return e.innerHTML=t.trim(),p(V(e),t=>D(t))},F=t=>t.charAt(0).toUpperCase()+t.slice(1),G=["-webkit-","-moz-","-o-","-ms-"],q=["WebKit","Moz","O","MS","webkit","moz","o","ms"],Y={},X={},U=t=>{let e=X[t];if(S(X,t))return e;const n=F(t),r=k().style;return p(G,o=>{const i=o.replace(/-/g,""),s=[t,o+t,i+n,F(i)+n];return!(e=s.find(t=>void 0!==r[t]))}),X[t]=e||""},W=t=>{let e=Y[t]||window[t];return S(Y,t)||(p(q,n=>(e=e||window[n+F(t)],!e)),Y[t]=e),e},J=W("MutationObserver"),K=W("IntersectionObserver"),Q=W("ResizeObserver"),Z=W("cancelAnimationFrame"),tt=W("requestAnimationFrame"),et=/[^\x20\t\r\n\f]+/g,nt=(t,e,n)=>{let r,o=0,i=!1;if(t&&a(e)){const s=e.match(et)||[];for(i=s.length>0;r=s[o++];)i=!!n(t.classList,r)&&i}return i},rt=(t,e)=>{nt(t,e,(t,e)=>t.add(e))},ot=(t,e)=>{nt(t,e,(t,e)=>t.remove(e))},it={w:0,h:0},st=()=>({w:window.innerWidth,h:window.innerHeight}),lt=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:it,at=t=>t?{w:t.clientWidth,h:t.clientHeight}:it,ct=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:it,ut=t=>t.getBoundingClientRect();let dt;const _t=t=>t.split(" "),gt=(t,e,n,r)=>{p(_t(e),e=>{t.removeEventListener(e,n,r)})},ft=(t,e,n,r)=>{const i=(()=>{if(o(dt)){dt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){dt=!0}}))}catch(t){}}return dt})(),s=i&&r&&r._||!1,l=r&&r.g||!1,a=r&&r.v||!1,c=[],u=i?{passive:s,capture:l}:l;return p(_t(e),e=>{const r=a?o=>{t.removeEventListener(e,r,l),n&&n(o)}:n;b(c,gt.bind(null,t,e,r,l)),t.addEventListener(e,r,u)}),m.bind(0,c)},vt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),pt=(t,e,n,r)=>{if(t&&e){let o=!0;return p(n,n=>{(r?r(t[n]):t[n])!==(r?r(e[n]):e[n])&&(o=!1)}),o}return!1},ht=(t,e)=>pt(t,e,["w","h"]),bt=(t,e)=>pt(t,e,["t","r","b","l"]),wt=(t,e,n)=>pt(t,e,["width","height"],n&&(t=>Math.round(t))),yt=window.setTimeout,mt=t=>{t&&window.clearTimeout(t),t&&Z(t)},St=()=>{},xt=(t,e)=>{let n,r,o,i;const{p:s,m:a,S:c}=e,d=function(e){mt(n),mt(r),r=n=o=void 0,t.apply(this,e)},_=t=>c&&o?c(o,t):t,g=()=>{n&&d(_(i)||i)},f=function(){const t=arguments,e=u(s)?s():s,c=l(e)&&e>=0;if(c){const s=u(a)?a():a,c=l(s)&&s>=0,f=e>0?yt:tt,v=_(t),p=v||t,h=d.bind(0,p);v||d(o||t),mt(n),n=f(h,e),c&&!r&&(r=yt(g,s)),o=i=p}else d(t)};return f.O=g,f},Ot={opacity:1,zindex:1},$t=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},Ct=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],zt=(t,e,n)=>{try{if(t){const{style:r}=t;o(r[e])?r.setProperty(e,n):r[e]=((t,e)=>!Ot[t.toLowerCase()]&&l(e)?`${e}px`:e)(e,n)}}catch(r){}};function It(t,e){const n=a(e);if(d(e)||n){let r=n?"":{};if(t){const o=window.getComputedStyle(t,null);r=n?Ct(t,o,e):e.reduce((e,n)=>(e[n]=Ct(t,o,n),e),r)}return r}p(x(e),n=>zt(t,n,e[n]))}const Lt=(t,e,n)=>{const r=e?`${e}-`:"",o=n?`-${n}`:"",i=`${r}top${o}`,s=`${r}right${o}`,l=`${r}bottom${o}`,a=`${r}left${o}`,c=It(t,[i,s,l,a]);return{t:$t(c[i]),r:$t(c[s]),b:$t(c[l]),l:$t(c[a])}},At={x:0,y:0},Mt=t=>{const e=t?ut(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:At};var Tt={exports:{}};!function(t){function e(){return t.exports=e=Object.assign?Object.assign.bind():function(t){for(var e=1;e(t[e]=Pt[0]+e+Pt[1],t),{}),Ht=(t,e,n,r,i)=>{const u={},_=Rt({},t);return p(x(e).filter(e=>S(t,e)),g=>{const v=o(n[g])?{}:n[g],h=t[g],w=e[g],y=f(w),m=i?`${i}.`:"";if(y&&f(h)){const t=Ht(h,w,v,r,m+g);u[g]=t.C,_[g]=t.I,p([_,u],t=>{$(t[g])&&delete t[g]})}else if(!y){let t=!1;const e=[],n=[],i=s(h);if(p(d(w)?w:[w],r=>{let s;p(Et,(t,e)=>{t===r&&(s=e)});const l=o(s);if(l&&a(h)){const n=r.split(" ");t=!!n.find(t=>t===h),b(e,n)}else t=Et[i]===r;return b(n,l?Et.string:s),!t}),t){(d(h)&&!h.some(t=>!l(t)&&!a(t)&&!c(t))||f(h)?jt(h)!==jt(v):h!==v)&&(u[g]=h)}else r&&console.warn(`${`The option "${m}${g}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${h}".\r\n`+`Accepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n`}${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete _[g]}}),{I:_,C:u}},Bt=(t,e,n,r)=>Ht(t,e,n||{},r||!1),Dt=t=>{const e={L:{},A:{}};return p(x(t),n=>{const r=t[n];if(d(r))e.L[n]=r[1],e.A[n]=r[0];else{const t=Dt(r);e.L[n]=t.L,e.A[n]=t.A}}),e},kt="os-environment",Nt=`${kt}-flexbox-glue`,Ft=`${Nt}-max`,Gt="os-host",qt="os-padding",Yt="os-viewport",Xt=`${Yt}-arrange`,Ut="os-content",Wt=`${Yt}-scrollbar-styled`,Jt="os-size-observer",Kt=`${Jt}-appear`,Qt=`${Jt}-listener`,Zt=`${Qt}-scroll`,te=`${Qt}-item`,ee=`${te}-final`,ne="os-trinsic-observer",re="os-scrollbar",oe=`${re}-horizontal`,ie=`${re}-vertical`,se="os-scrollbar-track",le="os-scrollbar-handle",ae=Et.number,ce=[Et.array,Et.null],ue=[Et.string,Et.array,Et.null],de=[!0,Et.boolean],_e=[!1,Et.boolean],ge="hidden scroll visible visible-hidden",fe={resize:["none","none both horizontal vertical"],paddingAbsolute:_e,updating:{elementEvents:[[["img","load"]],ce],attributes:[null,ce],debounce:[[0,33],[Et.number,Et.array,Et.null]]},overflow:{x:["scroll",ge],y:["scroll",ge]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,ae],dragScroll:de,clickScroll:_e,touch:de},textarea:{dynWidth:_e,dynHeight:_e,inheritedAttrs:[["style","class"],ue]},nativeScrollbarsOverlaid:{show:_e,initialize:_e},callbacks:{onUpdated:[null,[Et.function,Et.null]]}},{L:ve,A:pe}=Dt(fe);let he;const{abs:be,round:we}=Math,ye=(t,e)=>{E(t,e);const n=at(e),r=lt(e);return{x:r.h-n.h,y:r.w-n.w}},me=(t,e)=>{const n="hidden";It(t,{overflowX:n,overflowY:n,direction:"rtl"}),L(t,0);const r=Mt(t),o=Mt(e);L(t,-999);const i=Mt(e);return{i:r.x===o.x,n:o.x!==i.x}},Se=(t,e)=>{rt(t,Nt);const n=ut(t),r=ut(e),o=wt(r,n,!0);rt(t,Ft);const i=ut(t),s=ut(e),l=wt(s,i,!0);return o&&l},xe=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},Oe=()=>{const{body:t}=document,e=N(`
`)[0],n=e.firstChild,r=new Set,o=ye(t,e),i=(t=>{let e=!1;rt(t,Wt);try{e="none"===It(t,U("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return e})(e),s={x:0===o.x,y:0===o.y},l={M:null,T:null,R:null,V:null,j:null};let a=l,c=pe;const u={P:o,H:s,B:i,D:"-1"===It(e,"zIndex"),k:me(e,n),N:Se(e,n),F(t){r.add(t)},G(t){r.delete(t)},q:()=>Rt({},a),Y(t){a=O({},a,t)},X:()=>Rt({},c),U(t){c=O({},c,t)},W:l,J:c};if(I(e,"style"),D(e),!(i||s.x&&s.y)){let n=st(),i=xe(),s=o;window.addEventListener("resize",()=>{if(r.size){const o=st(),l={w:o.w-n.w,h:o.h-n.h};if(0===l.w&&0===l.h)return;const a={w:be(l.w),h:be(l.h)},c={w:be(we(o.w/(n.w/100))),h:be(we(o.h/(n.h/100)))},u=xe(),d=a.w>2&&a.h>2,_=!((t,e)=>{const n=be(t),r=be(e);return!(n===r||n+1===r||n-1===r)})(c.w,c.h),g=u!==i&&i>0;if(d&&_&&g){const n=he.P=ye(t,e);D(e),s.x===n.x&&s.y===n.y||m(r),s=n}n=o,i=u}})}return u},$e=()=>(he||(he=Oe()),he);let Ce=0;const ze=t=>{E(j(t),V(t)),D(t)},Ie=()=>{const{B:t,H:e,D:n}=$e(),r=!!(!n&&!t&&(e.x||e.y))&&document.createElement("style");return r&&(z(r,"id",`${Xt}-${Ce}`),Ce++),r},Le=(t,e,n,r)=>{const o=e||(u(n)?n(t):n);return o||k(r)},Ae=(t,e,n,r,o)=>{const i=c(e)||e?e:u(n)?n(t):n;return null===i?!!o&&k(r):!0===i?k(r):i},Me=t=>{const{q:n,B:r}=$e(),{M:o,T:i,R:s,V:l}=n(),a=function(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}(t),c=t,u=a?t:c.target,d=R(u,"textarea"),_=!d&&R(u,"body"),g=u.ownerDocument,f=g.body,v=g.defaultView,p={K:u,M:d?Le(u,c.host,o,Gt):u,T:Le(u,c.viewport,i,Yt),R:Ae(u,c.padding,s,qt,!r),V:Ae(u,c.content,l,Ut,!1),Z:Ie()},w={tt:v,et:g,nt:j(f),rt:f,ot:d,it:_,st:a},y=x(p).reduce((t,e)=>{const n=p[e];return b(t,!(!n||j(n))&&n)},[]),S=t=>t?h(y,t)>-1:null,{K:O,M:$,R:C,T:z,V:I,Z:L}=p,A=[],M=d&&S($),T=d?O:V([I,z,C,$,O].find(t=>!1===S(t))),H=I||z;var k,N;return M&&(B(O,$),b(A,()=>{B($,O),D($)})),E(H,T),E($,C),E(C||$,z),E(z,I),rt($,Gt),rt(C,qt),rt(z,Yt),rt(I,Ut),b(A,()=>{a?(E($,V(H)),D(C||z),ot($,Gt)):(S(I)&&ze(I),S(z)&&ze(z),S(C)&&ze(C),ot($,Gt),ot(C,qt),ot(z,Yt),ot(I,Ut))}),r&&b(A,ot.bind(0,z,Wt)),L&&(N=L,P(j(k=z),k,N),b(A,D.bind(0,L))),{lt:p,ct:w,ut:()=>{m(A)}}},Te=t=>{const e=k(`${re} ${t}`),n=k(se),r=k(le);return E(e,n),E(n,r),{dt:e,_t:n,gt:r}},Re="animationstart",Ve="scroll",je=3333333,Pe=t=>"rtl"===It(t,"direction"),Ee=t=>t&&(t.height||t.width),He=(e,n,r)=>{const{ft:o=!1,vt:i=!1}=r||{},{k:s}=$e(),l=N(`
`)[0],a=l.firstChild,u=Pe.bind(0,l),[g]=t(0,{o:void 0,u:!0,s:(t,e)=>!(!t||!Ee(t)&&Ee(e))}),f=t=>{const e=d(t)&&t.length>0&&_(t[0]),r=!e&&c(t[0]);let i=!1,a=!1,u=!0;if(e){const[e,,n]=g(0,t.pop().contentRect),r=Ee(e),o=Ee(n);i=!n||!r,a=!o&&r,u=!i}else r?[,u]=t:a=!0===t;if(o&&u){const e=r?t[0]:Pe(l);L(l,e?s.n?-je:s.i?0:je:je),A(l,je)}i||n({pt:!r,ht:r?t:void 0,vt:!!a})},v=[];let p,h=!!i&&f;if(Q){const t=new Q(f);t.observe(a),b(v,()=>{t.disconnect()})}else{const t=N(`
`);E(a,t),rt(a,Zt);const e=t[0],n=e.lastChild,r=e.firstChild,o=null==r?void 0:r.firstChild;let s,l=lt(e),c=l,u=!1;const d=()=>{L(r,je),A(r,je),L(n,je),A(n,je)},_=t=>{s=0,u&&(l=c,f(!0===t))},g=t=>{c=lt(e),u=!t||!ht(c,l),t?(vt(t),u&&!s&&(Z(s),s=tt(_))):_(!1===t),d()};b(v,[ft(r,Ve,g),ft(n,Ve,g)]),It(o,{width:je,height:je}),d(),h=i?g.bind(0,!1):d}if(o){p=t(u,{o:!u()});const[e]=p;b(v,ft(l,Ve,t=>{const n=e(),[r,o]=n;o&&(ot(a,"ltr rtl"),rt(a,r?"rtl":"ltr"),f(n)),vt(t)}))}return h&&(rt(l,Kt),b(v,ft(l,Re,h,{v:!!Q}))),H(e,l),{ut(){m(v),D(l)},bt:t=>({wt:p?p[1](t):[!1,!1,!1]})}},Be=(t,e,n,r)=>{let o=!1;const{yt:i,St:s,xt:l,Ot:c,$t:u,Ct:d,zt:_}=r||{},{ut:g,It:f}=((t,e,n)=>{let r,o=!1;const i=i=>{if(n){p(n.reduce((e,n)=>{if(n){const r=n[0],o=n[1],s=o&&r&&(i?i(r):T(r,t));s&&s.length&&o&&a(o)&&b(e,[s,o.trim()],!0)}return e},[]),t=>p(t[0],n=>{const i=t[1],s=r.get(n);if(s){const t=s[0],e=s[1];t===i&&e()}const l=ft(n,i,t=>{o?(l(),r.delete(n)):e(t)});r.set(n,[i,l])}))}};return n&&(r=new WeakMap,i()),{ut:()=>{o=!0},It:i}})(t,xt(()=>{o&&n(!0)},{p:33,m:99}),l),v=s||[],w=(i||[]).concat(v),m=o=>{const i=(e?d:u)||St,s=_||St,l=[],g=[];let w=!1,m=!1,S=!1;p(o,n=>{const{attributeName:o,target:u,type:d,oldValue:_,addedNodes:f}=n,p="attributes"===d,y="childList"===d,x=t===u,O=p&&a(o)?z(u,o):0,$=0!==O&&_!==O,C=h(v,o)>-1&&$;if(e&&!x){const e=!p,l=p&&C,a=l&&c&&R(u,c),d=(a?!i(u,o,_,O):e||l)&&!s(n,!!a,t,r);b(g,f),m=m||d,S=S||y}!e&&x&&$&&!i(u,o,_,O)&&(b(l,o),w=w||C)}),S&&!y(g)&&f(t=>g.reduce((e,n)=>(b(e,T(t,n)),R(n,t)?b(e,n):e),[])),e?m&&n(!1):y(l)&&!w||n(l,w)},S=new J(m);return S.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:e,childList:e,characterData:e}),o=!0,{ut:()=>{o&&(g(),S.disconnect(),o=!1)},Lt:()=>{o&&m(S.takeRecords())}}},De="os-",ke=["tabindex"],Ne=["wrap","cols","rows"],Fe=["id","class","style","open"],Ge=(t,e,n,r)=>{if("class"===e&&n&&r){return!!((t,e)=>{const n=t&&t.split(" "),r=e&&e.split(" "),o={};return p(n,t=>{o[t]=1}),p(r,t=>{o[t]?delete o[t]:o[t]=1}),x(o)})(n,r).find(t=>0!==t.indexOf(De))}return!1},qe=(e,n)=>{let r,o,i;const{At:s}=e,{lt:c,ct:u}=s,{M:_,T:g,V:f}=c,{ot:v}=u,{B:w,N:y}=$e(),S=v?Ne:Fe.concat(Ne),x=xt(n,{p:()=>r,m:()=>o,S(t,e){const{pt:n,Mt:r,Tt:o}=t[0],{pt:i,Mt:s,Tt:l}=e[0];return[{pt:n||i,Mt:r||s,Tt:o||l}]}}),O=t=>{p(t||ke,t=>{if(h(ke,t)>-1){const e=z(_,t);a(e)?z(g,t,e):I(g,t)}})},$=t=>{(t?n:x)({Tt:!0})},C=(f||!y)&&((e,n)=>{const r=k(ne),o=[],[i,s]=t(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{o:!1}),l=t=>{if(t){const e=i(0,t),[,r]=e;r&&n(e)}};if(K){const t=new K(t=>{t&&t.length>0&&l(t.pop())},{root:e});t.observe(r),b(o,()=>{t.disconnect()})}else{const t=()=>{const t=lt(r);l(t)};b(o,He(r,t).ut),t()}return H(e,r),{ut(){m(o),D(r)},bt:t=>({Rt:s(t)})}})(_,t=>{n({Rt:t})}),L=He(_,({pt:t,ht:e,vt:r})=>{(!t||r?n:x)({pt:t,wt:e})},{vt:!0,ft:!w}),A=Be(_,!1,(t,e)=>{e?x({Mt:!0}):O(t)},{St:Fe,yt:Fe.concat(ke),$t:Ge});return O(),{Vt:C,jt:L,Pt:t=>{const[e,n]=t("updating.elementEvents"),[s,a]=t("updating.attributes"),[c,u]=t("updating.debounce");if((n||a)&&(i&&(i.Lt(),i.ut()),i=Be(f||g,!0,$,{St:S.concat(s||[]),yt:S.concat(s||[]),xt:e,Ct:Ge})),u)if(x.O(),d(c)){const t=c[0],e=c[1];r=!!l(t)&&t,o=!!l(e)&&e}else l(c)?(r=c,o=!1):(r=!1,o=!1)},ut(){i&&i.ut(),C&&C.ut(),L.ut(),A.ut()}}},Ye=t=>{const{At:e}=t,{V:n}=e.lt;return t=>{const{Rt:e}=t,[r,o]=e;return o&&It(n,{height:r?"":"100%",display:r?"":"inline"}),{pt:o,Tt:o}}},Xe=e=>{const{At:n,Et:r}=e,{M:o,R:i,T:s}=n.lt,[l,a]=t(Lt.bind(0,o,"padding"),{s:bt,o:Lt()});return(t,e,n)=>{let[o,c]=a(n);const{B:u,N:d}=$e(),{pt:_,wt:g,Tt:f}=t,[v,p]=g,[h,b]=e("paddingAbsolute");(_||c||!d&&f)&&([o,c]=l(n));const w=b||p||c;if(w){const t=!h||!i&&!u,e=o.r+o.l,n=o.t+o.b,l={marginRight:t&&!v?-e:0,marginBottom:t?-n:0,marginLeft:t&&v?-e:0,top:t?-o.t:0,right:t?v?-o.r:"auto":0,left:t?v?"auto":-o.l:0,width:t?`calc(100% + ${e}px)`:""},a={paddingTop:t?o.t:0,paddingRight:t?o.r:0,paddingBottom:t?o.b:0,paddingLeft:t?o.l:0};It(i||s,l),It(s,a),r({Ht:{Bt:!t,R:o},Dt:i?a:Rt({},l,a)})}return{kt:w}}},{max:Ue,abs:We,round:Je}=Math,Ke=42,Qe={s:ht,o:{w:0,h:0}},Ze=t=>{const e=lt(t),n=ut(t);return{w:n.width-e.w,h:n.height-e.h}},tn=()=>window.devicePixelRatio%1==0?0:1,en=(t,e,n,r)=>{const o=t?"overflowX":"overflowY",i=0===n.indexOf("visible"),s="visible-hidden"===n,l="scroll"===n,a=e>0;return i&&(r[o]="visible"),l&&a&&(r[o]=n),{Nt:i,Ft:s?"hidden":"scroll"}},nn=e=>{const{At:n,Gt:r,qt:o,Et:i}=e,{M:s,T:l,Z:a}=n.lt,[c,u]=t(Ze.bind(0,l),Qe),[d,_]=t(ct.bind(0,l),Qe),[g,f]=t(({Yt:t,Xt:e,Ut:n})=>({w:Ue(0,Je(Ue(0,t.w-e.w)-(tn()||Ue(0,n.w)))),h:Ue(0,Je(Ue(0,t.h-e.h)-(tn()||Ue(0,n.h))))}),Qe),v=(t,e)=>{if(It(l,{height:""}),e){const{H:e}=$e(),{Bt:n,R:r}=o().Ht,{Wt:i,Jt:a}=t,c=Ze(s),u=at(s),d="content-box"===It(l,"boxSizing"),_=n||d?r.b+r.t:0,g=u.h+(We(c.h)<1?c.h:0),f=!(e.x&&d);It(l,{height:g+(i.x&&f?a.x:0)-_})}},h=(t,e)=>{const{P:n,H:r,B:o}=$e(),{x:i,y:s}=r,a=o||t?0:Ke,c=!e?It(l,["overflowX","overflowY"]):e,u={x:"scroll"===c.overflowX,y:"scroll"===c.overflowY};return{Wt:u,Kt:{x:i&&!!a,y:s&&!!a},Jt:{x:u.x&&!o?i?a:n.x:0,y:u.y&&!o?s?a:n.y:0}}},b=(t,e,n,i)=>{if(r){const{Jt:r,Kt:s}=t,{x:c,y:u}=s,{x:d,y:_}=r,{Dt:g}=o(),f=g[i?"paddingRight":"paddingLeft"],v=g.paddingTop,p=e.w+(We(n.w)<1?n.w:0),h=e.h+(We(n.h)<1?n.h:0),b={w:_&&u?`${_+p-f}px`:"",h:d&&c?`${d+h-v}px`:""};if(a){const{sheet:t}=a;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${z(a,"id")} + .${Xt}::before {}`,0);const n=e[0].style;n.width=b.w,n.height=b.h}}}else It(l,{"--os-vaw":b.w,"--os-vah":b.h})}return r},w=(t,e,n,r)=>{const{Jt:i,Kt:s}=t,{x:l,y:a}=s,{x:c,y:u}=i,{Dt:d}=o(),_=e?"marginLeft":"marginRight",g=e?"paddingLeft":"paddingRight",f=d[_],v=d.marginBottom,p=d[g],h=d.paddingBottom;r.width=`calc(100% + ${u+-1*f}px)`,r[_]=-u+f,r.marginBottom=-c+v,n&&(r[g]=p+(a?u:0),r.paddingBottom=h+(l?c:0))};return(t,e,n)=>{const{wt:s,Rt:a,pt:y,Mt:m,Tt:S,kt:O}=t,{N:$,B:C,H:z}=$e(),[I,L]=a,[A,M]=s,[T,R]=e("nativeScrollbarsOverlaid.show"),V=T&&z.x&&z.y,j=!$&&(y||S||m||R||L);let P,E=u(n),H=_(n),B=f(n);if(R&&C&&(V?ot(l,Wt):rt(l,Wt)),j&&(P=h(V),v(P,!!I)),y||O||S||R||M){const{Qt:t,Zt:e}=((t,e,n)=>{if(r){const i=n||h(t),{Dt:s}=o(),{N:a}=$e(),{Kt:c}=i,{x:u,y:d}=c,_={},g=t=>p(t.split(" "),t=>{_[t]=s[t]});a||(_.height=""),u&&g("marginBottom paddingTop paddingBottom"),d&&g("marginLeft marginRight paddingLeft paddingRight");const f=It(l,x(_));return ot(l,Xt),It(l,_),{Qt:()=>{w(i,e,r,f),It(l,f),rt(l,Xt)},Zt:i}}return{Qt:St}})(V,A,P),[i,s]=E=c(n),[a,u]=H=d(n),_=at(l);let f=a,v=_;t(),(u||s||R)&&e&&!V&&b(e,a,i,A)&&(v=at(l),f=ct(l)),B=g(n,{Ut:i,Yt:{w:Ue(a.w,f.w),h:Ue(a.h,f.h)},Xt:{w:v.w+Ue(0,_.w-a.w),h:v.h+Ue(0,_.h-a.h)}})}const[D,k]=E,[N,F]=H,[G,q]=B,[Y,X]=e("overflow");if(O||k||F||q||X||R||M||j){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=((t,e,n,r)=>{const{Nt:o,Ft:i}=en(!0,e.w,n.x,r),{Nt:s,Ft:l}=en(!1,e.h,n.y,r);return o&&!s&&(r.overflowX=i),s&&!o&&(r.overflowY=l),h(t,r)})(V,G,Y,t),n=b(e,N,D,A);w(e,A,n,t),j&&v(e,!!I),It(l,t),i({te:e.Wt,ee:G})}}},rn=(t,e)=>t?e.split(".").reduce((t,e)=>t&&S(t,e)?t[e]:void 0,t):void 0,on=[!1,!1,!1],sn={Ht:{Bt:!1,R:{t:0,r:0,b:0,l:0}},te:{x:!1,y:!1},ee:{w:0,h:0},Dt:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}},ln=(t,e,n)=>{const{X:r}=$e(),o=O({},r(),Bt(e||{},ve,null,!0).C),i=Me(t),s=((t,e)=>{const{q:n}=$e(),{j:r}=n(),{lt:o,ct:i}=e,{K:s,M:l,T:a}=o,c=!i.st&&t.scrollbarsSlot,d=(u(c)?c(s,l,a):c)||(u(r)?r(s,l,a):r)||l,_=Te(oe),g=Te(ie),{dt:f}=_,{dt:v}=g;return E(d,f),E(d,v),{ne:_,re:g,ut(){D([f,v])}}})(t,i),a=((t,e,n)=>{let r=sn;const{T:o}=e.lt,{B:i,H:s,N:a,F:c,G:u}=$e(),d=!i&&(s.x||s.y),_={A:t,At:e,Gt:d,qt:()=>r,Et(t){r=O({},r,t)}},g=[Ye(_),Xe(_),nn(_)],f=(e,n,r)=>{let{wt:i,Rt:s,pt:c=r||!1,Mt:u=r||!1,Tt:_=r||!1,kt:f=r||!1}=e||{};const w=i||(v?v.bt(r).wt:on),y=s||(h?h.bt(r).Rt:on),m=e=>[rn(t,e),r||void 0!==rn(n,e)],S=d||!a,x=S&&L(o),O=S&&A(o);b&&b(m),p(g,t=>{const{pt:e,Mt:n,Tt:o,kt:i}=t({wt:w,Rt:y,pt:c,Mt:u,Tt:_,kt:f},m,!!r)||{};c=e||c,u=n||u,_=o||_,f=i||f}),l(x)&&L(o,x),l(O)&&A(o,O),t.callbacks.onUpdated&&t.callbacks.onUpdated()},{jt:v,Vt:h,Pt:b,ut:w}=qe(_,f),y=(t,e)=>f(null,t,e),m=y.bind(null,null,!0);return c(m),console.log($e()),{Lt:y,oe:()=>({ie:r.ee}),ut(){w(),u(m),e.ut(),n.ut()}}})(o,i,s),c={options(t){if(t){const{C:e}=Bt(t,ve,o,!0);$(e)||(O(o,e),a.Lt(e))}return o},state:()=>a.oe(),update(t){a.Lt(null,t)},destroy:()=>a.ut()};return c.update(!0),c};export{ln as default}; \ No newline at end of file +function t(t,e){const{o:n,s:r,u:o}=t;let i,s=n;const a=(t,e)=>{const n=s,a=t,l=e||(r?!r(n,a):n!==a);return(l||o)&&(s=a,i=n),[s,l,i]};return[e?t=>a(e(s,i),t):a,t=>[s,!!t,i]]}const 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 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 f(t){if(!t||!_(t)||"object"!==s(t))return!1;let e;const n="constructor",i=t[n],a=i&&i.prototype,l=r.call(t,n),c=a&&r.call(a,"isPrototypeOf");if(i&&!l&&!c)return!1;for(e in t);return o(e)||r.call(t,e)}function v(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)=>d(t)?t.indexOf(e,n):-1,b=(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=>{b(e,t)}),e},y=t=>!!t&&0===t.length,m=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):h(t,n)},S=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),x=t=>t?Object.keys(t):[];function O(t,e,n,r,o,s,a){const l=[e,n,r,o,s,a];return"object"==typeof t&&!i(t)||u(t)||(t={}),h(l,e=>{h(x(e),n=>{const r=e[n];if(t===r)return!0;const o=d(r);if(r&&(f(r)||o)){const e=t[n];let i=e;o&&!d(e)?i=[]:o||f(e)||(i={}),t[n]=O(i,r)}else t[n]=r})}),t}function $(t){for(const e in t)return!1;return!0}function C(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function z(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}const I=(t,e)=>{t&&t.removeAttribute(e)};function L(t,e){return C("scrollLeft",0,t,e)}function A(t,e){return C("scrollTop",0,t,e)}const M=Element.prototype,T=(t,e)=>{const n=[],r=e?v(e)?e:null:document;return r?b(n,r.querySelectorAll(t)):n},R=(t,e)=>{if(v(t)){return(M.matches||M.msMatchesSelector).call(t,e)}return!1},V=t=>t?w(t.childNodes):[],j=t=>t?t.parentElement:null,P=(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))}},E=(t,e)=>{P(t,null,e)},H=(t,e)=>{P(t,t&&t.firstChild,e)},B=(t,e)=>{P(j(t),t&&t.nextSibling,e)},D=t=>{if(g(t))h(w(t),t=>D(t));else if(t){const e=j(t);e&&e.removeChild(t)}},k=t=>{const e=document.createElement("div");return t&&z(e,"class",t),e},N=t=>{const e=k();return e.innerHTML=t.trim(),h(V(e),t=>D(t))},G=t=>t.charAt(0).toUpperCase()+t.slice(1),q=["-webkit-","-moz-","-o-","-ms-"],Y=["WebKit","Moz","O","MS","webkit","moz","o","ms"],F={},X={},U=t=>{let e=X[t];if(S(X,t))return e;const n=G(t),r=k().style;return h(q,o=>{const i=o.replace(/-/g,""),s=[t,o+t,i+n,G(i)+n];return!(e=s.find(t=>void 0!==r[t]))}),X[t]=e||""},W=t=>{let e=F[t]||window[t];return S(F,t)||(h(Y,n=>(e=e||window[n+G(t)],!e)),F[t]=e),e},J=W("MutationObserver"),K=W("IntersectionObserver"),Q=W("ResizeObserver"),Z=W("cancelAnimationFrame"),tt=W("requestAnimationFrame"),et=/[^\x20\t\r\n\f]+/g,nt=(t,e,n)=>{let r,o=0,i=!1;if(t&&l(e)){const s=e.match(et)||[];for(i=s.length>0;r=s[o++];)i=!!n(t.classList,r)&&i}return i},rt=(t,e)=>{nt(t,e,(t,e)=>t.add(e))},ot=(t,e)=>{nt(t,e,(t,e)=>t.remove(e))},it={w:0,h:0},st=()=>({w:window.innerWidth,h:window.innerHeight}),at=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:it,lt=t=>t?{w:t.clientWidth,h:t.clientHeight}:it,ct=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:it,ut=t=>t.getBoundingClientRect();let dt;const _t=t=>t.split(" "),gt=(t,e,n,r)=>{h(_t(e),e=>{t.removeEventListener(e,n,r)})},ft=(t,e,n,r)=>{const i=(()=>{if(o(dt)){dt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){dt=!0}}))}catch(t){}}return dt})(),s=i&&r&&r._||!1,a=r&&r.g||!1,l=r&&r.v||!1,c=[],u=i?{passive:s,capture:a}:a;return h(_t(e),e=>{const r=l?o=>{t.removeEventListener(e,r,a),n&&n(o)}:n;b(c,gt.bind(null,t,e,r,a)),t.addEventListener(e,r,u)}),m.bind(0,c)},vt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),ht=(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},pt=(t,e)=>ht(t,e,["w","h"]),bt=(t,e)=>ht(t,e,["t","r","b","l"]),wt=(t,e,n)=>ht(t,e,["width","height"],n&&(t=>Math.round(t))),yt=t=>{t&&window.clearTimeout(t),t&&Z(t)},mt=()=>{},St=(t,e)=>{let n,r,o,i;const{p:s,m:l,S:c}=e||{},d=window.setTimeout,_=function(e){yt(n),yt(r),r=n=o=void 0,t.apply(this,e)},g=t=>c&&o?c(o,t):t,f=()=>{n&&_(g(i)||i)},v=function(){const t=w(arguments),e=u(s)?s():s,c=a(e)&&e>=0;if(c){const s=u(l)?l():l,c=a(s)&&s>=0,v=e>0?d:tt,h=g(t)||t,p=_.bind(0,h);yt(n),n=v(p,e),c&&!r&&(r=d(f,s)),o=i=h}else _(t)};return v.O=f,v},xt={opacity:1,zindex:1},Ot=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},$t=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],Ct=(t,e,n)=>{try{if(t){const{style:r}=t;o(r[e])?r.setProperty(e,n):r[e]=((t,e)=>!xt[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}}catch(r){}};function zt(t,e){const n=l(e);if(d(e)||n){let r=n?"":{};if(t){const o=window.getComputedStyle(t,null);r=n?$t(t,o,e):e.reduce((e,n)=>(e[n]=$t(t,o,n),e),r)}return r}h(x(e),n=>Ct(t,n,e[n]))}const It=(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=zt(t,[i,s,a,l]);return{t:Ot(c[i]),r:Ot(c[s]),b:Ot(c[a]),l:Ot(c[l])}},Lt={x:0,y:0},At=t=>{const e=t?ut(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Lt};var Mt={exports:{}};!function(t){function e(){return t.exports=e=Object.assign?Object.assign.bind():function(t){for(var e=1;e(t[e]=jt[0]+e+jt[1],t),{}),Et=(t,e,n,r,i)=>{const u={},_=Tt({},t);return h(x(e).filter(e=>S(t,e)),g=>{const v=o(n[g])?{}:n[g],p=t[g],w=e[g],y=f(w),m=i?`${i}.`:"";if(y&&f(p)){const t=Et(p,w,v,r,m+g);u[g]=t.C,_[g]=t.I,h([_,u],t=>{$(t[g])&&delete t[g]})}else if(!y){let t=!1;const e=[],n=[],i=s(p);if(h(d(w)?w:[w],r=>{let s;h(Pt,(t,e)=>{t===r&&(s=e)});const a=o(s);if(a&&l(p)){const n=r.split(" ");t=!!n.find(t=>t===p),b(e,n)}else t=Pt[i]===r;return b(n,a?Pt.string:s),!t}),t){(d(p)&&!p.some(t=>!a(t)&&!l(t)&&!c(t))||f(p)?Vt(p)!==Vt(v):p!==v)&&(u[g]=p)}else r&&console.warn(`${`The option "${m}${g}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${p}".\r\n`+`Accepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n`}${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete _[g]}}),{I:_,C:u}},Ht=(t,e,n,r)=>Et(t,e,n||{},r||!1),Bt=t=>{const e={L:{},A:{}};return h(x(t),n=>{const r=t[n];if(d(r))e.L[n]=r[1],e.A[n]=r[0];else{const t=Bt(r);e.L[n]=t.L,e.A[n]=t.A}}),e},Dt="os-environment",kt=`${Dt}-flexbox-glue`,Nt=`${kt}-max`,Gt="os-host",qt="os-padding",Yt="os-viewport",Ft=`${Yt}-arrange`,Xt="os-content",Ut=`${Yt}-scrollbar-styled`,Wt="os-size-observer",Jt=`${Wt}-appear`,Kt=`${Wt}-listener`,Qt=`${Kt}-scroll`,Zt=`${Kt}-item`,te=`${Zt}-final`,ee="os-trinsic-observer",ne="os-scrollbar",re=`${ne}-horizontal`,oe=`${ne}-vertical`,ie="os-scrollbar-track",se="os-scrollbar-handle",ae=Pt.number,le=[Pt.array,Pt.null],ce=[Pt.string,Pt.array,Pt.null],ue=[!0,Pt.boolean],de=[!1,Pt.boolean],_e="hidden scroll visible visible-hidden",ge={resize:["none","none both horizontal vertical"],paddingAbsolute:de,updating:{elementEvents:[[["img","load"]],le],attributes:[null,le],debounce:[[0,33],[Pt.number,Pt.array,Pt.null]]},overflow:{x:["scroll",_e],y:["scroll",_e]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,ae],dragScroll:ue,clickScroll:de,touch:ue},textarea:{dynWidth:de,dynHeight:de,inheritedAttrs:[["style","class"],ce]},nativeScrollbarsOverlaid:{show:de,initialize:de},callbacks:{onUpdated:[null,[Pt.function,Pt.null]]}},{L:fe,A:ve}=Bt(ge);let he;const{abs:pe,round:be}=Math,we=(t,e)=>{E(t,e);const n=lt(e),r=at(e);return{x:r.h-n.h,y:r.w-n.w}},ye=(t,e)=>{const n="hidden";zt(t,{overflowX:n,overflowY:n,direction:"rtl"}),L(t,0);const r=At(t),o=At(e);L(t,-999);const i=At(e);return{i:r.x===o.x,n:o.x!==i.x}},me=(t,e)=>{rt(t,kt);const n=ut(t),r=ut(e),o=wt(r,n,!0);rt(t,Nt);const i=ut(t),s=ut(e),a=wt(s,i,!0);return o&&a},Se=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},xe=()=>{const{body:t}=document,e=N(`
`)[0],n=e.firstChild,r=new Set,o=we(t,e),i=(t=>{let e=!1;rt(t,Ut);try{e="none"===zt(t,U("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return e})(e),s={x:0===o.x,y:0===o.y},a={M:null,T:null,R:null,V:null,j:null};let l=a,c=ve;const u={P:o,H:s,B:i,D:"-1"===zt(e,"zIndex"),k:ye(e,n),N:me(e,n),G(t){r.add(t)},q(t){r.delete(t)},Y:()=>Tt({},l),F(t){l=O({},l,t)},X:()=>Tt({},c),U(t){c=O({},c,t)},W:a,J:c};if(I(e,"style"),D(e),!(i||s.x&&s.y)){let n=st(),i=Se(),s=o;window.addEventListener("resize",()=>{if(r.size){const o=st(),a={w:o.w-n.w,h:o.h-n.h};if(0===a.w&&0===a.h)return;const l={w:pe(a.w),h:pe(a.h)},c={w:pe(be(o.w/(n.w/100))),h:pe(be(o.h/(n.h/100)))},u=Se(),d=l.w>2&&l.h>2,_=!((t,e)=>{const n=pe(t),r=pe(e);return!(n===r||n+1===r||n-1===r)})(c.w,c.h),g=u!==i&&i>0;if(d&&_&&g){const n=he.P=we(t,e);D(e),s.x===n.x&&s.y===n.y||m(r),s=n}n=o,i=u}})}return u},Oe=()=>(he||(he=xe()),he);let $e=0;const Ce=t=>{E(j(t),V(t)),D(t)},ze=()=>{const{B:t,H:e,D:n}=Oe(),r=!!(!n&&!t&&(e.x||e.y))&&document.createElement("style");return r&&(z(r,"id",`${Ft}-${$e}`),$e++),r},Ie=(t,e,n,r)=>{const o=e||(u(n)?n(t):n);return o||k(r)},Le=(t,e,n,r,o)=>{const i=c(e)||e?e:u(n)?n(t):n;return null===i?!!o&&k(r):!0===i?k(r):i},Ae=t=>{const{Y:n,B:r}=Oe(),{M:o,T:i,R:s,V:a}=n(),l=function(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}(t),c=t,u=l?t:c.target,d=R(u,"textarea"),_=!d&&R(u,"body"),g=u.ownerDocument,f=g.body,v=g.defaultView,h={K:u,M:d?Ie(u,c.host,o,Gt):u,T:Ie(u,c.viewport,i,Yt),R:Le(u,c.padding,s,qt,!r),V:Le(u,c.content,a,Xt,!1),Z:ze()},w={tt:v,et:g,nt:j(f),rt:f,ot:d,it:_,st:l},y=x(h).reduce((t,e)=>{const n=h[e];return b(t,!(!n||j(n))&&n)},[]),S=t=>t?p(y,t)>-1:null,{K:O,M:$,R:C,T:z,V:I,Z:L}=h,A=[],M=d&&S($),T=d?O:V([I,z,C,$,O].find(t=>!1===S(t))),H=I||z;var k,N;return M&&(B(O,$),b(A,()=>{B($,O),D($)})),E(H,T),E($,C),E(C||$,z),E(z,I),rt($,Gt),rt(C,qt),rt(z,Yt),rt(I,Xt),b(A,()=>{l?(E($,V(H)),D(C||z),ot($,Gt)):(S(I)&&Ce(I),S(z)&&Ce(z),S(C)&&Ce(C),ot($,Gt),ot(C,qt),ot(z,Yt),ot(I,Xt))}),r&&b(A,ot.bind(0,z,Ut)),L&&(N=L,P(j(k=z),k,N),b(A,D.bind(0,L))),{lt:h,ct:w,ut:()=>{m(A)}}},Me=t=>{const e=k(`${ne} ${t}`),n=k(ie),r=k(se);return E(e,n),E(n,r),{dt:e,_t:n,gt:r}},Te="animationstart",Re="scroll",Ve=3333333,je=t=>"rtl"===zt(t,"direction"),Pe=t=>t&&(t.height||t.width),Ee=(e,n,r)=>{const{ft:o=!1,vt:i=!1}=r||{},{k:s}=Oe(),a=N(`
`)[0],l=a.firstChild,u=je.bind(0,a),[g]=t({o:void 0,u:!0,s:(t,e)=>!(!t||!Pe(t)&&Pe(e))}),f=t=>{const e=d(t)&&t.length>0&&_(t[0]),r=!e&&c(t[0]);let i=!1,l=!1,u=!0;if(e){const[e,,n]=g(t.pop().contentRect),r=Pe(e),o=Pe(n);i=!n||!r,l=!o&&r,u=!i}else r?[,u]=t:l=!0===t;if(o&&u){const e=r?t[0]:je(a);L(a,e?s.n?-Ve:s.i?0:Ve:Ve),A(a,Ve)}i||n({ht:!r,pt:r?t:void 0,vt:!!l})},v=[];let h,p=!!i&&f;if(Q){const t=new Q(f);t.observe(l),b(v,()=>{t.disconnect()})}else{const t=N(`
`);E(l,t),rt(l,Qt);const e=t[0],n=e.lastChild,r=e.firstChild,o=null==r?void 0:r.firstChild;let s,a=at(e),c=a,u=!1;const d=()=>{L(r,Ve),A(r,Ve),L(n,Ve),A(n,Ve)},_=t=>{s=0,u&&(a=c,f(!0===t))},g=t=>{c=at(e),u=!t||!pt(c,a),t?(vt(t),u&&!s&&(Z(s),s=tt(_))):_(!1===t),d()};b(v,[ft(r,Re,g),ft(n,Re,g)]),zt(o,{width:Ve,height:Ve}),d(),p=i?g.bind(0,!1):d}if(o){h=t({o:!u()},u);const[e]=h;b(v,ft(a,Re,t=>{const n=e(),[r,o]=n;o&&(ot(l,"ltr rtl"),rt(l,r?"rtl":"ltr"),f(n)),vt(t)}))}return p&&(rt(a,Jt),b(v,ft(a,Te,p,{v:!!Q}))),H(e,a),{ut(){m(v),D(a)},bt:t=>({wt:h?h[1](t):[!1,!1,!1]})}},He=(t,e,n,r)=>{let o=!1;const{yt:i,St:s,xt:a,Ot:c,$t:u,Ct:d,zt:_}=r||{},{ut:g,It:f}=((t,e,n)=>{let r,o=!1;const i=i=>{if(n){h(n.reduce((e,n)=>{if(n){const r=n[0],o=n[1],s=o&&r&&(i?i(r):T(r,t));s&&s.length&&o&&l(o)&&b(e,[s,o.trim()],!0)}return e},[]),t=>h(t[0],n=>{const i=t[1],s=r.get(n);if(s){const t=s[0],e=s[1];t===i&&e()}const a=ft(n,i,t=>{o?(a(),r.delete(n)):e(t)});r.set(n,[i,a])}))}};return n&&(r=new WeakMap,i()),{ut:()=>{o=!0},It:i}})(t,St(()=>{o&&n(!0)},{p:33,m:99}),a),v=s||[],w=(i||[]).concat(v),m=o=>{const i=(e?d:u)||mt,s=_||mt,a=[],g=[];let w=!1,m=!1,S=!1;h(o,n=>{const{attributeName:o,target:u,type:d,oldValue:_,addedNodes:f}=n,h="attributes"===d,y="childList"===d,x=t===u,O=h&&l(o)?z(u,o):0,$=0!==O&&_!==O,C=p(v,o)>-1&&$;if(e&&!x){const e=!h,a=h&&C,l=a&&c&&R(u,c),d=(l?!i(u,o,_,O):e||a)&&!s(n,!!l,t,r);b(g,f),m=m||d,S=S||y}!e&&x&&$&&!i(u,o,_,O)&&(b(a,o),w=w||C)}),S&&!y(g)&&f(t=>g.reduce((e,n)=>(b(e,T(t,n)),R(n,t)?b(e,n):e),[])),e?m&&n(!1):y(a)&&!w||n(a,w)},S=new J(m);return S.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:e,childList:e,characterData:e}),o=!0,{ut:()=>{o&&(g(),S.disconnect(),o=!1)},Lt:()=>{o&&m(S.takeRecords())}}},Be="os-",De=["tabindex"],ke=["wrap","cols","rows"],Ne=["id","class","style","open"],Ge=(t,e,n,r)=>{if("class"===e&&n&&r){return!!((t,e)=>{const n=t&&t.split(" "),r=e&&e.split(" "),o={};return h(n,t=>{o[t]=1}),h(r,t=>{o[t]?delete o[t]:o[t]=1}),x(o)})(n,r).find(t=>0!==t.indexOf(Be))}return!1},qe=(e,n)=>{let r,o,i;const{At:s}=e,{lt:c,ct:u}=s,{M:_,T:g,V:f}=c,{ot:v}=u,{B:w,N:y}=Oe(),S=v?ke:Ne.concat(ke),x=St(n,{p:()=>r,m:()=>o,S(t,e){const{ht:n,Mt:r,Tt:o}=t[0],{ht:i,Mt:s,Tt:a}=e[0];return[{ht:n||i,Mt:r||s,Tt:o||a}]}}),O=t=>{h(t||De,t=>{if(p(De,t)>-1){const e=z(_,t);l(e)?z(g,t,e):I(g,t)}})},$=t=>{(t?n:x)({Tt:!0})},C=(f||!y)&&((e,n)=>{const r=k(ee),o=[],[i,s]=t({o:!1}),a=t=>{if(t){const r=i(0===(e=t).h||e.isIntersecting||e.intersectionRatio>0),[,o]=r;o&&n(r)}var e};if(K){const t=new K(t=>{t&&t.length>0&&a(t.pop())},{root:e});t.observe(r),b(o,()=>{t.disconnect()})}else{const t=()=>{const t=at(r);a(t)};b(o,Ee(r,t).ut),t()}return H(e,r),{ut(){m(o),D(r)},bt:t=>({Rt:s(t)})}})(_,t=>{n({Rt:t})}),L=Ee(_,({ht:t,pt:e,vt:r})=>{(!t||r?n:x)({ht:t,wt:e})},{vt:!0,ft:!w}),A=He(_,!1,(t,e)=>{e?x({Mt:!0}):O(t)},{St:Ne,yt:Ne.concat(De),$t:Ge});return O(),{Vt:C,jt:L,Pt:t=>{const[e,n]=t("updating.elementEvents"),[s,l]=t("updating.attributes"),[c,u]=t("updating.debounce");if((n||l)&&(i&&(i.Lt(),i.ut()),i=He(f||g,!0,$,{St:S.concat(s||[]),yt:S.concat(s||[]),xt:e,Ct:Ge})),u)if(x.O(),d(c)){const t=c[0],e=c[1];r=!!a(t)&&t,o=!!a(e)&&e}else a(c)?(r=c,o=!1):(r=!1,o=!1)},ut(){i&&i.ut(),C&&C.ut(),L.ut(),A.ut()}}},Ye=t=>{const{At:e}=t,{V:n}=e.lt;return t=>{const{Rt:e}=t,[r,o]=e;return o&&zt(n,{height:r?"":"100%",display:r?"":"inline"}),{ht:o,Tt:o}}},Fe=e=>{const{At:n,Et:r}=e,{M:o,R:i,T:s}=n.lt,[a,l]=t({s:bt,o:It()},It.bind(0,o,"padding",""));return(t,e,n)=>{let[o,c]=l(n);const{B:u,N:d}=Oe(),{ht:_,wt:g,Tt:f}=t,[v,h]=g,[p,b]=e("paddingAbsolute");(_||c||!d&&f)&&([o,c]=a(n));const w=b||h||c;if(w){const t=!p||!i&&!u,e=o.r+o.l,n=o.t+o.b,a={marginRight:t&&!v?-e:0,marginBottom:t?-n:0,marginLeft:t&&v?-e:0,top:t?-o.t:0,right:t?v?-o.r:"auto":0,left:t?v?"auto":-o.l:0,width:t?`calc(100% + ${e}px)`:""},l={paddingTop:t?o.t:0,paddingRight:t?o.r:0,paddingBottom:t?o.b:0,paddingLeft:t?o.l:0};zt(i||s,a),zt(s,l),r({Ht:{Bt:!t,R:o},Dt:i?l:Tt({},a,l)})}return{kt:w}}},{max:Xe,abs:Ue,round:We}=Math,Je=42,Ke={s:pt,o:{w:0,h:0}},Qe=t=>{const e=at(t),n=ut(t);return{w:n.width-e.w,h:n.height-e.h}},Ze=()=>window.devicePixelRatio%1==0?0:1,tn=(t,e,n,r)=>{const o=t?"overflowX":"overflowY",i=0===n.indexOf("visible"),s="visible-hidden"===n,a="scroll"===n,l=e>0;return i&&(r[o]="visible"),a&&l&&(r[o]=n),{Nt:i,Gt:s?"hidden":"scroll"}},en=e=>{const{At:n,qt:r,Yt:o,Et:i}=e,{M:s,T:a,Z:l}=n.lt,[c,u]=t(Ke,Qe.bind(0,a)),[d,_]=t(Ke,ct.bind(0,a)),[g,f]=t(Ke),v=(t,e)=>{if(zt(a,{height:""}),e){const{H:e}=Oe(),{Bt:n,R:r}=o().Ht,{Ft:i,Xt:l}=t,c=Qe(s),u=lt(s),d="content-box"===zt(a,"boxSizing"),_=n||d?r.b+r.t:0,g=u.h+(Ue(c.h)<1?c.h:0),f=!(e.x&&d);zt(a,{height:g+(i.x&&f?l.x:0)-_})}},p=(t,e)=>{const{P:n,H:r,B:o}=Oe(),{x:i,y:s}=r,l=o||t?0:Je,c=!e?zt(a,["overflowX","overflowY"]):e,u={x:"scroll"===c.overflowX,y:"scroll"===c.overflowY},d={x:i?l:n.x,y:s?l:n.y};return{Ft:u,Ut:{x:i&&!!l,y:s&&!!l},Xt:{x:u.x&&!o?d.x:0,y:u.y&&!o?d.y:0}}},b=(t,e,n,i)=>{if(r){const{Xt:r,Ut:s}=t,{x:c,y:u}=s,{x:d,y:_}=r,{Dt:g}=o(),f=g[i?"paddingRight":"paddingLeft"],v=g.paddingTop,h=e.w+(Ue(n.w)<1?n.w:0),p=e.h+(Ue(n.h)<1?n.h:0),b={w:_&&u?`${_+h-f}px`:"",h:d&&c?`${d+p-v}px`:""};if(l){const{sheet:t}=l;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${z(l,"id")} + .${Ft}::before {}`,0);const n=e[0].style;n.width=b.w,n.height=b.h}}}else zt(a,{"--os-vaw":b.w,"--os-vah":b.h})}return r},w=(t,e,n,r)=>{const{Xt:i,Ut:s}=t,{x:a,y:l}=s,{x:c,y:u}=i,{Dt:d}=o(),_=e?"marginLeft":"marginRight",g=e?"paddingLeft":"paddingRight",f=d[_],v=d.marginBottom,h=d[g],p=d.paddingBottom;r.width=`calc(100% + ${u+-1*f}px)`,r[_]=-u+f,r.marginBottom=-c+v,n&&(r[g]=h+(l?u:0),r.paddingBottom=p+(a?c:0))};return(t,e,n)=>{const{wt:s,Rt:l,ht:y,Mt:m,Tt:S,kt:O}=t,{N:$,B:C,H:z}=Oe(),[I,L]=l,[A,M]=s,[T,R]=e("nativeScrollbarsOverlaid.show"),V=T&&z.x&&z.y,j=!$&&(y||S||m||R||L);let P,E=u(n),H=_(n),B=f(n);if(R&&C&&(V?ot(a,Ut):rt(a,Ut)),j&&(P=p(V),v(P,!!I)),y||O||S||R||M){const{Wt:t,Jt:e}=((t,e,n)=>{if(r){const i=n||p(t),{Dt:s}=o(),{N:l}=Oe(),{Ut:c}=i,{x:u,y:d}=c,_={},g=t=>h(t.split(" "),t=>{_[t]=s[t]});l||(_.height=""),u&&g("marginBottom paddingTop paddingBottom"),d&&g("marginLeft marginRight paddingLeft paddingRight");const f=zt(a,x(_));return ot(a,Ft),zt(a,_),{Wt:()=>{w(i,e,r,f),zt(a,f),rt(a,Ft)},Jt:i}}return{Wt:mt}})(V,A,P),[i,s]=E=c(n),[l,u]=H=d(n),_=lt(a);let f=l,v=_;t(),(u||s||R)&&e&&!V&&b(e,l,i,A)&&(v=lt(a),f=ct(a)),B=g(((t,e,n)=>({w:Xe(0,We(Xe(0,t.w-e.w)-(Ze()||Xe(0,n.w)))),h:Xe(0,We(Xe(0,t.h-e.h)-(Ze()||Xe(0,n.h))))}))({w:Xe(l.w,f.w),h:Xe(l.h,f.h)},{w:v.w+Xe(0,_.w-l.w),h:v.h+Xe(0,_.h-l.h)},i),n)}const[D,k]=E,[N,G]=H,[q,Y]=B,[F,X]=e("overflow");if(O||k||G||Y||X||R||M||j){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=((t,e,n,r)=>{const{Nt:o,Gt:i}=tn(!0,e.w,n.x,r),{Nt:s,Gt:a}=tn(!1,e.h,n.y,r);return o&&!s&&(r.overflowX=i),s&&!o&&(r.overflowY=a),p(t,r)})(V,q,F,t),n=b(e,N,D,A);w(e,A,n,t),j&&v(e,!!I),zt(a,t),i({Kt:e.Ft,Qt:q})}}},nn=(t,e)=>t?e.split(".").reduce((t,e)=>t&&S(t,e)?t[e]:void 0,t):void 0,rn=[!1,!1,!1],on={Ht:{Bt:!1,R:{t:0,r:0,b:0,l:0}},Kt:{x:!1,y:!1},Qt:{w:0,h:0},Dt:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}},sn=(t,e,n)=>{const{X:r}=Oe(),o=O({},r(),Ht(e||{},fe,null,!0).C),i=Ae(t),s=((t,e)=>{const{Y:n}=Oe(),{j:r}=n(),{lt:o,ct:i}=e,{K:s,M:a,T:l}=o,c=!i.st&&t.scrollbarsSlot,d=(u(c)?c(s,a,l):c)||(u(r)?r(s,a,l):r)||a,_=Me(re),g=Me(oe),{dt:f}=_,{dt:v}=g;return E(d,f),E(d,v),{Zt:_,te:g,ut(){D([f,v])}}})(t,i),l=((t,e,n)=>{let r=on;const{T:o}=e.lt,{B:i,H:s,N:l,G:c,q:u}=Oe(),d=!i&&(s.x||s.y),_={A:t,At:e,qt:d,Yt:()=>r,Et(t){r=O({},r,t)}},g=[Ye(_),Fe(_),en(_)],f=(e,n,r)=>{let{wt:i,Rt:s,ht:c=r||!1,Mt:u=r||!1,Tt:_=r||!1,kt:f=r||!1}=e||{};const w=i||(v?v.bt(r).wt:rn),y=s||(p?p.bt(r).Rt:rn),m=e=>[nn(t,e),r||void 0!==nn(n,e)],S=d||!l,x=S&&L(o),O=S&&A(o);b&&b(m),h(g,t=>{const{ht:e,Mt:n,Tt:o,kt:i}=t({wt:w,Rt:y,ht:c,Mt:u,Tt:_,kt:f},m,!!r)||{};c=e||c,u=n||u,_=o||_,f=i||f}),a(x)&&L(o,x),a(O)&&A(o,O),t.callbacks.onUpdated&&t.callbacks.onUpdated()},{jt:v,Vt:p,Pt:b,ut:w}=qe(_,f),y=(t,e)=>f({},t,e),m=y.bind(0,{},!0);return c(m),console.log(Oe()),{Lt:y,ee:()=>({ne:r.Qt}),ut(){w(),u(m),e.ut(),n.ut()}}})(o,i,s),c={options(t){if(t){const{C:e}=Ht(t,fe,o,!0);$(e)||(O(o,e),l.Lt(e))}return o},state:()=>l.ee(),update(t){l.Lt({},t)},destroy:()=>l.ut()};return c.update(!0),c};export{sn as default}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 8c41792..de2b607 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -4,19 +4,17 @@ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.OverlayScrollbars = factory()); })(this, (function () { 'use strict'; - var createCache = function createCache(update, options) { - var _ref = options || {}, - _initialValue = _ref._initialValue, - _equal = _ref._equal, - _alwaysUpdateValues = _ref._alwaysUpdateValues; - + function createCache(options, update) { + var _initialValue = options._initialValue, + _equal = options._equal, + _alwaysUpdateValues = options._alwaysUpdateValues; var _value = _initialValue; var _previous; - var cacheUpdate = function cacheUpdate(force, context) { + var cacheUpdateContextual = function cacheUpdateContextual(newValue, force) { var curr = _value; - var newVal = update ? update(context, _value, _previous) : context; + var newVal = newValue; var changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal); if (changed || _alwaysUpdateValues) { @@ -27,10 +25,16 @@ return [_value, changed, _previous]; }; - return [cacheUpdate, function (force) { + var cacheUpdateIsolated = function cacheUpdateIsolated(force) { + return cacheUpdateContextual(update(_value, _previous), force); + }; + + var getCurrentCache = function getCurrentCache(force) { return [_value, !!force, _previous]; - }]; - }; + }; + + return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache]; + } var ElementNodeType = Node.ELEMENT_NODE; var _Object$prototype = Object.prototype, @@ -110,7 +114,7 @@ return source; } var indexOf = function indexOf(arr, item, fromIndex) { - return arr.indexOf(item, fromIndex); + return isArray(arr) ? arr.indexOf(item, fromIndex) : -1; }; var push = function push(array, items, arrayIsSingleItem) { !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items) : array.push(items); @@ -128,7 +132,7 @@ return result; }; var isEmptyArray = function isEmptyArray(array) { - return array && array.length === 0; + return !!array && array.length === 0; }; var runEach = function runEach(arr, p1) { var runFn = function runFn(fn) { @@ -529,8 +533,6 @@ }); }; - var setT = window.setTimeout; - var clearTimeouts = function clearTimeouts(id) { id && window.clearTimeout(id); id && cAF(id); @@ -542,9 +544,13 @@ var maxTimeoutId; var prevArguments; var latestArguments; - var _timeout = options._timeout, - _maxDelay = options._maxDelay, - _mergeParams = options._mergeParams; + + var _ref = options || {}, + _timeout = _ref._timeout, + _maxDelay = _ref._maxDelay, + _mergeParams = _ref._mergeParams; + + var setT = window.setTimeout; var invokeFunctionToDebounce = function invokeFunctionToDebounce(args) { clearTimeouts(timeoutId); @@ -564,7 +570,7 @@ }; var debouncedFn = function debouncedFn() { - var args = arguments; + var args = from(arguments); var finalTimeout = isFunction(_timeout) ? _timeout() : _timeout; var hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0; @@ -575,11 +581,6 @@ var mergeParamsResult = mergeParms(args); var invokedArgs = mergeParamsResult || args; var boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs); - - if (!mergeParamsResult) { - invokeFunctionToDebounce(prevArguments || args); - } - clearTimeouts(timeoutId); timeoutId = setTimeoutFn(boundInvoke, finalTimeout); @@ -618,12 +619,12 @@ var setCSSVal = function setCSSVal(elm, prop, val) { try { if (elm) { - var _style = elm.style; + var elmStyle = elm.style; - if (!isUndefined(_style[prop])) { - _style[prop] = adaptCSSVal(prop, val); + if (!isUndefined(elmStyle[prop])) { + elmStyle[prop] = adaptCSSVal(prop, val); } else { - _style.setProperty(prop, val); + elmStyle.setProperty(prop, val); } } } catch (e) {} @@ -1288,7 +1289,7 @@ var listenerElement = sizeObserver.firstChild; var getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver); - var _createCache = createCache(0, { + var _createCache = createCache({ _initialValue: undefined, _alwaysUpdateValues: true, _equal: function _equal(currVal, newVal) { @@ -1305,7 +1306,7 @@ var doDirectionScroll = true; if (isResizeObserverCall) { - var _updateResizeObserver = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect), + var _updateResizeObserver = updateResizeObserverContentRectCache(sizeChangedContext.pop().contentRect), currRContentRect = _updateResizeObserver[0], prevContentRect = _updateResizeObserver[2]; @@ -1402,9 +1403,9 @@ } if (observeDirectionChange) { - directionIsRTLCache = createCache(getIsDirectionRTL, { + directionIsRTLCache = createCache({ _initialValue: !getIsDirectionRTL() - }); + }, getIsDirectionRTL); var _directionIsRTLCache = directionIsRTLCache, updateDirectionIsRTLCache = _directionIsRTLCache[0]; push(offListeners, on(sizeObserver, scrollEventName, function (event) { @@ -1449,13 +1450,15 @@ }; }; + var isHeightIntrinsic = function isHeightIntrinsic(ioEntryOrSize) { + return ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0; + }; + var createTrinsicObserver = function createTrinsicObserver(target, onTrinsicChangedCallback) { var trinsicObserver = createDiv(classNameTrinsicObserver); var offListeners = []; - var _createCache = createCache(function (ioEntryOrSize) { - return ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0; - }, { + var _createCache = createCache({ _initialValue: false }), updateHeightIntrinsicCache = _createCache[0], @@ -1463,7 +1466,7 @@ var triggerOnTrinsicChangedCallback = function triggerOnTrinsicChangedCallback(updateValue) { if (updateValue) { - var heightIntrinsic = updateHeightIntrinsicCache(0, updateValue); + var heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue)); var heightIntrinsicChanged = heightIntrinsic[1]; if (heightIntrinsicChanged) { @@ -1889,10 +1892,10 @@ _padding = _structureSetup$_targ._padding, _viewport = _structureSetup$_targ._viewport; - var _createCache = createCache(topRightBottomLeft.bind(0, _host, 'padding'), { + var _createCache = createCache({ _equal: equalTRBL, _initialValue: topRightBottomLeft() - }), + }, topRightBottomLeft.bind(0, _host, 'padding', '')), updatePaddingCache = _createCache[0], currentPaddingCache = _createCache[1]; @@ -2009,6 +2012,13 @@ }; }; + var getOverflowAmount = function getOverflowAmount(viewportScrollSize, viewportClientSize, viewportSizeFraction) { + return { + w: max(0, round(max(0, viewportScrollSize.w - viewportClientSize.w) - (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.w)))), + h: max(0, round(max(0, viewportScrollSize.h - viewportClientSize.h) - (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.h)))) + }; + }; + var createOverflowLifecycle = function createOverflowLifecycle(lifecycleHub) { var _structureSetup = lifecycleHub._structureSetup, _doViewportArrange = lifecycleHub._doViewportArrange, @@ -2019,23 +2029,15 @@ _viewport = _structureSetup$_targ._viewport, _viewportArrange = _structureSetup$_targ._viewportArrange; - var _createCache = createCache(sizeFraction.bind(0, _viewport), whCacheOptions), + var _createCache = createCache(whCacheOptions, sizeFraction.bind(0, _viewport)), updateViewportSizeFraction = _createCache[0], getCurrentViewportSizeFraction = _createCache[1]; - var _createCache2 = createCache(scrollSize.bind(0, _viewport), whCacheOptions), + var _createCache2 = createCache(whCacheOptions, scrollSize.bind(0, _viewport)), updateViewportScrollSizeCache = _createCache2[0], getCurrentViewportScrollSizeCache = _createCache2[1]; - var _createCache3 = createCache(function (_ref) { - var _viewportScrollSize = _ref._viewportScrollSize, - _viewportClientSize = _ref._viewportClientSize, - _viewportSizeFraction = _ref._viewportSizeFraction; - return { - w: max(0, round(max(0, _viewportScrollSize.w - _viewportClientSize.w) - (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.w)))), - h: max(0, round(max(0, _viewportScrollSize.h - _viewportClientSize.h) - (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.h)))) - }; - }, whCacheOptions), + var _createCache3 = createCache(whCacheOptions), updateOverflowAmountCache = _createCache3[0], getCurrentOverflowAmountCache = _createCache3[1]; @@ -2081,9 +2083,13 @@ x: styleObj.overflowX === 'scroll', y: styleObj.overflowY === 'scroll' }; + var nonScrollbarStylingHideOffset = { + x: overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x, + y: overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y + }; var scrollbarsHideOffset = { - x: scroll.x && !_nativeScrollbarStyling ? overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x : 0, - y: scroll.y && !_nativeScrollbarStyling ? overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y : 0 + x: scroll.x && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.x : 0, + y: scroll.y && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.y : 0 }; return { _overflowScroll: scroll, @@ -2289,41 +2295,37 @@ _redoViewportArrange = _undoViewportArrange._redoViewportArrange, undoViewportArrangeOverflowState = _undoViewportArrange._viewportOverflowState; - var _viewportSizeFraction3 = viewportSizeFractionCache = updateViewportSizeFraction(force), - _viewportSizeFraction2 = _viewportSizeFraction3[0], - viewportSizeFractionCahnged = _viewportSizeFraction3[1]; + var _viewportSizeFraction2 = viewportSizeFractionCache = updateViewportSizeFraction(force), + _viewportSizeFraction = _viewportSizeFraction2[0], + viewportSizeFractionCahnged = _viewportSizeFraction2[1]; var _viewportScrollSizeCa = viewportScrollSizeCache = updateViewportScrollSizeCache(force), - _viewportScrollSize2 = _viewportScrollSizeCa[0], + _viewportScrollSize = _viewportScrollSizeCa[0], _viewportScrollSizeChanged = _viewportScrollSizeCa[1]; var viewportContentSize = clientSize(_viewport); - var arrangedViewportScrollSize = _viewportScrollSize2; + var arrangedViewportScrollSize = _viewportScrollSize; var arrangedViewportClientSize = viewportContentSize; _redoViewportArrange(); - if ((_viewportScrollSizeChanged || viewportSizeFractionCahnged || showNativeOverlaidScrollbarsChanged) && undoViewportArrangeOverflowState && !showNativeOverlaidScrollbars && arrangeViewport(undoViewportArrangeOverflowState, _viewportScrollSize2, _viewportSizeFraction2, directionIsRTL)) { + if ((_viewportScrollSizeChanged || viewportSizeFractionCahnged || showNativeOverlaidScrollbarsChanged) && undoViewportArrangeOverflowState && !showNativeOverlaidScrollbars && arrangeViewport(undoViewportArrangeOverflowState, _viewportScrollSize, _viewportSizeFraction, directionIsRTL)) { arrangedViewportClientSize = clientSize(_viewport); arrangedViewportScrollSize = scrollSize(_viewport); } - overflowAmuntCache = updateOverflowAmountCache(force, { - _viewportSizeFraction: _viewportSizeFraction2, - _viewportScrollSize: { - w: max(_viewportScrollSize2.w, arrangedViewportScrollSize.w), - h: max(_viewportScrollSize2.h, arrangedViewportScrollSize.h) - }, - _viewportClientSize: { - w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - _viewportScrollSize2.w), - h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - _viewportScrollSize2.h) - } - }); + overflowAmuntCache = updateOverflowAmountCache(getOverflowAmount({ + w: max(_viewportScrollSize.w, arrangedViewportScrollSize.w), + h: max(_viewportScrollSize.h, arrangedViewportScrollSize.h) + }, { + w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - _viewportScrollSize.w), + h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - _viewportScrollSize.h) + }, _viewportSizeFraction), force); } - var _viewportSizeFraction4 = viewportSizeFractionCache, - viewportSizeFraction = _viewportSizeFraction4[0], - viewportSizeFractionChanged = _viewportSizeFraction4[1]; + var _viewportSizeFraction3 = viewportSizeFractionCache, + viewportSizeFraction = _viewportSizeFraction3[0], + viewportSizeFractionChanged = _viewportSizeFraction3[1]; var _viewportScrollSizeCa2 = viewportScrollSizeCache, viewportScrollSize = _viewportScrollSizeCa2[0], viewportScrollSizeChanged = _viewportScrollSizeCa2[1]; @@ -2490,10 +2492,10 @@ destroyObservers = _lifecycleHubOservers._destroy; var update = function update(changedOptions, force) { - return updateLifecycles(null, changedOptions, force); + return updateLifecycles({}, changedOptions, force); }; - var envUpdateListener = update.bind(null, null, true); + var envUpdateListener = update.bind(0, {}, true); addEnvironmentListener(envUpdateListener); console.log(getEnvironment()); return { @@ -2541,7 +2543,7 @@ return lifecycleHub._state(); }, update: function update(force) { - lifecycleHub._update(null, force); + lifecycleHub._update({}, force); }, destroy: function destroy() { return lifecycleHub._destroy(); diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index c44a1c7..b82345a 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/setups/scrollbarsSetup.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHubObservers.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export type CacheValues = [\r\n T, // value\r\n boolean, // changed\r\n T | undefined // previous\r\n];\r\n\r\nexport type Cache = [\r\n CacheUpdate,\r\n (force?: boolean) => CacheValues // getCurrent\r\n];\r\n\r\nexport interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: T;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\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 Ctx\r\n ? (context?: Ctx, current?: Value, previous?: Value) => Value\r\n : Ctx extends Value\r\n ? ((context: Ctx, current?: Value, previous?: Value) => Value) | 0\r\n : (context: Ctx, current?: Value, previous?: Value) => Value;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (\r\n update: UpdateCachePropFunction,\r\n options: CacheOptions\r\n): Cache => {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options || {};\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: Ctx) => {\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 [_value, changed, _previous];\r\n }) as CacheUpdate;\r\n\r\n return [\r\n cacheUpdate,\r\n (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\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: any[]) => any {\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 it, or and empty string 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 => {\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 return !(result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined));\r\n });\r\n\r\n return (cssCache[name] = 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 without it, or an empty string 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 => {\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 return (cssCache[name] = 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, isFunction } from 'support/utils/types';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst setT = window.setTimeout;\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\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 options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (curr: Parameters): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n const args: Parameters = arguments as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout! > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n if (!mergeParamsResult) {\r\n invokeFunctionToDebounce(prevArguments || args);\r\n }\r\n\r\n clearTimeouts(timeoutId);\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\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 the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\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 ? Object.assign.bind() : 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 }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString, isNumber, isBoolean } 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 isPrimitiveArr = isArray(optionsValue) && !optionsValue.some((val) => !isNumber(val) && !isString(val) && !isBoolean(val));\r\n const doStringifyComparison = isPrimitiveArr || 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\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\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 attributes: string[] | null;\r\n debounce: number | [number, number] | null;\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 callbacks: {\r\n onUpdated: (() => any) | null;\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 arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\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']], arrayNullValues], // array of tuples || null\r\n attributes: [null, arrayNullValues],\r\n debounce: [\r\n [0, 33],\r\n [oTypes.number, oTypes.array, oTypes.null],\r\n ], // number || number array || null\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 callbacks: {\r\n onUpdated: [null, [oTypes.function, oTypes.null]],\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 cssProperty,\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\nimport { OSTargetElement } from 'typings';\r\n\r\ntype StructureInitializationElementFn = ((target: OSTargetElement) => HTMLElement | T) | T;\r\n\r\ntype ScrollbarsInitializationElementFn = ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T) | T;\r\n\r\n/**\r\n * A Static element is an element which MUST be generated.\r\n * If null (or the returned result is null), the initialization function is generatig the element, otherwise\r\n * the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationStaticElement = StructureInitializationElementFn;\r\n\r\n/**\r\n * A Dynamic element is an element which CAN be generated.\r\n * If null (or the returned result is null), then the default behavior is used.\r\n * If boolean (or the returned result is boolean), the generation of the element is forced (or not).\r\n * If the function returns and element, the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationDynamicElement = StructureInitializationElementFn;\r\n\r\nexport interface StructureInitializationStrategy {\r\n _host: StructureInitializationStaticElement;\r\n _viewport: StructureInitializationStaticElement;\r\n _padding: StructureInitializationDynamicElement;\r\n _content: StructureInitializationDynamicElement;\r\n}\r\n\r\nexport interface ScrollbarsInitializationStrategy {\r\n _scrollbarsSlot: ScrollbarsInitializationElementFn;\r\n}\r\n\r\nexport interface InitializationStrategy extends StructureInitializationStrategy, ScrollbarsInitializationStrategy {}\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, cssProperty('scrollbar-width')) === 'none' ||\r\n 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\n// init function decides for all values\r\nconst getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _host: null,\r\n _viewport: null,\r\n _padding: null,\r\n _content: null,\r\n _scrollbarsSlot: null,\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 = getNativeScrollbarStyling(envElm);\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 indexOf,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n isFunction,\r\n keys,\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 {\r\n getEnvironment,\r\n StructureInitializationStaticElement,\r\n StructureInitializationDynamicElement,\r\n StructureInitializationStrategy,\r\n} from 'environment';\r\nimport { OSTarget, OSTargetElement, StructureInitialization } 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 _targetIsElm: boolean;\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;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\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\nlet contentArrangeCounter = 0;\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\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n /* istanbul ignore next */\r\n const create = !_cssCustomProperties && !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst staticCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | undefined,\r\n strategy: StructureInitializationStaticElement,\r\n elementClass: string\r\n): HTMLElement => {\r\n const result = initializationValue ? initializationValue : isFunction(strategy) ? strategy(target) : (strategy as null);\r\n return result ? result : createDiv(elementClass);\r\n};\r\n\r\nconst dynamicCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | boolean | undefined,\r\n strategy: StructureInitializationDynamicElement,\r\n elementClass: string,\r\n defaultValue: boolean\r\n): HTMLElement | false => {\r\n const takeInitializationValue = isBoolean(initializationValue) || initializationValue;\r\n const result = takeInitializationValue ? (initializationValue as boolean | HTMLElement) : isFunction(strategy) ? strategy(target) : strategy;\r\n\r\n if (result === null) {\r\n return defaultValue ? createDiv(elementClass) : false;\r\n }\r\n\r\n return result === true ? createDiv(elementClass) : result;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | StructureInitialization): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy() as StructureInitializationStrategy;\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm ? (target as OSTargetElement) : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument: HTMLDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const evaluatedTargetObj: PreparedOSTargetObject = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticCreationFromStrategy(targetElement, targetStructureInitialization.host, hostInitializationStrategy, classNameHost)\r\n : (targetElement as HTMLElement),\r\n _viewport: staticCreationFromStrategy(targetElement, targetStructureInitialization.viewport, viewportInitializationStrategy, classNameViewport),\r\n _padding: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.padding,\r\n paddingInitializationStrategy,\r\n classNamePadding,\r\n !_nativeScrollbarStyling // default value for padding\r\n ),\r\n _content: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.content,\r\n contentInitializationStrategy,\r\n classNameContent,\r\n false // default value for content\r\n ),\r\n _viewportArrange: createUniqueViewportArrangeElement(),\r\n };\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 _targetIsElm: targetIsElm,\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) => (elm ? indexOf(generatedElements, elm) > -1 : null);\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents([_content, _viewport, _padding, _host, _target].find((elm) => elementIsGenerated(elm) === false));\r\n const contentSlot = _content || _viewport;\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 appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\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 push(destroyFns, () => {\r\n if (targetIsElm) {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n } else {\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\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 if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return {\r\n _targetObj: evaluatedTargetObj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { appendChildren, createDiv, removeElements, isFunction } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment, ScrollbarsInitializationStrategy } from 'environment';\r\nimport { OSTarget, ScrollbarsInitialization } from 'typings';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetup {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n _destroy: () => void;\r\n}\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetup = (target: OSTarget | ScrollbarsInitialization, structureSetup: StructureSetup): ScrollbarsSetup => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } = _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _targetObj, _targetCtx } = structureSetup;\r\n const { _target, _host, _viewport } = _targetObj;\r\n const initializationScrollbarSlot = !_targetCtx._targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot)\r\n ? initializationScrollbarSlot(_target, _host, _viewport)\r\n : initializationScrollbarSlot;\r\n const evaluatedScrollbarSlot =\r\n initializationScrollbarSlotResult ||\r\n (isFunction(environmentScrollbarSlot) ? environmentScrollbarSlot(_target, _host, _viewport) : environmentScrollbarSlot) ||\r\n _host;\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n _destroy() {\r\n removeElements([horizontalScrollbar, verticalScrollbar]);\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 isObject,\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 interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\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\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (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: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache<\r\n DOMRectReadOnly | undefined,\r\n DOMRectReadOnly\r\n >(0, {\r\n _initialValue: undefined,\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 = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = 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 (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n 0,\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : 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, () => {\r\n resizeObserverInstance.disconnect();\r\n });\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(observerElementChildrenRoot);\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 = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\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(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\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(getIsDirectionRTL, {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n });\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\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[1](force) // get current cache values\r\n : [false, false, false],\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 [updateHeightIntrinsicCache, 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 const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, updateValue);\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\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 triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\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 { each, noop, debounce, indexOf, isString, MutationObserverConstructor, isEmptyArray, on, attr, is, find, push } from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: 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\ntype ContentChangeArrayItem = [string?, string?] | 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\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 interface DOMObserver {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\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, callback: (...args: any) => any, eventContentChange?: DOMObserverEventContentChange) => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const _destroy = () => {\r\n destroyed = true;\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.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\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.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 entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n _updateElements();\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\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 { _destroy: destroyEventContentChange, _updateElements: updateEventContentChangeElements } = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\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)(false);\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 _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import {\r\n CacheValues,\r\n diffClass,\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecycles/lifecycleHub';\r\n\r\n// const hostSelector = `.${classNameHost}`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\n\r\n// const viewportSelector = `.${classNameViewport}`;\r\n// const contentSelector = `.${classNameContent}`;\r\nconst ignorePrefix = 'os-';\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nconst ignoreTargetChange = (\r\n target: Node,\r\n attrName: string,\r\n oldValue: string | null,\r\n newValue: string | null\r\n) => {\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\n\r\nexport const lifecycleHubOservers = (\r\n instance: LifecycleHub,\r\n updateLifecycles: (updateHints?: Partial | null) => unknown\r\n) => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const { _structureSetup } = instance;\r\n const { _targetObj, _targetCtx } = _structureSetup;\r\n const { _host, _viewport, _content } = _targetObj;\r\n const { _isTextarea } = _targetCtx;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(\r\n updateLifecycles as (updateHints: Partial) => any,\r\n {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const {\r\n _sizeChanged: prevSizeChanged,\r\n _hostMutation: prevHostMutation,\r\n _contentMutation: prevContentMutation,\r\n } = prev[0];\r\n const {\r\n _sizeChanged: currSizeChanged,\r\n _hostMutation: currvHostMutation,\r\n _contentMutation: currContentMutation,\r\n } = curr[0];\r\n const merged: [Partial] = [\r\n {\r\n _sizeChanged: prevSizeChanged || currSizeChanged,\r\n _hostMutation: prevHostMutation || currvHostMutation,\r\n _contentMutation: prevContentMutation || currContentMutation,\r\n },\r\n ];\r\n\r\n return merged;\r\n },\r\n }\r\n );\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? updateLifecycles\r\n : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _sizeChanged,\r\n _directionIsRTL: _directionIsRTLCache,\r\n });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? updateLifecycles\r\n : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const trinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n\r\n const updateOptions = (checkOption: LifecycleCheckOption) => {\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver._update();\r\n contentMutationObserver._destroy();\r\n }\r\n contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n // _nestedTargetSelector: hostSelector,\r\n /*\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 */\r\n });\r\n }\r\n\r\n if (debounceChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n };\r\n\r\n updateViewportAttrsFromHost();\r\n\r\n return {\r\n _trinsicObserver: trinsicObserver,\r\n _sizeObserver: sizeObserver,\r\n _updateObserverOptions: updateOptions,\r\n _destroy() {\r\n contentMutationObserver && contentMutationObserver._destroy();\r\n trinsicObserver && trinsicObserver._destroy();\r\n sizeObserver._destroy();\r\n hostMutationObserver._destroy();\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 [heightIntrinsic, 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, TRBL } 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 [updatePaddingCache, currentPaddingCache] = createCache(\r\n topRightBottomLeft.bind(0, _host, 'padding'),\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n }\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL, _contentMutation } = updateHints;\r\n const [directionIsRTL, directionChanged] = _directionIsRTL;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute 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 marginRight: paddingRelative && !directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: paddingRelative ? (directionIsRTL ? -padding!.r : 'auto') : 0,\r\n left: paddingRelative ? (directionIsRTL ? 'auto' : -padding!.l) : 0,\r\n width: 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 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 OverflowAmountCacheContext {\r\n _viewportScrollSize: WH;\r\n _viewportClientSize: WH;\r\n _viewportSizeFraction: 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 { max, abs, round } = Math;\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst sizeFraction = (elm: HTMLElement): WH => {\r\n const viewportOffsetSize = offsetSize(elm);\r\n const viewportRect = getBoundingClientRect(elm);\r\n return {\r\n w: viewportRect.width - viewportOffsetSize.w,\r\n h: viewportRect.height - viewportOffsetSize.h,\r\n };\r\n};\r\nconst fractionalPixelRatioTollerance = () => (window.devicePixelRatio % 1 === 0 ? 0 : 1);\r\nconst setAxisOverflowStyle = (\r\n horizontal: boolean,\r\n overflowAmount: number,\r\n behavior: OverflowBehavior,\r\n styleObj: StyleObject\r\n) => {\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 const hasOverflow = overflowAmount > 0;\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && hasOverflow) {\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\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 {\r\n _structureSetup,\r\n _doViewportArrange,\r\n _getLifecycleCommunication,\r\n _setLifecycleCommunication,\r\n } = lifecycleHub;\r\n\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n\r\n const [updateViewportSizeFraction, getCurrentViewportSizeFraction] = createCache>(\r\n sizeFraction.bind(0, _viewport),\r\n whCacheOptions\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(scrollSize.bind(0, _viewport), whCacheOptions);\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache<\r\n WH,\r\n OverflowAmountCacheContext\r\n >(\r\n ({ _viewportScrollSize, _viewportClientSize, _viewportSizeFraction }) => ({\r\n w: max(\r\n 0,\r\n round(\r\n max(0, _viewportScrollSize.w - _viewportClientSize.w) -\r\n (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.w))\r\n )\r\n ),\r\n h: max(\r\n 0,\r\n round(\r\n max(0, _viewportScrollSize.h - _viewportClientSize.h) -\r\n (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.h))\r\n )\r\n ),\r\n }),\r\n whCacheOptions\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 = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const {\r\n _absolute: paddingAbsolute,\r\n _padding: padding,\r\n } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostSizeFraction = sizeFraction(_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 isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const fractionalClientHeight =\r\n hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n fractionalClientHeight +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n 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 = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow\r\n ? style(_viewport, ['overflowX', 'overflowY'])\r\n : 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:\r\n scroll.x && !_nativeScrollbarStyling\r\n ? overlaidX\r\n ? arrangeHideOffset\r\n : _nativeScrollbarSize.x\r\n : 0,\r\n y:\r\n scroll.y && !_nativeScrollbarStyling\r\n ? overlaidY\r\n ? arrangeHideOffset\r\n : _nativeScrollbarSize.y\r\n : 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 { _visible: xVisible, _behavior: xVisibleBehavior } = setAxisOverflowStyle(\r\n true,\r\n overflowAmount!.w,\r\n overflow.x,\r\n viewportStyleObj\r\n );\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setAxisOverflowStyle(\r\n false,\r\n overflowAmount!.h,\r\n overflow.y,\r\n viewportStyleObj\r\n );\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 viewportScrollSize 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 = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n viewportSizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\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\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth =\r\n viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);\r\n const fractionalContenHeight =\r\n viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\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(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\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<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': 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\r\n ? 'paddingLeft'\r\n : '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.width = `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] =\r\n 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 =\r\n 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('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(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n _doViewportArrange,\r\n prevStyle\r\n );\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 {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const [heightIntrinsic, heightIntrinsicChanged] = _heightIntrinsic;\r\n const [directionIsRTL, directionChanged] = _directionIsRTL;\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] = checkOption<\r\n boolean\r\n >('nativeScrollbarsOverlaid.show');\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n heightIntrinsicChanged);\r\n\r\n let viewportSizeFractionCache: CacheValues> = getCurrentViewportSizeFraction(force);\r\n let viewportScrollSizeCache: CacheValues> = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(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 (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged\r\n ) {\r\n const {\r\n _redoViewportArrange,\r\n _viewportOverflowState: undoViewportArrangeOverflowState,\r\n } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL!,\r\n preMeasureViewportOverflowState\r\n );\r\n const [\r\n viewportSizeFraction,\r\n viewportSizeFractionCahnged,\r\n ] = (viewportSizeFractionCache = updateViewportSizeFraction(force));\r\n const [\r\n viewportScrollSize,\r\n viewportScrollSizeChanged,\r\n ] = (viewportScrollSizeCache = updateViewportScrollSizeCache(force));\r\n const viewportContentSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize!;\r\n let arrangedViewportClientSize = viewportContentSize;\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 (viewportScrollSizeChanged ||\r\n viewportSizeFractionCahnged ||\r\n showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize!,\r\n viewportSizeFraction!,\r\n directionIsRTL!\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _viewportSizeFraction: viewportSizeFraction!,\r\n _viewportScrollSize: {\r\n w: max(viewportScrollSize!.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize!.h, arrangedViewportScrollSize.h),\r\n },\r\n _viewportClientSize: {\r\n w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize!.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const [viewportSizeFraction, viewportSizeFractionChanged] = viewportSizeFractionCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [overflow, overflowChanged] = checkOption('overflow');\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n viewportSizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n overflowAmount!,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize!,\r\n viewportSizeFraction!,\r\n directionIsRTL!\r\n );\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: 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\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 XY,\r\n WH,\r\n TRBL,\r\n CacheValues,\r\n PartialOptions,\r\n each,\r\n hasOwnProperty,\r\n isNumber,\r\n scrollLeft,\r\n scrollTop,\r\n assignDeep,\r\n} from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { lifecycleHubOservers } from 'lifecycles/lifecycleHubObservers';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { StyleObject } from 'typings';\r\nimport { ScrollbarsSetup } from 'setups/scrollbarsSetup';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\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 type LifecycleOptionInfo = [T, boolean];\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 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\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nconst booleanCacheValuesFallback: CacheValues = [false, false, false];\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 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 = (\r\n options: OSOptions,\r\n structureSetup: StructureSetup,\r\n scrollbarsSetup: ScrollbarsSetup\r\n): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _viewport } = 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 =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\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 lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n const lifecycles: Lifecycle[] = [\r\n createTrinsicLifecycle(instance),\r\n createPaddingLifecycle(instance),\r\n createOverflowLifecycle(instance),\r\n ];\r\n\r\n const updateLifecycles = (\r\n updateHints?: Partial | null,\r\n changedOptions?: Partial | null,\r\n force?: boolean\r\n ) => {\r\n let {\r\n // eslint-disable-next-line prefer-const\r\n _directionIsRTL,\r\n // eslint-disable-next-line prefer-const\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\r\n const finalDirectionIsRTL =\r\n _directionIsRTL ||\r\n (_sizeObserver\r\n ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL\r\n : booleanCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic ||\r\n (_trinsicObserver\r\n ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic\r\n : booleanCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => [\r\n getPropByPath(options, path),\r\n 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 // place before updating lifecycles because of possible flushing of debounce\r\n if (_updateObserverOptions) {\r\n _updateObserverOptions(checkOption);\r\n }\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 if (options.callbacks.onUpdated) {\r\n options.callbacks.onUpdated();\r\n }\r\n };\r\n const {\r\n _sizeObserver,\r\n _trinsicObserver,\r\n _updateObserverOptions,\r\n _destroy: destroyObservers,\r\n } = lifecycleHubOservers(instance, updateLifecycles);\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) =>\r\n updateLifecycles(null, changedOptions, force);\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 destroyObservers();\r\n removeEnvironmentListener(envUpdateListener);\r\n\r\n structureSetup._destroy();\r\n scrollbarsSetup._destroy();\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSInitializationObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createScrollbarsSetup, ScrollbarsSetup } from 'setups/scrollbarsSetup';\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 (\r\n target: OSTarget | OSInitializationObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n ): 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 destroy(): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSInitializationObject,\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)\r\n ._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const scrollbarsSetup: ScrollbarsSetup = createScrollbarsSetup(target, structureSetup);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup, scrollbarsSetup);\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(\r\n newOptions,\r\n optionsTemplate,\r\n currentOptions,\r\n true\r\n );\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 destroy: () => lifecycleHub._destroy(),\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","update","options","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","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","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","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","setT","setTimeout","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","invokeFunctionToDebounce","args","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","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","exports","__esModule","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","isPrimitiveArr","some","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","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","numberAllowedValues","oTypes","number","arrayNullValues","null","stringArrayNullAllowedValues","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","attributes","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","callbacks","onUpdated","function","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","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","_host","_viewport","_padding","_content","_scrollbarsSlot","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","contentArrangeCounter","unwrap","createUniqueViewportArrangeElement","create","staticCreationFromStrategy","initializationValue","strategy","elementClass","dynamicCreationFromStrategy","defaultValue","takeInitializationValue","createStructureSetup","hostInitializationStrategy","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","evaluatedTargetObj","_target","host","viewport","padding","content","_viewportArrange","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","_targetObj","_targetCtx","_destroy","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetup","structureSetup","environmentScrollbarSlot","initializationScrollbarSlot","scrollbarsSlot","initializationScrollbarSlotResult","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","height","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_sizeChanged","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","directionIsRTL","directionIsRTLChanged","_getCurrentCacheValues","_directionIsRTL","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","ioEntryOrSize","isIntersecting","intersectionRatio","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","heightIntrinsic","heightIntrinsicChanged","intersectionObserverInstance","entries","root","onSizeChanged","newSize","_heightIntrinsic","createEventContentChange","eventContentChange","map","destroyed","_updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","set","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","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","attributeOldValue","attributeFilter","subtree","childList","characterData","_update","takeRecords","ignorePrefix","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","newValue","diff","addedOrRemovedClass","lifecycleHubOservers","instance","updateLifecycles","debounceTimeout","debounceMaxDelay","contentMutationObserver","_structureSetup","contentMutationObserverAttr","updateLifecyclesWithDebouncedAdaptiveUpdateHints","prev","prevSizeChanged","prevHostMutation","_hostMutation","prevContentMutation","_contentMutation","currSizeChanged","currvHostMutation","currContentMutation","merged","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","updateFn","onContentMutation","contentChangedTroughEvent","onHostMutation","hostMutationObserver","updateOptions","checkOption","elementEventsChanged","attributesChanged","debounceValue","debounceChanged","updateContentMutationObserver","timeout","maxWait","_trinsicObserver","_sizeObserver","_updateObserverOptions","createTrinsicLifecycle","lifecycleHub","updateHints","display","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","paddingChanged","directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","max","overlaidScrollbarsHideOffset","whCacheOptions","sizeFraction","viewportOffsetSize","viewportRect","fractionalPixelRatioTollerance","setAxisOverflowStyle","horizontal","overflowAmount","behavior","styleObj","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","hasOverflow","_visible","_behavior","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateViewportSizeFraction","getCurrentViewportSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","_viewportScrollSize","_viewportClientSize","_viewportSizeFraction","updateOverflowAmountCache","getCurrentOverflowAmountCache","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostSizeFraction","hostClientSize","isContentBox","fractionalClientHeight","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","viewportScrollSize","viewportSizeFraction","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","viewportSizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","viewportSizeFractionCahnged","viewportScrollSizeChanged","viewportContentSize","arrangedViewportScrollSize","arrangedViewportClientSize","viewportSizeFractionChanged","overflowAmountChanged","overflowChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","getPropByPath","path","o","booleanCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","scrollbarsSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","newLifecycleCommunication","lifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","destroyObservers","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state","destroy"],"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/setups/scrollbarsSetup.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHubObservers.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [\r\n T, // value\r\n boolean, // changed\r\n T? // previous\r\n];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\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 [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\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 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\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: any[]) => any {\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)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : 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\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : 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\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString, isArray } 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(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): 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: T[], item: T, fromIndex?: number): number =>\r\n isArray(arr) ? arr.indexOf(item, fromIndex) : -1;\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: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : 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: T[] = [];\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: any[] | null | undefined): boolean =>\r\n !!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 =>\r\n 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(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\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): T & U & V & W & X;\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): 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(\r\n elm: HTMLElement | null,\r\n attrName: string,\r\n value?: string\r\n): 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 =>\r\n 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 = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): 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 = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | null | undefined,\r\n insertedElms: NodeCollection\r\n): 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 = (\r\n node: Node | null | undefined,\r\n insertedNodes: NodeCollection\r\n): 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 = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\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 it, or and empty string 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 => {\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\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = 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 without it, or an empty string 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 => {\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 // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = 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(\r\n 'IntersectionObserver'\r\n);\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 = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\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 =>\r\n !!(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 =>\r\n 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 = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): 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 =>\r\n (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, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\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 options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\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 // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 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 =>\r\n !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\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.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(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [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 the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): 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 ? Object.assign.bind() : 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 }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport {\r\n type,\r\n isArray,\r\n isUndefined,\r\n isPlainObject,\r\n isString,\r\n isNumber,\r\n isBoolean,\r\n} 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\n OptionsTemplateTypeMap,\r\n T\r\n>;\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 = [\r\n 'boolean',\r\n 'number',\r\n 'string',\r\n 'array',\r\n 'object',\r\n 'function',\r\n 'null',\r\n].reduce((result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n}, {} as OptionsTemplateTypesDictionary);\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 =\r\n 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(\r\n optionsValue,\r\n templateValue as T,\r\n optionsDiffValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\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 isPrimitiveArr =\r\n isArray(optionsValue) &&\r\n !optionsValue.some((val) => !isNumber(val) && !isString(val) && !isBoolean(val));\r\n const doStringifyComparison = isPrimitiveArr || isPlainObject(optionsValue);\r\n if (\r\n doStringifyComparison\r\n ? stringify(optionsValue) !== stringify(optionsDiffValue)\r\n : optionsValue !== optionsDiffValue\r\n ) {\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 }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\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 validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\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 = [\r\n T,\r\n OptionsTemplateValue\r\n];\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 = (\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): 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 =\r\n 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\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\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 attributes: string[] | null;\r\n debounce: number | [number, number] | null;\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 callbacks: {\r\n onUpdated: (() => any) | null;\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 arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\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']], arrayNullValues], // array of tuples || null\r\n attributes: [null, arrayNullValues],\r\n debounce: [\r\n [0, 33],\r\n [oTypes.number, oTypes.array, oTypes.null],\r\n ], // number || number array || null\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 callbacks: {\r\n onUpdated: [null, [oTypes.function, oTypes.null]],\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 cssProperty,\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\nimport { OSTargetElement } from 'typings';\r\n\r\ntype StructureInitializationElementFn = ((target: OSTargetElement) => HTMLElement | T) | T;\r\n\r\ntype ScrollbarsInitializationElementFn =\r\n | ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T)\r\n | T;\r\n\r\n/**\r\n * A Static element is an element which MUST be generated.\r\n * If null (or the returned result is null), the initialization function is generatig the element, otherwise\r\n * the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationStaticElement = StructureInitializationElementFn;\r\n\r\n/**\r\n * A Dynamic element is an element which CAN be generated.\r\n * If null (or the returned result is null), then the default behavior is used.\r\n * If boolean (or the returned result is boolean), the generation of the element is forced (or not).\r\n * If the function returns and element, the element returned by the function acts as the generated element.\r\n */\r\nexport type StructureInitializationDynamicElement = StructureInitializationElementFn<\r\n boolean | null\r\n>;\r\n\r\nexport interface StructureInitializationStrategy {\r\n _host: StructureInitializationStaticElement;\r\n _viewport: StructureInitializationStaticElement;\r\n _padding: StructureInitializationDynamicElement;\r\n _content: StructureInitializationDynamicElement;\r\n}\r\n\r\nexport interface ScrollbarsInitializationStrategy {\r\n _scrollbarsSlot: ScrollbarsInitializationElementFn;\r\n}\r\n\r\nexport interface InitializationStrategy\r\n extends StructureInitializationStrategy,\r\n ScrollbarsInitializationStrategy {}\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, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { 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\n// init function decides for all values\r\nconst getDefaultInitializationStrategy = (\r\n nativeScrollbarStyling: boolean\r\n): InitializationStrategy => ({\r\n _host: null,\r\n _viewport: null,\r\n _padding: null,\r\n _content: null,\r\n _scrollbarsSlot: null,\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 = getNativeScrollbarStyling(envElm);\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(\r\n body,\r\n envElm\r\n ));\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 indexOf,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n isFunction,\r\n keys,\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 {\r\n getEnvironment,\r\n StructureInitializationStaticElement,\r\n StructureInitializationDynamicElement,\r\n StructureInitializationStrategy,\r\n} from 'environment';\r\nimport { OSTarget, OSTargetElement, StructureInitialization } 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 _targetIsElm: boolean;\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;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\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\nlet contentArrangeCounter = 0;\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\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n /* istanbul ignore next */\r\n const create = !_cssCustomProperties && !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst staticCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | undefined,\r\n strategy: StructureInitializationStaticElement,\r\n elementClass: string\r\n): HTMLElement => {\r\n const result = initializationValue ? initializationValue : isFunction(strategy) ? strategy(target) : (strategy as null);\r\n return result ? result : createDiv(elementClass);\r\n};\r\n\r\nconst dynamicCreationFromStrategy = (\r\n target: OSTargetElement,\r\n initializationValue: HTMLElement | boolean | undefined,\r\n strategy: StructureInitializationDynamicElement,\r\n elementClass: string,\r\n defaultValue: boolean\r\n): HTMLElement | false => {\r\n const takeInitializationValue = isBoolean(initializationValue) || initializationValue;\r\n const result = takeInitializationValue ? (initializationValue as boolean | HTMLElement) : isFunction(strategy) ? strategy(target) : strategy;\r\n\r\n if (result === null) {\r\n return defaultValue ? createDiv(elementClass) : false;\r\n }\r\n\r\n return result === true ? createDiv(elementClass) : result;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | StructureInitialization): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy() as StructureInitializationStrategy;\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm ? (target as OSTargetElement) : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument: HTMLDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const evaluatedTargetObj: PreparedOSTargetObject = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticCreationFromStrategy(targetElement, targetStructureInitialization.host, hostInitializationStrategy, classNameHost)\r\n : (targetElement as HTMLElement),\r\n _viewport: staticCreationFromStrategy(targetElement, targetStructureInitialization.viewport, viewportInitializationStrategy, classNameViewport),\r\n _padding: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.padding,\r\n paddingInitializationStrategy,\r\n classNamePadding,\r\n !_nativeScrollbarStyling // default value for padding\r\n ),\r\n _content: dynamicCreationFromStrategy(\r\n targetElement,\r\n targetStructureInitialization.content,\r\n contentInitializationStrategy,\r\n classNameContent,\r\n false // default value for content\r\n ),\r\n _viewportArrange: createUniqueViewportArrangeElement(),\r\n };\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 _targetIsElm: targetIsElm,\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) => (elm ? indexOf(generatedElements, elm) > -1 : null);\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents([_content, _viewport, _padding, _host, _target].find((elm) => elementIsGenerated(elm) === false));\r\n const contentSlot = _content || _viewport;\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 appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\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 push(destroyFns, () => {\r\n if (targetIsElm) {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n } else {\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\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 if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return {\r\n _targetObj: evaluatedTargetObj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { appendChildren, createDiv, removeElements, isFunction } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment, ScrollbarsInitializationStrategy } from 'environment';\r\nimport { OSTarget, ScrollbarsInitialization } from 'typings';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetup {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n _destroy: () => void;\r\n}\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetup = (target: OSTarget | ScrollbarsInitialization, structureSetup: StructureSetup): ScrollbarsSetup => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } = _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _targetObj, _targetCtx } = structureSetup;\r\n const { _target, _host, _viewport } = _targetObj;\r\n const initializationScrollbarSlot = !_targetCtx._targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const initializationScrollbarSlotResult = isFunction(initializationScrollbarSlot)\r\n ? initializationScrollbarSlot(_target, _host, _viewport)\r\n : initializationScrollbarSlot;\r\n const evaluatedScrollbarSlot =\r\n initializationScrollbarSlotResult ||\r\n (isFunction(environmentScrollbarSlot) ? environmentScrollbarSlot(_target, _host, _viewport) : environmentScrollbarSlot) ||\r\n _host;\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n _destroy() {\r\n removeElements([horizontalScrollbar, verticalScrollbar]);\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 isObject,\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 interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\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\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (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: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\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 = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = 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 (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : 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, () => {\r\n resizeObserverInstance.disconnect();\r\n });\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(observerElementChildrenRoot);\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 = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\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(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\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(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\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[1](force) // get current cache values\r\n : [false, false, false],\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\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\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 [updateHeightIntrinsicCache, getCurrentHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\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 triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\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 attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: 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\ntype ContentChangeArrayItem = [string?, string?] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\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\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\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport interface DOMObserver {\r\n _destroy: () => void;\r\n _update: () => void;\r\n}\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 = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n) => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const _destroy = () => {\r\n destroyed = true;\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.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 entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n _updateElements();\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\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 } = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\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 =\r\n (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 =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n 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 =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n 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)\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)(false);\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 _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import {\r\n CacheValues,\r\n diffClass,\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecycles/lifecycleHub';\r\n\r\n// const hostSelector = `.${classNameHost}`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n// TODO: test _ignoreContentChange & _ignoreNestedTargetChange for content dom observer\r\n// TODO: test _ignoreTargetChange for target dom observer\r\n\r\n// const viewportSelector = `.${classNameViewport}`;\r\n// const contentSelector = `.${classNameContent}`;\r\nconst ignorePrefix = 'os-';\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nconst ignoreTargetChange = (\r\n target: Node,\r\n attrName: string,\r\n oldValue: string | null,\r\n newValue: string | null\r\n) => {\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\n\r\nexport const lifecycleHubOservers = (\r\n instance: LifecycleHub,\r\n updateLifecycles: (updateHints: Partial) => unknown\r\n) => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const { _structureSetup } = instance;\r\n const { _targetObj, _targetCtx } = _structureSetup;\r\n const { _host, _viewport, _content } = _targetObj;\r\n const { _isTextarea } = _targetCtx;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(updateLifecycles, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const {\r\n _sizeChanged: prevSizeChanged,\r\n _hostMutation: prevHostMutation,\r\n _contentMutation: prevContentMutation,\r\n } = prev[0];\r\n const {\r\n _sizeChanged: currSizeChanged,\r\n _hostMutation: currvHostMutation,\r\n _contentMutation: currContentMutation,\r\n } = curr[0];\r\n const merged: [Partial] = [\r\n {\r\n _sizeChanged: prevSizeChanged || currSizeChanged,\r\n _hostMutation: prevHostMutation || currvHostMutation,\r\n _contentMutation: prevContentMutation || currContentMutation,\r\n },\r\n ];\r\n\r\n return merged;\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? updateLifecycles\r\n : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _sizeChanged,\r\n _directionIsRTL: _directionIsRTLCache,\r\n });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? updateLifecycles\r\n : updateLifecyclesWithDebouncedAdaptiveUpdateHints;\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const trinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n _ignoreTargetChange: ignoreTargetChange,\r\n });\r\n\r\n const updateOptions = (checkOption: LifecycleCheckOption) => {\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver._update();\r\n contentMutationObserver._destroy();\r\n }\r\n contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _ignoreNestedTargetChange: ignoreTargetChange,\r\n // _nestedTargetSelector: hostSelector,\r\n /*\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 */\r\n });\r\n }\r\n\r\n if (debounceChanged) {\r\n updateLifecyclesWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n };\r\n\r\n updateViewportAttrsFromHost();\r\n\r\n return {\r\n _trinsicObserver: trinsicObserver,\r\n _sizeObserver: sizeObserver,\r\n _updateObserverOptions: updateOptions,\r\n _destroy() {\r\n contentMutationObserver && contentMutationObserver._destroy();\r\n trinsicObserver && trinsicObserver._destroy();\r\n sizeObserver._destroy();\r\n hostMutationObserver._destroy();\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 [heightIntrinsic, 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 [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL, _contentMutation } = updateHints;\r\n const [directionIsRTL, directionChanged] = _directionIsRTL;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute 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 marginRight: paddingRelative && !directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: 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 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 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 { max, abs, round } = Math;\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst sizeFraction = (elm: HTMLElement): WH => {\r\n const viewportOffsetSize = offsetSize(elm);\r\n const viewportRect = getBoundingClientRect(elm);\r\n return {\r\n w: viewportRect.width - viewportOffsetSize.w,\r\n h: viewportRect.height - viewportOffsetSize.h,\r\n };\r\n};\r\nconst fractionalPixelRatioTollerance = () => (window.devicePixelRatio % 1 === 0 ? 0 : 1);\r\nconst setAxisOverflowStyle = (\r\n horizontal: boolean,\r\n overflowAmount: number,\r\n behavior: OverflowBehavior,\r\n styleObj: StyleObject\r\n) => {\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 const hasOverflow = overflowAmount > 0;\r\n\r\n if (behaviorIsVisible) {\r\n styleObj[overflowKey] = 'visible';\r\n }\r\n if (behaviorIsScroll && hasOverflow) {\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\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n viewportSizeFraction: WH\r\n) => ({\r\n w: max(\r\n 0,\r\n round(\r\n max(0, viewportScrollSize.w - viewportClientSize.w) -\r\n (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.w))\r\n )\r\n ),\r\n h: max(\r\n 0,\r\n round(\r\n max(0, viewportScrollSize.h - viewportClientSize.h) -\r\n (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.h))\r\n )\r\n ),\r\n});\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 {\r\n _structureSetup,\r\n _doViewportArrange,\r\n _getLifecycleCommunication,\r\n _setLifecycleCommunication,\r\n } = lifecycleHub;\r\n\r\n const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n\r\n const [updateViewportSizeFraction, getCurrentViewportSizeFraction] = createCache>(\r\n whCacheOptions,\r\n sizeFraction.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache>(\r\n whCacheOptions\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 = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const {\r\n _absolute: paddingAbsolute,\r\n _padding: padding,\r\n } = _getLifecycleCommunication()._paddingInfo;\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostSizeFraction = sizeFraction(_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 isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const fractionalClientHeight =\r\n hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n fractionalClientHeight +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n 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 = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow\r\n ? style(_viewport, ['overflowX', 'overflowY'])\r\n : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj.overflowX === 'scroll',\r\n y: styleObj.overflowY === 'scroll',\r\n };\r\n const nonScrollbarStylingHideOffset = {\r\n x: overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x,\r\n y: overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y,\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.x : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.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 { _visible: xVisible, _behavior: xVisibleBehavior } = setAxisOverflowStyle(\r\n true,\r\n overflowAmount.w,\r\n overflow.x,\r\n viewportStyleObj\r\n );\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setAxisOverflowStyle(\r\n false,\r\n overflowAmount.h,\r\n overflow.y,\r\n viewportStyleObj\r\n );\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 viewportScrollSize 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 = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n viewportSizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\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\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth =\r\n viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);\r\n const fractionalContenHeight =\r\n viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\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(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\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<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': 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\r\n ? 'paddingLeft'\r\n : '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.width = `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] =\r\n 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 =\r\n 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('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(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n _doViewportArrange,\r\n prevStyle\r\n );\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 {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const [heightIntrinsic, heightIntrinsicChanged] = _heightIntrinsic;\r\n const [directionIsRTL, directionChanged] = _directionIsRTL;\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] = checkOption<\r\n boolean\r\n >('nativeScrollbarsOverlaid.show');\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n heightIntrinsicChanged);\r\n\r\n let viewportSizeFractionCache: CacheValues> = getCurrentViewportSizeFraction(force);\r\n let viewportScrollSizeCache: CacheValues> = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(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 (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged\r\n ) {\r\n const {\r\n _redoViewportArrange,\r\n _viewportOverflowState: undoViewportArrangeOverflowState,\r\n } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [\r\n viewportSizeFraction,\r\n viewportSizeFractionCahnged,\r\n ] = (viewportSizeFractionCache = updateViewportSizeFraction(force));\r\n const [\r\n viewportScrollSize,\r\n viewportScrollSizeChanged,\r\n ] = (viewportScrollSizeCache = updateViewportScrollSizeCache(force));\r\n const viewportContentSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportContentSize;\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 (viewportScrollSizeChanged ||\r\n viewportSizeFractionCahnged ||\r\n showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n viewportSizeFraction,\r\n directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize.h),\r\n }, // client size\r\n viewportSizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [viewportSizeFraction, viewportSizeFractionChanged] = viewportSizeFractionCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [overflow, overflowChanged] = checkOption('overflow');\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n viewportSizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n overflowAmount,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n viewportSizeFraction,\r\n directionIsRTL\r\n );\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: 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\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 XY,\r\n WH,\r\n TRBL,\r\n CacheValues,\r\n PartialOptions,\r\n each,\r\n hasOwnProperty,\r\n isNumber,\r\n scrollLeft,\r\n scrollTop,\r\n assignDeep,\r\n} from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { lifecycleHubOservers } from 'lifecycles/lifecycleHubObservers';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { StyleObject } from 'typings';\r\nimport { ScrollbarsSetup } from 'setups/scrollbarsSetup';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\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 type LifecycleOptionInfo = [T, boolean];\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 interface LifecycleHubState {\r\n _overflowAmount: WH;\r\n}\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions: PartialOptions, 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\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nconst booleanCacheValuesFallback: CacheValues = [false, false, false];\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 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 = (\r\n options: OSOptions,\r\n structureSetup: StructureSetup,\r\n scrollbarsSetup: ScrollbarsSetup\r\n): LifecycleHubInstance => {\r\n let lifecycleCommunication = lifecycleCommunicationFallback;\r\n const { _viewport } = 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 =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\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 lifecycleCommunication = assignDeep({}, lifecycleCommunication, newLifecycleCommunication);\r\n },\r\n };\r\n const lifecycles: Lifecycle[] = [\r\n createTrinsicLifecycle(instance),\r\n createPaddingLifecycle(instance),\r\n createOverflowLifecycle(instance),\r\n ];\r\n\r\n const updateLifecycles = (\r\n updateHints: Partial,\r\n changedOptions?: Partial,\r\n force?: boolean\r\n ) => {\r\n let {\r\n // eslint-disable-next-line prefer-const\r\n _directionIsRTL,\r\n // eslint-disable-next-line prefer-const\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\r\n const finalDirectionIsRTL =\r\n _directionIsRTL ||\r\n (_sizeObserver\r\n ? _sizeObserver._getCurrentCacheValues(force)._directionIsRTL\r\n : booleanCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic ||\r\n (_trinsicObserver\r\n ? _trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic\r\n : booleanCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => [\r\n getPropByPath(options, path),\r\n 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 // place before updating lifecycles because of possible flushing of debounce\r\n if (_updateObserverOptions) {\r\n _updateObserverOptions(checkOption);\r\n }\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 if (options.callbacks.onUpdated) {\r\n options.callbacks.onUpdated();\r\n }\r\n };\r\n const {\r\n _sizeObserver,\r\n _trinsicObserver,\r\n _updateObserverOptions,\r\n _destroy: destroyObservers,\r\n } = lifecycleHubOservers(instance, updateLifecycles);\r\n\r\n const update = (changedOptions: Partial, force?: boolean) =>\r\n updateLifecycles({}, changedOptions, force);\r\n const envUpdateListener = update.bind(0, {}, 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 destroyObservers();\r\n removeEnvironmentListener(envUpdateListener);\r\n\r\n structureSetup._destroy();\r\n scrollbarsSetup._destroy();\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSInitializationObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createScrollbarsSetup, ScrollbarsSetup } from 'setups/scrollbarsSetup';\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 (\r\n target: OSTarget | OSInitializationObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n ): 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 destroy(): void;\r\n\r\n state(): any;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSInitializationObject,\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)\r\n ._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const scrollbarsSetup: ScrollbarsSetup = createScrollbarsSetup(target, structureSetup);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup, scrollbarsSetup);\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(\r\n newOptions,\r\n optionsTemplate,\r\n currentOptions,\r\n true\r\n );\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({}, force);\r\n },\r\n destroy: () => lifecycleHub._destroy(),\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","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","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","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","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","args","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","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","exports","__esModule","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","isPrimitiveArr","some","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","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","numberAllowedValues","oTypes","number","arrayNullValues","null","stringArrayNullAllowedValues","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","attributes","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","callbacks","onUpdated","function","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","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","_host","_viewport","_padding","_content","_scrollbarsSlot","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","contentArrangeCounter","unwrap","createUniqueViewportArrangeElement","create","staticCreationFromStrategy","initializationValue","strategy","elementClass","dynamicCreationFromStrategy","defaultValue","takeInitializationValue","createStructureSetup","hostInitializationStrategy","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","evaluatedTargetObj","_target","host","viewport","padding","content","_viewportArrange","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","_targetObj","_targetCtx","_destroy","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetup","structureSetup","environmentScrollbarSlot","initializationScrollbarSlot","scrollbarsSlot","initializationScrollbarSlotResult","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","height","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_sizeChanged","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","directionIsRTL","directionIsRTLChanged","_getCurrentCacheValues","_directionIsRTL","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","heightIntrinsic","heightIntrinsicChanged","intersectionObserverInstance","entries","root","onSizeChanged","newSize","_heightIntrinsic","createEventContentChange","eventContentChange","map","destroyed","_updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","set","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreNestedTargetChange","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","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","attributeOldValue","attributeFilter","subtree","childList","characterData","_update","takeRecords","ignorePrefix","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","diff","addedOrRemovedClass","lifecycleHubOservers","instance","updateLifecycles","debounceTimeout","debounceMaxDelay","contentMutationObserver","_structureSetup","contentMutationObserverAttr","updateLifecyclesWithDebouncedAdaptiveUpdateHints","prev","prevSizeChanged","prevHostMutation","_hostMutation","prevContentMutation","_contentMutation","currSizeChanged","currvHostMutation","currContentMutation","merged","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","updateFn","onContentMutation","contentChangedTroughEvent","onHostMutation","hostMutationObserver","updateOptions","checkOption","elementEventsChanged","attributesChanged","debounceValue","debounceChanged","updateContentMutationObserver","timeout","maxWait","_trinsicObserver","_sizeObserver","_updateObserverOptions","createTrinsicLifecycle","lifecycleHub","updateHints","display","createPaddingLifecycle","_setLifecycleCommunication","updatePaddingCache","currentPaddingCache","paddingChanged","directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingInfo","_absolute","_viewportPaddingStyle","_paddingStyleChanged","max","overlaidScrollbarsHideOffset","whCacheOptions","sizeFraction","viewportOffsetSize","viewportRect","fractionalPixelRatioTollerance","setAxisOverflowStyle","horizontal","overflowAmount","behavior","styleObj","overflowKey","behaviorIsVisible","behaviorIsVisibleHidden","behaviorIsScroll","hasOverflow","_visible","_behavior","getOverflowAmount","viewportScrollSize","viewportClientSize","viewportSizeFraction","createOverflowLifecycle","_doViewportArrange","_getLifecycleCommunication","updateViewportSizeFraction","getCurrentViewportSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostSizeFraction","hostClientSize","isContentBox","fractionalClientHeight","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","scroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","viewportSizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","viewportSizeFractionCahnged","viewportScrollSizeChanged","viewportContentSize","arrangedViewportScrollSize","arrangedViewportClientSize","viewportSizeFractionChanged","overflowAmountChanged","overflowChanged","viewportArranged","_viewportOverflowScroll","_viewportOverflowAmount","getPropByPath","path","o","booleanCacheValuesFallback","lifecycleCommunicationFallback","createLifecycleHub","scrollbarsSetup","lifecycleCommunication","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","newLifecycleCommunication","lifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","destroyObservers","envUpdateListener","log","_state","_overflowAmount","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions","state","destroy"],"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 1061a7b..1848b30 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,i=t||{},e=i.o,o=i.u,u=i.v,a=e;return[function(t,i){var e=a,c=n?n(i,a,r):i,f=t||(o?!o(e,c):e!==c);return(f||u)&&(a=c,r=e),[a,f,r]},function(n){return[a,!!n,r]}]},t=Node.ELEMENT_NODE,r=Object.prototype,i=r.toString,e=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:i.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 v(n){return"function"==typeof n}function s(n){return Array.isArray(n)}function d(n){return"object"==typeof n&&!s(n)&&!u(n)}function _(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(s(n)||!v(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="constructor",i=n[r],u=i&&i.prototype,c=e.call(n,r),f=u&&e.call(u,"isPrototypeOf");if(i&&!c&&!f)return!1;for(t in n);return o(t)||e.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;i=u[e++];)o=!!r(n.classList,i)&&o}return o},un=function(n,t){on(n,t,(function(n,t){return n.add(t)}))},an=function(n,t){on(n,t,(function(n,t){return n.remove(t)}))},cn={w:0,h:0},fn=function(){return{w:window.innerWidth,h:window.innerHeight}},ln=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:cn},vn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:cn},sn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:cn},dn=function(n){return n.getBoundingClientRect()},_n=function(n){return n.split(" ")},gn=function(n,t,r,i){p(_n(t),(function(t){n.removeEventListener(t,r,i)}))},hn=function(n,t,r,i){var e=function(){if(o(T)){T=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){T=!0}}))}catch(n){}}return T}(),u=e&&i&&i.s||!1,a=i&&i._||!1,c=i&&i.g||!1,f=[],l=e?{passive:u,capture:a}:a;return p(_n(t),(function(t){var i=c?function(e){n.removeEventListener(t,i,a),r&&r(e)}:r;b(f,gn.bind(null,n,t,i,a)),n.addEventListener(t,i,l)})),S.bind(0,f)},pn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},wn=function(n,t,r,i){if(n&&t){var e=!0;return p(r,(function(r){(i?i(n[r]):n[r])!==(i?i(t[r]):t[r])&&(e=!1)})),e}return!1},bn=function(n,t){return wn(n,t,["w","h"])},mn=function(n,t){return wn(n,t,["t","r","b","l"])},yn=function(n,t,r){return wn(n,t,["width","height"],r&&function(n){return Math.round(n)})},Sn=window.setTimeout,On=function(n){n&&window.clearTimeout(n),n&&tn(n)},xn=function(){},zn=function(n,t){var r,i,e,o,u=t.p,a=t.m,f=t.S,l=function(t){On(r),On(i),i=r=e=void 0,n.apply(this,t)},s=function(n){return f&&e?f(e,n):n},d=function(){r&&l(s(o)||o)},_=function(){var n=arguments,t=v(u)?u():u,f=c(t)&&t>=0;if(f){var _=v(a)?a():a,g=c(_)&&_>=0,h=t>0?Sn:rn,p=s(n),w=p||n,b=l.bind(0,w);p||l(e||n),On(r),r=h(b,t),g&&!i&&(i=Sn(d,_)),e=o=w}else l(n)};return _.O=d,_},Cn={opacity:1,zindex:1},Ln=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},An=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},In=function(n,t,r){try{if(n){var i=n.style;o(i[t])?i.setProperty(t,r):i[t]=function(n,t){return!Cn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r)}}catch(e){}};function Mn(n,t){var r=f(t);if(s(t)||r){var i=r?"":{};if(n){var e=window.getComputedStyle(n,null);i=r?An(n,e,t):t.reduce((function(t,r){return t[r]=An(n,e,r),t}),i)}return i}p(x(t),(function(r){return In(n,r,t[r])}))}var jn=function(n,t,r){var i=t?t+"-":"",e=r?"-"+r:"",o=i+"top"+e,u=i+"right"+e,a=i+"bottom"+e,c=i+"left"+e,f=Mn(n,[o,u,a,c]);return{t:Ln(f[o]),r:Ln(f[u]),b:Ln(f[a]),l:Ln(f[c])}},Tn={x:0,y:0},Rn=function(n){var t=n?dn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:Tn};var Vn={exports:{}};!function(n){function t(){return n.exports=t=Object.assign?Object.assign.bind():function(n){for(var t=1;t0?"\r\nValid strings are: [ "+z.join(", ")+" ].":""));delete d[_]}})),{A:d,L:v}}(n,t,r||{},i||!1)},Yn="os-environment",qn=Yn+"-flexbox-glue",Nn=qn+"-max",Xn="os-host",Wn="os-padding",Un="os-viewport",$n=Un+"-arrange",Gn="os-content",Jn=Un+"-scrollbar-styled",Kn="os-size-observer",Qn=Kn+"-appear",Zn=Kn+"-listener",nt=Zn+"-scroll",tt=Zn+"-item",rt=tt+"-final",it="os-trinsic-observer",et="os-scrollbar",ot=et+"-horizontal",ut=et+"-vertical",at="os-scrollbar-track",ct="os-scrollbar-handle",ft=Fn.number,lt=[Fn.array,Fn.null],vt=[Fn.string,Fn.array,Fn.null],st=[!0,Fn.boolean],dt=[!1,Fn.boolean],_t="hidden scroll visible visible-hidden",gt=function n(t){var r={I:{},M:{}};return p(x(t),(function(i){var e=t[i];if(s(e))r.I[i]=e[1],r.M[i]=e[0];else{var o=n(e);r.I[i]=o.I,r.M[i]=o.M}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:dt,updating:{elementEvents:[[["img","load"]],lt],attributes:[null,lt],debounce:[[0,33],[Fn.number,Fn.array,Fn.null]]},overflow:{x:["scroll",_t],y:["scroll",_t]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,ft],dragScroll:st,clickScroll:dt,touch:st},textarea:{dynWidth:dt,dynHeight:dt,inheritedAttrs:[["style","class"],vt]},nativeScrollbarsOverlaid:{show:dt,initialize:dt},callbacks:{onUpdated:[null,[Fn.function,Fn.null]]}}),ht=gt.I,pt=gt.M,wt=Math.abs,bt=Math.round,mt=function(n,t){P(n,t);var r=vn(t),i=ln(t);return{x:i.h-r.h,y:i.w-r.w}},yt=function(n,t){var r="hidden";Mn(n,{overflowX:r,overflowY:r,direction:"rtl"}),M(n,0);var i=Rn(n),e=Rn(t);M(n,-999);var o=Rn(t);return{i:i.x===e.x,n:e.x!==o.x}},St=function(n,t){un(n,qn);var r=dn(n),i=dn(t),e=yn(i,r,!0);un(n,Nn);var o=dn(n),u=dn(t),a=yn(u,o,!0);return e&&a},Ot=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},xt=function(){var n=document.body,t=N('
')[0],r=t.firstChild,i=new Set,e=mt(n,t),o=function(n){var t=!1;un(n,Jn);try{t="none"===Mn(n,J("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return t}(t),u={x:0===e.x,y:0===e.y},a={j:null,T:null,R:null,V:null,B:null},c=a,f=pt,l={k:e,D:u,P:o,F:"-1"===Mn(t,"zIndex"),H:yt(t,r),Y:St(t,r),q:function(n){i.add(n)},N:function(n){i.delete(n)},X:function(){return kn({},c)},W:function(n){c=z({},c,n)},U:function(){return kn({},f)},$:function(n){f=z({},f,n)},G:a,J:f};if(I(t,"style"),Y(t),!(o||u.x&&u.y)){var v=fn(),s=Ot(),d=e;window.addEventListener("resize",(function(){if(i.size){var r=fn(),e={w:r.w-v.w,h:r.h-v.h};if(0===e.w&&0===e.h)return;var o={w:wt(e.w),h:wt(e.h)},u={w:wt(bt(r.w/(v.w/100))),h:wt(bt(r.h/(v.h/100)))},a=Ot(),c=o.w>2&&o.h>2,f=(_=u.h,g=wt(u.w),h=wt(_),!(g!==h&&g+1!==h&&g-1!==h));if(c&&f&&(a!==s&&s>0)){var l=Bn.k=mt(n,t);Y(t),d.x===l.x&&d.y===l.y||S(i),d=l}v=r,s=a}var _,g,h}))}return l},zt=function(){return Bn||(Bn=xt()),Bn},Ct=0,Lt=function(n){P(k(n),B(n)),Y(n)},At=function(){var n=zt(),t=n.P,r=n.D,i=!!(!n.F&&!t&&(r.x||r.y))&&document.createElement("style");return i&&(A(i,"id",$n+"-"+Ct),Ct++),i},It=function(n,t,r,i){var e=t||(v(r)?r(n):r);return e||q(i)},Mt=function(n,t,r,i,e){var o=l(t)||t?t:v(r)?r(n):r;return null===o?!!e&&q(i):!0===o?q(i):o},jt=function(n){var r,i,e,o,u=zt(),a=u.X,c=u.P,f=a(),l=f.j,v=f.T,s=f.R,d=f.V,_=(r=n,i=window.HTMLElement,!!r&&(i?r instanceof i:r.nodeType===t)),g=n,h=_?n:g.target,p=E(h,"textarea"),m=!p&&E(h,"body"),y=h.ownerDocument,O=y.body,z=y.defaultView,C={K:h,j:p?It(h,g.host,l,Xn):h,T:It(h,g.viewport,v,Un),R:Mt(h,g.padding,s,Wn,!c),V:Mt(h,g.content,d,Gn,!1),Z:At()},L={nn:z,tn:y,rn:k(O),in:O,en:p,on:m,un:_},A=x(C).reduce((function(n,t){var r=C[t];return b(n,!(!r||k(r))&&r)}),[]),I=function(n){return n?w(A,n)>-1:null},M=C.K,j=C.j,T=C.R,R=C.T,V=C.V,F=C.Z,q=[],N=p&&I(j),X=p?M:B([V,R,T,j,M].find((function(n){return!1===I(n)}))),W=V||R;return N&&(H(M,j),b(q,(function(){H(j,M),Y(j)}))),P(W,X),P(j,T),P(T||j,R),P(R,V),un(j,Xn),un(T,Wn),un(R,Un),un(V,Gn),b(q,(function(){_?(P(j,B(W)),Y(T||R),an(j,Xn)):(I(V)&&Lt(V),I(R)&&Lt(R),I(T)&&Lt(T),an(j,Xn),an(T,Wn),an(R,Un),an(V,Gn))})),c&&b(q,an.bind(0,R,Jn)),F&&(o=F,D(k(e=R),e,o),b(q,Y.bind(0,F))),{an:C,cn:L,fn:function(){S(q)}}},Tt=function(n){var t=q(et+" "+n),r=q(at),i=q(ct);return P(t,r),P(r,i),{ln:t,vn:r,sn:i}},Rt="animationstart",Vt="scroll",Et=3333333,Bt=function(n){return"rtl"===Mn(n,"direction")},kt=function(n){return n&&(n.height||n.width)},Dt=function(t,r,i){var e,o=i||{},u=o.dn,a=void 0!==u&&u,c=o._n,f=void 0!==c&&c,v=zt().H,_=N('
')[0],g=_.firstChild,h=Bt.bind(0,_),p=n(0,{o:void 0,v:!0,u:function(n,t){return!(!n||!kt(n)&&kt(t))}})[0],w=function(n){var t=s(n)&&n.length>0&&d(n[0]),i=!t&&l(n[0]),e=!1,o=!1,u=!0;if(t){var c=p(0,n.pop().contentRect),f=c[0],g=c[2],h=kt(f);o=!kt(g)&&h,u=!(e=!g||!h)}else i?u=n[1]:o=!0===n;if(a&&u){var w=i?n[0]:Bt(_);M(_,w?v.n?-Et:v.i?0:Et:Et),j(_,Et)}e||r({gn:!i,hn:i?n:void 0,_n:!!o})},m=[],y=!!f&&w;if(nn){var O=new nn(w);O.observe(g),b(m,(function(){O.disconnect()}))}else{var x=N('
');P(g,x),un(g,nt);var z,C=x[0],L=C.lastChild,A=C.firstChild,I=null==A?void 0:A.firstChild,T=ln(C),R=T,V=!1,E=function(){M(A,Et),j(A,Et),M(L,Et),j(L,Et)},B=function(n){z=0,V&&(T=R,w(!0===n))},k=function(n){R=ln(C),V=!n||!bn(R,T),n?(pn(n),V&&!z&&(tn(z),z=rn(B))):B(!1===n),E()};b(m,[hn(A,Vt,k),hn(L,Vt,k)]),Mn(I,{width:Et,height:Et}),E(),y=f?k.bind(0,!1):E}if(a){var D=(e=n(h,{o:!h()}))[0];b(m,hn(_,Vt,(function(n){var t=D(),r=t[0];t[1]&&(an(g,"ltr rtl"),un(g,r?"rtl":"ltr"),w(t)),pn(n)})))}return y&&(un(_,Qn),b(m,hn(_,Rt,y,{g:!!nn}))),F(t,_),{fn:function(){S(m),Y(_)},pn:function(n){return{wn:e?e[1](n):[!1,!1,!1]}}}},Pt=function(n,t,r,i){var e=!1,o=i||{},u=o.bn,a=o.mn,c=o.yn,l=o.Sn,v=o.On,s=o.xn,d=o.zn,_=function(n,t,r){var i,e=!1,o=function(o){r&&p(r.reduce((function(t,r){if(r){var i=r[0],e=r[1],u=e&&i&&(o?o(i):V(i,n));u&&u.length&&e&&f(e)&&b(t,[u,e.trim()],!0)}return t}),[]),(function(n){return p(n[0],(function(r){var o=n[1],u=i.get(r);if(u){var a=u[0],c=u[1];a===o&&c()}var f=hn(r,o,(function(n){e?(f(),i.delete(r)):t(n)}));i.set(r,[o,f])}))}))};return r&&(i=new WeakMap,o()),{fn:function(){e=!0},Cn:o}}(n,zn((function(){e&&r(!0)}),{p:33,m:99}),c),g=_.fn,h=_.Cn,m=a||[],S=(u||[]).concat(m),O=function(e){var o=(t?s:v)||xn,u=d||xn,a=[],c=[],_=!1,g=!1,S=!1;p(e,(function(r){var e=r.attributeName,v=r.target,s=r.type,d=r.oldValue,h=r.addedNodes,p="attributes"===s,y="childList"===s,O=n===v,x=p&&f(e)?A(v,e):0,z=0!==x&&d!==x,C=w(m,e)>-1&&z;if(t&&!O){var L=!p,I=p&&C,M=I&&l&&E(v,l),j=(M?!o(v,e,d,x):L||I)&&!u(r,!!M,n,i);b(c,h),g=g||j,S=S||y}!t&&O&&z&&!o(v,e,d,x)&&(b(a,e),_=_||C)})),S&&!y(c)&&h((function(n){return c.reduce((function(t,r){return b(t,V(n,r)),E(r,n)?b(t,r):t}),[])})),t?g&&r(!1):y(a)&&!_||r(a,_)},x=new Q(O);return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:S,subtree:t,childList:t,characterData:t}),e=!0,{fn:function(){e&&(g(),x.disconnect(),e=!1)},Ln:function(){e&&O(x.takeRecords())}}},Ft="os-",Ht=["tabindex"],Yt=["wrap","cols","rows"],qt=["id","class","style","open"],Nt=function(n,t,r,i){var e,o,u,a,c;return!("class"!==t||!r||!i)&&!!(o=i,u=(e=r)&&e.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})),x(c)).find((function(n){return 0!==n.indexOf(Ft)}))},Xt=function(t,r){var i,e,o,u=t.An,a=u.an,l=u.cn,v=a.j,d=a.T,_=a.V,g=l.en,h=zt(),m=h.P,y=h.Y,O=g?Yt:qt.concat(Yt),x=zn(r,{p:function(){return i},m:function(){return e},S:function(n,t){var r=n[0],i=r.gn,e=r.In,o=r.Mn,u=t[0],a=u.gn,c=u.In,f=u.Mn;return[{gn:i||a,In:e||c,Mn:o||f}]}}),z=function(n){p(n||Ht,(function(n){if(w(Ht,n)>-1){var t=A(v,n);f(t)?A(d,n,t):I(d,n)}}))},C=function(n){(n?r:x)({Mn:!0})},L=(_||!y)&&function(t,r){var i=q(it),e=[],o=n((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{o:!1}),u=o[0],a=o[1],c=function(n){if(n){var t=u(0,n);t[1]&&r(t)}};if(Z){var f=new Z((function(n){n&&n.length>0&&c(n.pop())}),{root:t});f.observe(i),b(e,(function(){f.disconnect()}))}else{var l=function(){var n=ln(i);c(n)};b(e,Dt(i,l).fn),l()}return F(t,i),{fn:function(){S(e),Y(i)},pn:function(n){return{jn:a(n)}}}}(v,(function(n){r({jn:n})})),M=Dt(v,(function(n){var t=n.gn,i=n.hn,e=n._n;(!t||e?r:x)({gn:t,wn:i})}),{_n:!0,dn:!m}),j=Pt(v,!1,(function(n,t){t?x({In:!0}):z(n)}),{mn:qt,bn:qt.concat(Ht),On:Nt});return z(),{Tn:L,Rn:M,Vn:function(n){var t=n("updating.elementEvents"),r=t[0],u=t[1],a=n("updating.attributes"),f=a[0],l=a[1],v=n("updating.debounce"),g=v[0],h=v[1];if((u||l)&&(o&&(o.Ln(),o.fn()),o=Pt(_||d,!0,C,{mn:O.concat(f||[]),bn:O.concat(f||[]),yn:r,xn:Nt})),h)if(x.O(),s(g)){var p=g[0],w=g[1];i=!!c(p)&&p,e=!!c(w)&&w}else c(g)?(i=g,e=!1):(i=!1,e=!1)},fn:function(){o&&o.fn(),L&&L.fn(),M.fn(),j.fn()}}},Wt=function(t){var r=t.An,i=t.En,e=r.an,o=e.j,u=e.R,a=e.T,c=n(jn.bind(0,o,"padding"),{u:mn,o:jn()}),f=c[0],l=c[1];return function(n,t,r){var e=l(r),o=e[0],c=e[1],v=zt(),s=v.P,d=v.Y,_=n.gn,g=n.wn,h=n.Mn,p=g[0],w=g[1],b=t("paddingAbsolute"),m=b[0],y=b[1];if(_||c||!d&&h){var S=f(r);o=S[0],c=S[1]}var O=y||w||c;if(O){var x=!m||!u&&!s,z=o.r+o.l,C=o.t+o.b,L={marginRight:x&&!p?-z:0,marginBottom:x?-C:0,marginLeft:x&&p?-z:0,top:x?-o.t:0,right:x?p?-o.r:"auto":0,left:x?p?"auto":-o.l:0,width:x?"calc(100% + "+z+"px)":""},A={paddingTop:x?o.t:0,paddingRight:x?o.r:0,paddingBottom:x?o.b:0,paddingLeft:x?o.l:0};Mn(u||a,L),Mn(a,A),i({Bn:{kn:!x,R:o},Dn:u?A:kn({},L,A)})}return{Pn:O}}},Ut=Math.max,$t=Math.abs,Gt=Math.round,Jt=42,Kt={u:bn,o:{w:0,h:0}},Qt=function(n){var t=ln(n),r=dn(n);return{w:r.width-t.w,h:r.height-t.h}},Zt=function(){return window.devicePixelRatio%1==0?0:1},nr=function(n,t,r,i){var e=n?"overflowX":"overflowY",o=0===r.indexOf("visible"),u="visible-hidden"===r,a="scroll"===r,c=t>0;return o&&(i[e]="visible"),a&&c&&(i[e]=r),{Fn:o,Hn:u?"hidden":"scroll"}},tr=function(t){var r=t.An,i=t.Yn,e=t.qn,o=t.En,u=r.an,a=u.j,c=u.T,f=u.Z,l=n(Qt.bind(0,c),Kt),v=l[0],s=l[1],d=n(sn.bind(0,c),Kt),_=d[0],g=d[1],h=n((function(n){var t=n.Nn,r=n.Xn,i=n.Wn;return{w:Ut(0,Gt(Ut(0,t.w-r.w)-(Zt()||Ut(0,i.w)))),h:Ut(0,Gt(Ut(0,t.h-r.h)-(Zt()||Ut(0,i.h))))}}),Kt),w=h[0],b=h[1],m=function(n,t){if(Mn(c,{height:""}),t){var r=zt().D,i=e().Bn,o=i.kn,u=i.R,f=n.Un,l=n.$n,v=Qt(a),s=vn(a),d="content-box"===Mn(c,"boxSizing"),_=o||d?u.b+u.t:0,g=s.h+($t(v.h)<1?v.h:0),h=!(r.x&&d);Mn(c,{height:g+(f.x&&h?l.x:0)-_})}},y=function(n,t){var r=zt(),i=r.k,e=r.D,o=r.P,u=e.x,a=e.y,f=o||n?0:Jt,l=!t?Mn(c,["overflowX","overflowY"]):t,v={x:"scroll"===l.overflowX,y:"scroll"===l.overflowY};return{Un:v,Gn:{x:u&&!!f,y:a&&!!f},$n:{x:v.x&&!o?u?f:i.x:0,y:v.y&&!o?a?f:i.y:0}}},S=function(n,t,r,o){if(i){var u=n.$n,a=n.Gn,l=a.x,v=a.y,s=u.x,d=u.y,_=e().Dn,g=_[o?"paddingRight":"paddingLeft"],h=_.paddingTop,p=t.w+($t(r.w)<1?r.w:0),w=t.h+($t(r.h)<1?r.h:0),b={w:d&&v?d+p-g+"px":"",h:s&&l?s+w-h+"px":""};if(f){var m=f.sheet;if(m){var y=m.cssRules;if(y){y.length||m.insertRule("#"+A(f,"id")+" + ."+$n+"::before {}",0);var S=y[0].style;S.width=b.w,S.height=b.h}}}else Mn(c,{"--os-vaw":b.w,"--os-vah":b.h})}return i},O=function(n,t,r,i){var o=n.$n,u=n.Gn,a=u.x,c=u.y,f=o.x,l=o.y,v=e().Dn,s=t?"marginLeft":"marginRight",d=t?"paddingLeft":"paddingRight",_=v[s],g=v.marginBottom,h=v[d],p=v.paddingBottom;i.width="calc(100% + "+(l+-1*_)+"px)",i[s]=-l+_,i.marginBottom=-f+g,r&&(i[d]=h+(c?l:0),i.paddingBottom=p+(a?f:0))};return function(n,t,r){var u,a=n.wn,f=n.jn,l=n.gn,d=n.In,h=n.Mn,z=n.Pn,C=zt(),L=C.Y,A=C.P,I=C.D,M=f[0],j=f[1],T=a[0],R=a[1],V=t("nativeScrollbarsOverlaid.show"),E=V[0],B=V[1],k=E&&I.x&&I.y,D=!L&&(l||h||d||B||j),P=s(r),F=g(r),H=b(r);if(B&&A&&(k?an(c,Jn):un(c,Jn)),D&&(u=y(k),m(u,!!M)),l||z||h||B||R){var Y=function(n,t,r){if(i){var o=r||y(n),u=e().Dn,a=zt().Y,f=o.Gn,l=f.x,v=f.y,s={},d=function(n){return p(n.split(" "),(function(n){s[n]=u[n]}))};a||(s.height=""),l&&d("marginBottom paddingTop paddingBottom"),v&&d("marginLeft marginRight paddingLeft paddingRight");var _=Mn(c,x(s));return an(c,$n),Mn(c,s),{Jn:function(){O(o,t,i,_),Mn(c,_),un(c,$n)},Kn:o}}return{Jn:xn}}(k,T,u),q=Y.Jn,N=Y.Kn,X=P=v(r),W=X[0],U=X[1],$=F=_(r),G=$[0],J=$[1],K=vn(c),Q=G,Z=K;q(),(J||U||B)&&N&&!k&&S(N,G,W,T)&&(Z=vn(c),Q=sn(c)),H=w(r,{Wn:W,Nn:{w:Ut(G.w,Q.w),h:Ut(G.h,Q.h)},Xn:{w:Z.w+Ut(0,K.w-G.w),h:Z.h+Ut(0,K.h-G.h)}})}var nn=P,tn=nn[0],rn=nn[1],en=F,on=en[0],cn=en[1],fn=H,ln=fn[0],dn=fn[1],_n=t("overflow"),gn=_n[0],hn=_n[1];if(z||rn||cn||dn||hn||B||R||D){var pn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},wn=function(n,t,r,i){var e=nr(!0,t.w,r.x,i),o=e.Fn,u=e.Hn,a=nr(!1,t.h,r.y,i),c=a.Fn,f=a.Hn;return o&&!c&&(i.overflowX=u),c&&!o&&(i.overflowY=f),y(n,i)}(k,ln,gn,pn),bn=S(wn,on,tn,T);O(wn,T,bn,pn),D&&m(wn,!!M),Mn(c,pn),o({Qn:wn.Un,Zn:ln})}}},rr=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&O(n,t)?n[t]:void 0}),n):void 0},ir=[!1,!1,!1],er={Bn:{kn:!1,R:{t:0,r:0,b:0,l:0}},Qn:{x:!1,y:!1},Zn:{w:0,h:0},Dn:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}};return function(n,t,r){var i=z({},(0,zt().U)(),Hn(t||{},ht,null,!0).L),e=jt(n),o=function(n,t){var r=(0,zt().X)().B,i=t.an,e=t.cn,o=i.K,u=i.j,a=i.T,c=!e.un&&n.scrollbarsSlot,f=(v(c)?c(o,u,a):c)||(v(r)?r(o,u,a):r)||u,l=Tt(ot),s=Tt(ut),d=l.ln,_=s.ln;return P(f,d),P(f,_),{nt:l,tt:s,fn:function(){Y([d,_])}}}(n,e),u=function(n,t,r){var i,e,o=er,u=t.an.T,a=zt(),f=a.P,l=a.D,v=a.Y,s=a.q,d=a.N,_=!f&&(l.x||l.y),g={M:n,An:t,Yn:_,qn:function(){return o},En:function(n){o=z({},o,n)}},h=[(i=g,e=i.An.an.V,function(n){var t=n.jn,r=t[0],i=t[1];return i&&Mn(e,{height:r?"":"100%",display:r?"":"inline"}),{gn:i,Mn:i}}),Wt(g),tr(g)],w=function(t,r,i){var e=t||{},o=e.wn,a=e.jn,f=e.gn,l=void 0===f?i||!1:f,s=e.In,d=void 0===s?i||!1:s,g=e.Mn,w=void 0===g?i||!1:g,b=e.Pn,O=void 0===b?i||!1:b,x=o||(m?m.pn(i).wn:ir),z=a||(y?y.pn(i).jn:ir),C=function(t){return[rr(n,t),i||void 0!==rr(r,t)]},L=_||!v,A=L&&M(u),I=L&&j(u);S&&S(C),p(h,(function(n){var t=n({wn:x,jn:z,gn:l,In:d,Mn:w,Pn:O},C,!!i)||{},r=t.gn,e=t.In,o=t.Mn,u=t.Pn;l=r||l,d=e||d,w=o||w,O=u||O})),c(A)&&M(u,A),c(I)&&j(u,I),n.callbacks.onUpdated&&n.callbacks.onUpdated()},b=Xt(g,w),m=b.Rn,y=b.Tn,S=b.Vn,O=b.fn,x=function(n,t){return w(null,n,t)},C=x.bind(null,null,!0);return s(C),console.log(zt()),{Ln:x,rt:function(){return{it:o.Zn}},fn:function(){O(),d(C),t.fn(),r.fn()}}}(i,e,o),a={options:function(n){if(n){var t=Hn(n,ht,i,!0).L;C(t)||(z(i,t),u.Ln(t))}return i},state:function(){return u.rt()},update:function(n){u.Ln(null,n)},destroy:function(){return u.fn()}};return a.update(!0),a}})); \ 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";function n(n,t){var r,i=n.o,e=n.u,o=n.v,u=i,a=function(n,t){var i=u,a=n,c=t||(e?!e(i,a):i!==a);return(c||o)&&(u=a,r=i),[u,c,r]};return[t?function(n){return a(t(u,r),n)}:a,function(n){return[u,!!n,r]}]}var t=Node.ELEMENT_NODE,r=Object.prototype,i=r.toString,e=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:i.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 v(n){return"function"==typeof n}function s(n){return Array.isArray(n)}function d(n){return"object"==typeof n&&!s(n)&&!u(n)}function _(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(s(n)||!v(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="constructor",i=n[r],u=i&&i.prototype,c=e.call(n,r),f=u&&e.call(u,"isPrototypeOf");if(i&&!c&&!f)return!1;for(t in n);return o(t)||e.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;i=u[e++];)o=!!r(n.classList,i)&&o}return o},un=function(n,t){on(n,t,(function(n,t){return n.add(t)}))},an=function(n,t){on(n,t,(function(n,t){return n.remove(t)}))},cn={w:0,h:0},fn=function(){return{w:window.innerWidth,h:window.innerHeight}},ln=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:cn},vn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:cn},sn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:cn},dn=function(n){return n.getBoundingClientRect()},_n=function(n){return n.split(" ")},gn=function(n,t,r,i){p(_n(t),(function(t){n.removeEventListener(t,r,i)}))},hn=function(n,t,r,i){var e=function(){if(o(T)){T=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){T=!0}}))}catch(n){}}return T}(),u=e&&i&&i.s||!1,a=i&&i._||!1,c=i&&i.g||!1,f=[],l=e?{passive:u,capture:a}:a;return p(_n(t),(function(t){var i=c?function(e){n.removeEventListener(t,i,a),r&&r(e)}:r;b(f,gn.bind(null,n,t,i,a)),n.addEventListener(t,i,l)})),x.bind(0,f)},pn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},wn=function(n,t,r,i){if(n&&t){var e=!0;return p(r,(function(r){(i?i(n[r]):n[r])!==(i?i(t[r]):t[r])&&(e=!1)})),e}return!1},bn=function(n,t){return wn(n,t,["w","h"])},mn=function(n,t){return wn(n,t,["t","r","b","l"])},yn=function(n,t,r){return wn(n,t,["width","height"],r&&function(n){return Math.round(n)})},xn=function(n){n&&window.clearTimeout(n),n&&tn(n)},On=function(){},Sn=function(n,t){var r,i,e,o,u=t||{},a=u.p,f=u.m,l=u.O,s=window.setTimeout,d=function(t){xn(r),xn(i),i=r=e=void 0,n.apply(this,t)},_=function(n){return l&&e?l(e,n):n},g=function(){r&&d(_(o)||o)},h=function(){var n=m(arguments),t=v(a)?a():a,u=c(t)&&t>=0;if(u){var l=v(f)?f():f,h=c(l)&&l>=0,p=t>0?s:rn,w=_(n),b=w||n,y=d.bind(0,b);xn(r),r=p(y,t),h&&!i&&(i=s(g,l)),e=o=b}else d(n)};return h.S=g,h},zn={opacity:1,zindex:1},Cn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},Ln=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},An=function(n,t,r){try{if(n){var i=n.style;o(i[t])?i.setProperty(t,r):i[t]=function(n,t){return!zn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r)}}catch(e){}};function In(n,t){var r=f(t);if(s(t)||r){var i=r?"":{};if(n){var e=window.getComputedStyle(n,null);i=r?Ln(n,e,t):t.reduce((function(t,r){return t[r]=Ln(n,e,r),t}),i)}return i}p(S(t),(function(r){return An(n,r,t[r])}))}var Mn=function(n,t,r){var i=t?t+"-":"",e=r?"-"+r:"",o=i+"top"+e,u=i+"right"+e,a=i+"bottom"+e,c=i+"left"+e,f=In(n,[o,u,a,c]);return{t:Cn(f[o]),r:Cn(f[u]),b:Cn(f[a]),l:Cn(f[c])}},jn={x:0,y:0},Tn=function(n){var t=n?dn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:jn};var Rn={exports:{}};!function(n){function t(){return n.exports=t=Object.assign?Object.assign.bind():function(n){for(var t=1;t0?"\r\nValid strings are: [ "+z.join(", ")+" ].":""));delete d[_]}})),{A:d,L:v}}(n,t,r||{},i||!1)},Yn="os-environment",qn=Yn+"-flexbox-glue",Fn=qn+"-max",Nn="os-host",Xn="os-padding",Wn="os-viewport",Un=Wn+"-arrange",$n="os-content",Gn=Wn+"-scrollbar-styled",Jn="os-size-observer",Kn=Jn+"-appear",Qn=Jn+"-listener",Zn=Qn+"-scroll",nt=Qn+"-item",tt=nt+"-final",rt="os-trinsic-observer",it="os-scrollbar",et=it+"-horizontal",ot=it+"-vertical",ut="os-scrollbar-track",at="os-scrollbar-handle",ct=Pn.number,ft=[Pn.array,Pn.null],lt=[Pn.string,Pn.array,Pn.null],vt=[!0,Pn.boolean],st=[!1,Pn.boolean],dt="hidden scroll visible visible-hidden",_t=function n(t){var r={I:{},M:{}};return p(S(t),(function(i){var e=t[i];if(s(e))r.I[i]=e[1],r.M[i]=e[0];else{var o=n(e);r.I[i]=o.I,r.M[i]=o.M}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:st,updating:{elementEvents:[[["img","load"]],ft],attributes:[null,ft],debounce:[[0,33],[Pn.number,Pn.array,Pn.null]]},overflow:{x:["scroll",dt],y:["scroll",dt]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,ct],dragScroll:vt,clickScroll:st,touch:vt},textarea:{dynWidth:st,dynHeight:st,inheritedAttrs:[["style","class"],lt]},nativeScrollbarsOverlaid:{show:st,initialize:st},callbacks:{onUpdated:[null,[Pn.function,Pn.null]]}}),gt=_t.I,ht=_t.M,pt=Math.abs,wt=Math.round,bt=function(n,t){P(n,t);var r=vn(t),i=ln(t);return{x:i.h-r.h,y:i.w-r.w}},mt=function(n,t){var r="hidden";In(n,{overflowX:r,overflowY:r,direction:"rtl"}),M(n,0);var i=Tn(n),e=Tn(t);M(n,-999);var o=Tn(t);return{i:i.x===e.x,n:e.x!==o.x}},yt=function(n,t){un(n,qn);var r=dn(n),i=dn(t),e=yn(i,r,!0);un(n,Fn);var o=dn(n),u=dn(t),a=yn(u,o,!0);return e&&a},xt=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},Ot=function(){var n=document.body,t=N('
')[0],r=t.firstChild,i=new Set,e=bt(n,t),o=function(n){var t=!1;un(n,Gn);try{t="none"===In(n,J("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return t}(t),u={x:0===e.x,y:0===e.y},a={j:null,T:null,R:null,V:null,B:null},c=a,f=ht,l={k:e,D:u,P:o,H:"-1"===In(t,"zIndex"),Y:mt(t,r),q:yt(t,r),F:function(n){i.add(n)},N:function(n){i.delete(n)},X:function(){return Bn({},c)},W:function(n){c=z({},c,n)},U:function(){return Bn({},f)},$:function(n){f=z({},f,n)},G:a,J:f};if(I(t,"style"),q(t),!(o||u.x&&u.y)){var v=fn(),s=xt(),d=e;window.addEventListener("resize",(function(){if(i.size){var r=fn(),e={w:r.w-v.w,h:r.h-v.h};if(0===e.w&&0===e.h)return;var o={w:pt(e.w),h:pt(e.h)},u={w:pt(wt(r.w/(v.w/100))),h:pt(wt(r.h/(v.h/100)))},a=xt(),c=o.w>2&&o.h>2,f=(_=u.h,g=pt(u.w),h=pt(_),!(g!==h&&g+1!==h&&g-1!==h));if(c&&f&&(a!==s&&s>0)){var l=En.k=bt(n,t);q(t),d.x===l.x&&d.y===l.y||x(i),d=l}v=r,s=a}var _,g,h}))}return l},St=function(){return En||(En=Ot()),En},zt=0,Ct=function(n){P(k(n),B(n)),q(n)},Lt=function(){var n=St(),t=n.P,r=n.D,i=!!(!n.H&&!t&&(r.x||r.y))&&document.createElement("style");return i&&(A(i,"id",Un+"-"+zt),zt++),i},At=function(n,t,r,i){var e=t||(v(r)?r(n):r);return e||F(i)},It=function(n,t,r,i,e){var o=l(t)||t?t:v(r)?r(n):r;return null===o?!!e&&F(i):!0===o?F(i):o},Mt=function(n){var r,i,e,o,u=St(),a=u.X,c=u.P,f=a(),l=f.j,v=f.T,s=f.R,d=f.V,_=(r=n,i=window.HTMLElement,!!r&&(i?r instanceof i:r.nodeType===t)),g=n,h=_?n:g.target,p=E(h,"textarea"),m=!p&&E(h,"body"),y=h.ownerDocument,O=y.body,z=y.defaultView,C={K:h,j:p?At(h,g.host,l,Nn):h,T:At(h,g.viewport,v,Wn),R:It(h,g.padding,s,Xn,!c),V:It(h,g.content,d,$n,!1),Z:Lt()},L={nn:z,tn:y,rn:k(O),in:O,en:p,on:m,un:_},A=S(C).reduce((function(n,t){var r=C[t];return b(n,!(!r||k(r))&&r)}),[]),I=function(n){return n?w(A,n)>-1:null},M=C.K,j=C.j,T=C.R,R=C.T,V=C.V,H=C.Z,F=[],N=p&&I(j),X=p?M:B([V,R,T,j,M].find((function(n){return!1===I(n)}))),W=V||R;return N&&(Y(M,j),b(F,(function(){Y(j,M),q(j)}))),P(W,X),P(j,T),P(T||j,R),P(R,V),un(j,Nn),un(T,Xn),un(R,Wn),un(V,$n),b(F,(function(){_?(P(j,B(W)),q(T||R),an(j,Nn)):(I(V)&&Ct(V),I(R)&&Ct(R),I(T)&&Ct(T),an(j,Nn),an(T,Xn),an(R,Wn),an(V,$n))})),c&&b(F,an.bind(0,R,Gn)),H&&(o=H,D(k(e=R),e,o),b(F,q.bind(0,H))),{an:C,cn:L,fn:function(){x(F)}}},jt=function(n){var t=F(it+" "+n),r=F(ut),i=F(at);return P(t,r),P(r,i),{ln:t,vn:r,sn:i}},Tt="animationstart",Rt="scroll",Vt=3333333,Et=function(n){return"rtl"===In(n,"direction")},Bt=function(n){return n&&(n.height||n.width)},kt=function(t,r,i){var e,o=i||{},u=o.dn,a=void 0!==u&&u,c=o._n,f=void 0!==c&&c,v=St().Y,_=N('
')[0],g=_.firstChild,h=Et.bind(0,_),p=n({o:void 0,v:!0,u:function(n,t){return!(!n||!Bt(n)&&Bt(t))}})[0],w=function(n){var t=s(n)&&n.length>0&&d(n[0]),i=!t&&l(n[0]),e=!1,o=!1,u=!0;if(t){var c=p(n.pop().contentRect),f=c[0],g=c[2],h=Bt(f);o=!Bt(g)&&h,u=!(e=!g||!h)}else i?u=n[1]:o=!0===n;if(a&&u){var w=i?n[0]:Et(_);M(_,w?v.n?-Vt:v.i?0:Vt:Vt),j(_,Vt)}e||r({gn:!i,hn:i?n:void 0,_n:!!o})},m=[],y=!!f&&w;if(nn){var O=new nn(w);O.observe(g),b(m,(function(){O.disconnect()}))}else{var S=N('
');P(g,S),un(g,Zn);var z,C=S[0],L=C.lastChild,A=C.firstChild,I=null==A?void 0:A.firstChild,T=ln(C),R=T,V=!1,E=function(){M(A,Vt),j(A,Vt),M(L,Vt),j(L,Vt)},B=function(n){z=0,V&&(T=R,w(!0===n))},k=function(n){R=ln(C),V=!n||!bn(R,T),n?(pn(n),V&&!z&&(tn(z),z=rn(B))):B(!1===n),E()};b(m,[hn(A,Rt,k),hn(L,Rt,k)]),In(I,{width:Vt,height:Vt}),E(),y=f?k.bind(0,!1):E}if(a){var D=(e=n({o:!h()},h))[0];b(m,hn(_,Rt,(function(n){var t=D(),r=t[0];t[1]&&(an(g,"ltr rtl"),un(g,r?"rtl":"ltr"),w(t)),pn(n)})))}return y&&(un(_,Kn),b(m,hn(_,Tt,y,{g:!!nn}))),H(t,_),{fn:function(){x(m),q(_)},pn:function(n){return{wn:e?e[1](n):[!1,!1,!1]}}}},Dt=function(n,t,r,i){var e=!1,o=i||{},u=o.bn,a=o.mn,c=o.yn,l=o.xn,v=o.On,s=o.Sn,d=o.zn,_=function(n,t,r){var i,e=!1,o=function(o){r&&p(r.reduce((function(t,r){if(r){var i=r[0],e=r[1],u=e&&i&&(o?o(i):V(i,n));u&&u.length&&e&&f(e)&&b(t,[u,e.trim()],!0)}return t}),[]),(function(n){return p(n[0],(function(r){var o=n[1],u=i.get(r);if(u){var a=u[0],c=u[1];a===o&&c()}var f=hn(r,o,(function(n){e?(f(),i.delete(r)):t(n)}));i.set(r,[o,f])}))}))};return r&&(i=new WeakMap,o()),{fn:function(){e=!0},Cn:o}}(n,Sn((function(){e&&r(!0)}),{p:33,m:99}),c),g=_.fn,h=_.Cn,m=a||[],x=(u||[]).concat(m),O=function(e){var o=(t?s:v)||On,u=d||On,a=[],c=[],_=!1,g=!1,x=!1;p(e,(function(r){var e=r.attributeName,v=r.target,s=r.type,d=r.oldValue,h=r.addedNodes,p="attributes"===s,y="childList"===s,O=n===v,S=p&&f(e)?A(v,e):0,z=0!==S&&d!==S,C=w(m,e)>-1&&z;if(t&&!O){var L=!p,I=p&&C,M=I&&l&&E(v,l),j=(M?!o(v,e,d,S):L||I)&&!u(r,!!M,n,i);b(c,h),g=g||j,x=x||y}!t&&O&&z&&!o(v,e,d,S)&&(b(a,e),_=_||C)})),x&&!y(c)&&h((function(n){return c.reduce((function(t,r){return b(t,V(n,r)),E(r,n)?b(t,r):t}),[])})),t?g&&r(!1):y(a)&&!_||r(a,_)},S=new Q(O);return S.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:x,subtree:t,childList:t,characterData:t}),e=!0,{fn:function(){e&&(g(),S.disconnect(),e=!1)},Ln:function(){e&&O(S.takeRecords())}}},Pt="os-",Ht=["tabindex"],Yt=["wrap","cols","rows"],qt=["id","class","style","open"],Ft=function(n,t,r,i){var e,o,u,a,c;return!("class"!==t||!r||!i)&&!!(o=i,u=(e=r)&&e.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(Pt)}))},Nt=function(t,r){var i,e,o,u=t.An,a=u.an,l=u.cn,v=a.j,d=a.T,_=a.V,g=l.en,h=St(),m=h.P,y=h.q,O=g?Yt:qt.concat(Yt),S=Sn(r,{p:function(){return i},m:function(){return e},O:function(n,t){var r=n[0],i=r.gn,e=r.In,o=r.Mn,u=t[0],a=u.gn,c=u.In,f=u.Mn;return[{gn:i||a,In:e||c,Mn:o||f}]}}),z=function(n){p(n||Ht,(function(n){if(w(Ht,n)>-1){var t=A(v,n);f(t)?A(d,n,t):I(d,n)}}))},C=function(n){(n?r:S)({Mn:!0})},L=(_||!y)&&function(t,r){var i=F(rt),e=[],o=n({o:!1}),u=o[0],a=o[1],c=function(n){if(n){var t=u(0===(i=n).h||i.isIntersecting||i.intersectionRatio>0);t[1]&&r(t)}var i};if(Z){var f=new Z((function(n){n&&n.length>0&&c(n.pop())}),{root:t});f.observe(i),b(e,(function(){f.disconnect()}))}else{var l=function(){var n=ln(i);c(n)};b(e,kt(i,l).fn),l()}return H(t,i),{fn:function(){x(e),q(i)},pn:function(n){return{jn:a(n)}}}}(v,(function(n){r({jn:n})})),M=kt(v,(function(n){var t=n.gn,i=n.hn,e=n._n;(!t||e?r:S)({gn:t,wn:i})}),{_n:!0,dn:!m}),j=Dt(v,!1,(function(n,t){t?S({In:!0}):z(n)}),{mn:qt,bn:qt.concat(Ht),On:Ft});return z(),{Tn:L,Rn:M,Vn:function(n){var t=n("updating.elementEvents"),r=t[0],u=t[1],a=n("updating.attributes"),f=a[0],l=a[1],v=n("updating.debounce"),g=v[0],h=v[1];if((u||l)&&(o&&(o.Ln(),o.fn()),o=Dt(_||d,!0,C,{mn:O.concat(f||[]),bn:O.concat(f||[]),yn:r,Sn:Ft})),h)if(S.S(),s(g)){var p=g[0],w=g[1];i=!!c(p)&&p,e=!!c(w)&&w}else c(g)?(i=g,e=!1):(i=!1,e=!1)},fn:function(){o&&o.fn(),L&&L.fn(),M.fn(),j.fn()}}},Xt=function(t){var r=t.An,i=t.En,e=r.an,o=e.j,u=e.R,a=e.T,c=n({u:mn,o:Mn()},Mn.bind(0,o,"padding","")),f=c[0],l=c[1];return function(n,t,r){var e=l(r),o=e[0],c=e[1],v=St(),s=v.P,d=v.q,_=n.gn,g=n.wn,h=n.Mn,p=g[0],w=g[1],b=t("paddingAbsolute"),m=b[0],y=b[1];if(_||c||!d&&h){var x=f(r);o=x[0],c=x[1]}var O=y||w||c;if(O){var S=!m||!u&&!s,z=o.r+o.l,C=o.t+o.b,L={marginRight:S&&!p?-z:0,marginBottom:S?-C:0,marginLeft:S&&p?-z:0,top:S?-o.t:0,right:S?p?-o.r:"auto":0,left:S?p?"auto":-o.l:0,width:S?"calc(100% + "+z+"px)":""},A={paddingTop:S?o.t:0,paddingRight:S?o.r:0,paddingBottom:S?o.b:0,paddingLeft:S?o.l:0};In(u||a,L),In(a,A),i({Bn:{kn:!S,R:o},Dn:u?A:Bn({},L,A)})}return{Pn:O}}},Wt=Math.max,Ut=Math.abs,$t=Math.round,Gt=42,Jt={u:bn,o:{w:0,h:0}},Kt=function(n){var t=ln(n),r=dn(n);return{w:r.width-t.w,h:r.height-t.h}},Qt=function(){return window.devicePixelRatio%1==0?0:1},Zt=function(n,t,r,i){var e=n?"overflowX":"overflowY",o=0===r.indexOf("visible"),u="visible-hidden"===r,a="scroll"===r,c=t>0;return o&&(i[e]="visible"),a&&c&&(i[e]=r),{Hn:o,Yn:u?"hidden":"scroll"}},nr=function(t){var r=t.An,i=t.qn,e=t.Fn,o=t.En,u=r.an,a=u.j,c=u.T,f=u.Z,l=n(Jt,Kt.bind(0,c)),v=l[0],s=l[1],d=n(Jt,sn.bind(0,c)),_=d[0],g=d[1],h=n(Jt),w=h[0],b=h[1],m=function(n,t){if(In(c,{height:""}),t){var r=St().D,i=e().Bn,o=i.kn,u=i.R,f=n.Nn,l=n.Xn,v=Kt(a),s=vn(a),d="content-box"===In(c,"boxSizing"),_=o||d?u.b+u.t:0,g=s.h+(Ut(v.h)<1?v.h:0),h=!(r.x&&d);In(c,{height:g+(f.x&&h?l.x:0)-_})}},y=function(n,t){var r=St(),i=r.k,e=r.D,o=r.P,u=e.x,a=e.y,f=o||n?0:Gt,l=!t?In(c,["overflowX","overflowY"]):t,v={x:"scroll"===l.overflowX,y:"scroll"===l.overflowY},s={x:u?f:i.x,y:a?f:i.y};return{Nn:v,Wn:{x:u&&!!f,y:a&&!!f},Xn:{x:v.x&&!o?s.x:0,y:v.y&&!o?s.y:0}}},x=function(n,t,r,o){if(i){var u=n.Xn,a=n.Wn,l=a.x,v=a.y,s=u.x,d=u.y,_=e().Dn,g=_[o?"paddingRight":"paddingLeft"],h=_.paddingTop,p=t.w+(Ut(r.w)<1?r.w:0),w=t.h+(Ut(r.h)<1?r.h:0),b={w:d&&v?d+p-g+"px":"",h:s&&l?s+w-h+"px":""};if(f){var m=f.sheet;if(m){var y=m.cssRules;if(y){y.length||m.insertRule("#"+A(f,"id")+" + ."+Un+"::before {}",0);var x=y[0].style;x.width=b.w,x.height=b.h}}}else In(c,{"--os-vaw":b.w,"--os-vah":b.h})}return i},O=function(n,t,r,i){var o=n.Xn,u=n.Wn,a=u.x,c=u.y,f=o.x,l=o.y,v=e().Dn,s=t?"marginLeft":"marginRight",d=t?"paddingLeft":"paddingRight",_=v[s],g=v.marginBottom,h=v[d],p=v.paddingBottom;i.width="calc(100% + "+(l+-1*_)+"px)",i[s]=-l+_,i.marginBottom=-f+g,r&&(i[d]=h+(c?l:0),i.paddingBottom=p+(a?f:0))};return function(n,t,r){var u,a=n.wn,f=n.jn,l=n.gn,d=n.In,h=n.Mn,z=n.Pn,C=St(),L=C.q,A=C.P,I=C.D,M=f[0],j=f[1],T=a[0],R=a[1],V=t("nativeScrollbarsOverlaid.show"),E=V[0],B=V[1],k=E&&I.x&&I.y,D=!L&&(l||h||d||B||j),P=s(r),H=g(r),Y=b(r);if(B&&A&&(k?an(c,Gn):un(c,Gn)),D&&(u=y(k),m(u,!!M)),l||z||h||B||R){var q=function(n,t,r){if(i){var o=r||y(n),u=e().Dn,a=St().q,f=o.Wn,l=f.x,v=f.y,s={},d=function(n){return p(n.split(" "),(function(n){s[n]=u[n]}))};a||(s.height=""),l&&d("marginBottom paddingTop paddingBottom"),v&&d("marginLeft marginRight paddingLeft paddingRight");var _=In(c,S(s));return an(c,Un),In(c,s),{Un:function(){O(o,t,i,_),In(c,_),un(c,Un)},$n:o}}return{Un:On}}(k,T,u),F=q.Un,N=q.$n,X=P=v(r),W=X[0],U=X[1],$=H=_(r),G=$[0],J=$[1],K=vn(c),Q=G,Z=K;F(),(J||U||B)&&N&&!k&&x(N,G,W,T)&&(Z=vn(c),Q=sn(c)),Y=w(function(n,t,r){return{w:Wt(0,$t(Wt(0,n.w-t.w)-(Qt()||Wt(0,r.w)))),h:Wt(0,$t(Wt(0,n.h-t.h)-(Qt()||Wt(0,r.h))))}}({w:Wt(G.w,Q.w),h:Wt(G.h,Q.h)},{w:Z.w+Wt(0,K.w-G.w),h:Z.h+Wt(0,K.h-G.h)},W),r)}var nn=P,tn=nn[0],rn=nn[1],en=H,on=en[0],cn=en[1],fn=Y,ln=fn[0],dn=fn[1],_n=t("overflow"),gn=_n[0],hn=_n[1];if(z||rn||cn||dn||hn||B||R||D){var pn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},wn=function(n,t,r,i){var e=Zt(!0,t.w,r.x,i),o=e.Hn,u=e.Yn,a=Zt(!1,t.h,r.y,i),c=a.Hn,f=a.Yn;return o&&!c&&(i.overflowX=u),c&&!o&&(i.overflowY=f),y(n,i)}(k,ln,gn,pn),bn=x(wn,on,tn,T);O(wn,T,bn,pn),D&&m(wn,!!M),In(c,pn),o({Gn:wn.Nn,Jn:ln})}}},tr=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&O(n,t)?n[t]:void 0}),n):void 0},rr=[!1,!1,!1],ir={Bn:{kn:!1,R:{t:0,r:0,b:0,l:0}},Gn:{x:!1,y:!1},Jn:{w:0,h:0},Dn:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0}};return function(n,t,r){var i=z({},(0,St().U)(),Hn(t||{},gt,null,!0).L),e=Mt(n),o=function(n,t){var r=(0,St().X)().B,i=t.an,e=t.cn,o=i.K,u=i.j,a=i.T,c=!e.un&&n.scrollbarsSlot,f=(v(c)?c(o,u,a):c)||(v(r)?r(o,u,a):r)||u,l=jt(et),s=jt(ot),d=l.ln,_=s.ln;return P(f,d),P(f,_),{Kn:l,Qn:s,fn:function(){q([d,_])}}}(n,e),u=function(n,t,r){var i,e,o=ir,u=t.an.T,a=St(),f=a.P,l=a.D,v=a.q,s=a.F,d=a.N,_=!f&&(l.x||l.y),g={M:n,An:t,qn:_,Fn:function(){return o},En:function(n){o=z({},o,n)}},h=[(i=g,e=i.An.an.V,function(n){var t=n.jn,r=t[0],i=t[1];return i&&In(e,{height:r?"":"100%",display:r?"":"inline"}),{gn:i,Mn:i}}),Xt(g),nr(g)],w=function(t,r,i){var e=t||{},o=e.wn,a=e.jn,f=e.gn,l=void 0===f?i||!1:f,s=e.In,d=void 0===s?i||!1:s,g=e.Mn,w=void 0===g?i||!1:g,b=e.Pn,O=void 0===b?i||!1:b,S=o||(m?m.pn(i).wn:rr),z=a||(y?y.pn(i).jn:rr),C=function(t){return[tr(n,t),i||void 0!==tr(r,t)]},L=_||!v,A=L&&M(u),I=L&&j(u);x&&x(C),p(h,(function(n){var t=n({wn:S,jn:z,gn:l,In:d,Mn:w,Pn:O},C,!!i)||{},r=t.gn,e=t.In,o=t.Mn,u=t.Pn;l=r||l,d=e||d,w=o||w,O=u||O})),c(A)&&M(u,A),c(I)&&j(u,I),n.callbacks.onUpdated&&n.callbacks.onUpdated()},b=Nt(g,w),m=b.Rn,y=b.Tn,x=b.Vn,O=b.fn,S=function(n,t){return w({},n,t)},C=S.bind(0,{},!0);return s(C),console.log(St()),{Ln:S,Zn:function(){return{nt:o.Jn}},fn:function(){O(),d(C),t.fn(),r.fn()}}}(i,e,o),a={options:function(n){if(n){var t=Hn(n,gt,i,!0).L;C(t)||(z(i,t),u.Ln(t))}return i},state:function(){return u.Zn()},update:function(n){u.Ln({},n)},destroy:function(){return u.fn()}};return a.update(!0),a}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/autoUpdateLoop.ts b/packages/overlayscrollbars/src/autoUpdateLoop.ts index 00debc8..0a93caa 100644 --- a/packages/overlayscrollbars/src/autoUpdateLoop.ts +++ b/packages/overlayscrollbars/src/autoUpdateLoop.ts @@ -23,7 +23,7 @@ const createAutoUpdateLoop = (): AutoUpdateLoop => { const updateLoopInterval = () => { loopInterval = isEmptyArray(intervals) ? defaultLoopInterval : Math.min.apply(null, intervals); }; - const { _update: updateTimeCache } = createCache((ctx) => ctx || performance.now(), { + const [updateTimeCache] = createCache({ _initialValue: performance.now(), _equal: (currTime, newTime) => { const delta = newTime! - currTime!; @@ -34,9 +34,9 @@ const createAutoUpdateLoop = (): AutoUpdateLoop => { /* istanbul ignore next */ if (!isEmptyArray(loopFunctions) && loopIsRunning) { loopId = rAF!(loop); - const { _changed, _value, _previous } = updateTimeCache(0, newTime); - if (_changed) { - runEach(loopFunctions, _value! - _previous!); + const [value, changed, previous] = updateTimeCache(newTime || performance.now()); + if (changed) { + runEach(loopFunctions, value - previous!); } } }; @@ -60,9 +60,9 @@ const createAutoUpdateLoop = (): AutoUpdateLoop => { push(loopFunctions, fn); if (!loopIsRunning && !isEmptyArray(loopFunctions)) { - //getEnvironment()._autoUpdateLoop = loopIsRunning = true; + // getEnvironment()._autoUpdateLoop = loopIsRunning = true; - updateTimeCache(true); + updateTimeCache(performance.now(), true); loop(); } @@ -70,7 +70,7 @@ const createAutoUpdateLoop = (): AutoUpdateLoop => { loopFunctions.splice(indexOf(loopFunctions, fn), 1); if (isEmptyArray(loopFunctions) && loopIsRunning) { - //getEnvironment()._autoUpdateLoop = loopIsRunning = false; + // getEnvironment()._autoUpdateLoop = loopIsRunning = false; cAF!(loopId!); loopId = undefined; diff --git a/packages/overlayscrollbars/src/lifecycles/lifecycleHub.ts b/packages/overlayscrollbars/src/lifecycles/lifecycleHub.ts index 5ff6561..6d4b32d 100644 --- a/packages/overlayscrollbars/src/lifecycles/lifecycleHub.ts +++ b/packages/overlayscrollbars/src/lifecycles/lifecycleHub.ts @@ -58,7 +58,7 @@ export interface LifecycleHubState { } export interface LifecycleHubInstance { - _update(changedOptions?: PartialOptions | null, force?: boolean): void; + _update(changedOptions: PartialOptions, force?: boolean): void; _state(): LifecycleHubState; _destroy(): void; } @@ -139,8 +139,8 @@ export const createLifecycleHub = ( ]; const updateLifecycles = ( - updateHints?: Partial | null, - changedOptions?: Partial | null, + updateHints: Partial, + changedOptions?: Partial, force?: boolean ) => { let { @@ -221,9 +221,9 @@ export const createLifecycleHub = ( _destroy: destroyObservers, } = lifecycleHubOservers(instance, updateLifecycles); - const update = (changedOptions?: Partial | null, force?: boolean) => - updateLifecycles(null, changedOptions, force); - const envUpdateListener = update.bind(null, null, true); + const update = (changedOptions: Partial, force?: boolean) => + updateLifecycles({}, changedOptions, force); + const envUpdateListener = update.bind(0, {}, true); addEnvironmentListener(envUpdateListener); console.log(getEnvironment()); diff --git a/packages/overlayscrollbars/src/lifecycles/lifecycleHubObservers.ts b/packages/overlayscrollbars/src/lifecycles/lifecycleHubObservers.ts index 7ca9934..763d665 100644 --- a/packages/overlayscrollbars/src/lifecycles/lifecycleHubObservers.ts +++ b/packages/overlayscrollbars/src/lifecycles/lifecycleHubObservers.ts @@ -44,7 +44,7 @@ const ignoreTargetChange = ( export const lifecycleHubOservers = ( instance: LifecycleHub, - updateLifecycles: (updateHints?: Partial | null) => unknown + updateLifecycles: (updateHints: Partial) => unknown ) => { let debounceTimeout: number | false | undefined; let debounceMaxDelay: number | false | undefined; @@ -57,34 +57,31 @@ export const lifecycleHubOservers = ( const contentMutationObserverAttr = _isTextarea ? baseStyleChangingAttrsTextarea : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea); - const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce( - updateLifecycles as (updateHints: Partial) => any, - { - _timeout: () => debounceTimeout, - _maxDelay: () => debounceMaxDelay, - _mergeParams(prev, curr) { - const { - _sizeChanged: prevSizeChanged, - _hostMutation: prevHostMutation, - _contentMutation: prevContentMutation, - } = prev[0]; - const { - _sizeChanged: currSizeChanged, - _hostMutation: currvHostMutation, - _contentMutation: currContentMutation, - } = curr[0]; - const merged: [Partial] = [ - { - _sizeChanged: prevSizeChanged || currSizeChanged, - _hostMutation: prevHostMutation || currvHostMutation, - _contentMutation: prevContentMutation || currContentMutation, - }, - ]; + const updateLifecyclesWithDebouncedAdaptiveUpdateHints = debounce(updateLifecycles, { + _timeout: () => debounceTimeout, + _maxDelay: () => debounceMaxDelay, + _mergeParams(prev, curr) { + const { + _sizeChanged: prevSizeChanged, + _hostMutation: prevHostMutation, + _contentMutation: prevContentMutation, + } = prev[0]; + const { + _sizeChanged: currSizeChanged, + _hostMutation: currvHostMutation, + _contentMutation: currContentMutation, + } = curr[0]; + const merged: [Partial] = [ + { + _sizeChanged: prevSizeChanged || currSizeChanged, + _hostMutation: prevHostMutation || currvHostMutation, + _contentMutation: prevContentMutation || currContentMutation, + }, + ]; - return merged; - }, - } - ); + return merged; + }, + }); const updateViewportAttrsFromHost = (attributes?: string[]) => { each(attributes || viewportAttrsFromTarget, (attribute) => { diff --git a/packages/overlayscrollbars/src/lifecycles/overflowLifecycle.ts b/packages/overlayscrollbars/src/lifecycles/overflowLifecycle.ts index e07cf11..2c6f047 100644 --- a/packages/overlayscrollbars/src/lifecycles/overflowLifecycle.ts +++ b/packages/overlayscrollbars/src/lifecycles/overflowLifecycle.ts @@ -22,12 +22,6 @@ import { OverflowBehavior } from 'options'; import { StyleObject } from 'typings'; import { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames'; -interface OverflowAmountCacheContext { - _viewportScrollSize: WH; - _viewportClientSize: WH; - _viewportSizeFraction: WH; -} - interface ViewportOverflowState { _scrollbarsHideOffset: XY; _scrollbarsHideOffsetArrange: XY; @@ -84,6 +78,27 @@ const setAxisOverflowStyle = ( }; }; +const getOverflowAmount = ( + viewportScrollSize: WH, + viewportClientSize: WH, + viewportSizeFraction: WH +) => ({ + w: max( + 0, + round( + max(0, viewportScrollSize.w - viewportClientSize.w) - + (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.w)) + ) + ), + h: max( + 0, + round( + max(0, viewportScrollSize.h - viewportClientSize.h) - + (fractionalPixelRatioTollerance() || max(0, viewportSizeFraction.h)) + ) + ), +}); + /** * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element. * @param lifecycleHub @@ -100,34 +115,15 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle = const { _host, _viewport, _viewportArrange } = _structureSetup._targetObj; const [updateViewportSizeFraction, getCurrentViewportSizeFraction] = createCache>( - sizeFraction.bind(0, _viewport), - whCacheOptions + whCacheOptions, + sizeFraction.bind(0, _viewport) ); const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache< WH - >(scrollSize.bind(0, _viewport), whCacheOptions); + >(whCacheOptions, scrollSize.bind(0, _viewport)); - const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache< - WH, - OverflowAmountCacheContext - >( - ({ _viewportScrollSize, _viewportClientSize, _viewportSizeFraction }) => ({ - w: max( - 0, - round( - max(0, _viewportScrollSize.w - _viewportClientSize.w) - - (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.w)) - ) - ), - h: max( - 0, - round( - max(0, _viewportScrollSize.h - _viewportClientSize.h) - - (fractionalPixelRatioTollerance() || max(0, _viewportSizeFraction.h)) - ) - ), - }), + const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache>( whCacheOptions ); @@ -195,19 +191,13 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle = x: styleObj.overflowX === 'scroll', y: styleObj.overflowY === 'scroll', }; + const nonScrollbarStylingHideOffset = { + x: overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x, + y: overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y, + }; const scrollbarsHideOffset = { - x: - scroll.x && !_nativeScrollbarStyling - ? overlaidX - ? arrangeHideOffset - : _nativeScrollbarSize.x - : 0, - y: - scroll.y && !_nativeScrollbarStyling - ? overlaidY - ? arrangeHideOffset - : _nativeScrollbarSize.y - : 0, + x: scroll.x && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.x : 0, + y: scroll.y && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset.y : 0, }; return { @@ -486,7 +476,7 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle = _viewportOverflowState: undoViewportArrangeOverflowState, } = undoViewportArrange( showNativeOverlaidScrollbars, - directionIsRTL!, + directionIsRTL, preMeasureViewportOverflowState ); const [ @@ -498,7 +488,7 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle = viewportScrollSizeChanged, ] = (viewportScrollSizeCache = updateViewportScrollSizeCache(force)); const viewportContentSize = clientSize(_viewport); - let arrangedViewportScrollSize = viewportScrollSize!; + let arrangedViewportScrollSize = viewportScrollSize; let arrangedViewportClientSize = viewportContentSize; _redoViewportArrange(); @@ -512,26 +502,29 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle = !showNativeOverlaidScrollbars && arrangeViewport( undoViewportArrangeOverflowState, - viewportScrollSize!, - viewportSizeFraction!, - directionIsRTL! + viewportScrollSize, + viewportSizeFraction, + directionIsRTL ) ) { arrangedViewportClientSize = clientSize(_viewport); arrangedViewportScrollSize = scrollSize(_viewport); } - overflowAmuntCache = updateOverflowAmountCache(force, { - _viewportSizeFraction: viewportSizeFraction!, - _viewportScrollSize: { - w: max(viewportScrollSize.w, arrangedViewportScrollSize.w), - h: max(viewportScrollSize.h, arrangedViewportScrollSize.h), - }, - _viewportClientSize: { - w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize.w), - h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize.h), - }, - }); + overflowAmuntCache = updateOverflowAmountCache( + getOverflowAmount( + { + w: max(viewportScrollSize.w, arrangedViewportScrollSize.w), + h: max(viewportScrollSize.h, arrangedViewportScrollSize.h), + }, // scroll size + { + w: arrangedViewportClientSize.w + max(0, viewportContentSize.w - viewportScrollSize.w), + h: arrangedViewportClientSize.h + max(0, viewportContentSize.h - viewportScrollSize.h), + }, // client size + viewportSizeFraction + ), + force + ); } const [viewportSizeFraction, viewportSizeFractionChanged] = viewportSizeFractionCache; @@ -560,17 +553,17 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle = const viewportOverflowState = setViewportOverflowState( showNativeOverlaidScrollbars, - overflowAmount!, + overflowAmount, overflow, viewportStyle ); const viewportArranged = arrangeViewport( viewportOverflowState, - viewportScrollSize!, - viewportSizeFraction!, - directionIsRTL! + viewportScrollSize, + viewportSizeFraction, + directionIsRTL ); - hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle); + hideNativeScrollbars(viewportOverflowState, directionIsRTL, viewportArranged, viewportStyle); if (adjustFlexboxGlue) { fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic); diff --git a/packages/overlayscrollbars/src/lifecycles/paddingLifecycle.ts b/packages/overlayscrollbars/src/lifecycles/paddingLifecycle.ts index 9bc7a0a..91bb514 100644 --- a/packages/overlayscrollbars/src/lifecycles/paddingLifecycle.ts +++ b/packages/overlayscrollbars/src/lifecycles/paddingLifecycle.ts @@ -1,4 +1,4 @@ -import { createCache, topRightBottomLeft, equalTRBL, style, TRBL } from 'support'; +import { createCache, topRightBottomLeft, equalTRBL, style } from 'support'; import { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub'; import { StyleObject } from 'typings'; import { getEnvironment } from 'environment'; @@ -11,12 +11,12 @@ import { getEnvironment } from 'environment'; export const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => { const { _structureSetup, _setLifecycleCommunication } = lifecycleHub; const { _host, _padding, _viewport } = _structureSetup._targetObj; - const [updatePaddingCache, currentPaddingCache] = createCache( - topRightBottomLeft.bind(0, _host, 'padding'), + const [updatePaddingCache, currentPaddingCache] = createCache( { _equal: equalTRBL, _initialValue: topRightBottomLeft(), - } + }, + topRightBottomLeft.bind(0, _host, 'padding', '') ); return (updateHints, checkOption, force) => { @@ -62,7 +62,7 @@ export const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => _setLifecycleCommunication({ _paddingInfo: { _absolute: !paddingRelative, - _padding: padding!, + _padding: padding, }, _viewportPaddingStyle: _padding ? viewportStyle diff --git a/packages/overlayscrollbars/src/observers/domObserver.ts b/packages/overlayscrollbars/src/observers/domObserver.ts index fafb662..15a349d 100644 --- a/packages/overlayscrollbars/src/observers/domObserver.ts +++ b/packages/overlayscrollbars/src/observers/domObserver.ts @@ -1,4 +1,17 @@ -import { each, noop, debounce, indexOf, isString, MutationObserverConstructor, isEmptyArray, on, attr, is, find, push } from 'support'; +import { + each, + noop, + debounce, + indexOf, + isString, + MutationObserverConstructor, + isEmptyArray, + on, + attr, + is, + find, + push, +} from 'support'; type DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any; @@ -22,7 +35,11 @@ interface DOMTargetObserverOptions extends DOMObserverOptionsBase { type ContentChangeArrayItem = [string?, string?] | null | undefined; -export type DOMObserverEventContentChange = Array | false | null | undefined; +export type DOMObserverEventContentChange = + | Array + | false + | null + | undefined; export type DOMObserverIgnoreContentChange = ( mutation: MutationRecord, @@ -42,7 +59,9 @@ export type DOMObserverCallback = ContentObserv ? DOMContentObserverCallback : DOMTargetObserverCallback; -export type DOMObserverOptions = ContentObserver extends true ? DOMContentObserverOptions : DOMTargetObserverOptions; +export type DOMObserverOptions = ContentObserver extends true + ? DOMContentObserverOptions + : DOMTargetObserverOptions; export interface DOMObserver { _destroy: () => void; @@ -56,7 +75,11 @@ export interface DOMObserver { * @param callback Callback which is called if one of the elements emits the corresponding event. * @returns A object which contains a set of helper functions to destroy and update the observation of elements. */ -const createEventContentChange = (target: Element, callback: (...args: any) => any, eventContentChange?: DOMObserverEventContentChange) => { +const createEventContentChange = ( + target: Element, + callback: (...args: any) => any, + eventContentChange?: DOMObserverEventContentChange +) => { let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements let destroyed = false; const _destroy = () => { @@ -68,7 +91,10 @@ const createEventContentChange = (target: Element, callback: (...args: any) => a if (item) { const selector = item[0]; const eventNames = item[1]; - const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target)); + const elements = + eventNames && + selector && + (getElements ? getElements(selector) : find(selector, target)); if (elements && elements.length && eventNames && isString(eventNames)) { push(arr, [elements, eventNames.trim()], true); @@ -141,7 +167,10 @@ export const createDOMObserver = ( _ignoreNestedTargetChange, _ignoreContentChange, } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {}; - const { _destroy: destroyEventContentChange, _updateElements: updateEventContentChangeElements } = createEventContentChange( + const { + _destroy: destroyEventContentChange, + _updateElements: updateEventContentChangeElements, + } = createEventContentChange( target, debounce( () => { @@ -159,7 +188,8 @@ export const createDOMObserver = ( const finalStyleChangingAttributes = _styleChangingAttributes || []; const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); const observerCallback = (mutations: MutationRecord[]) => { - const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop; + const ignoreTargetChange = + (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop; const ignoreContentChange = _ignoreContentChange || noop; const targetChangedAttrs: string[] = []; const totalAddedNodes: Node[] = []; @@ -171,19 +201,25 @@ export const createDOMObserver = ( const isAttributesType = type === 'attributes'; const isChildListType = type === 'childList'; const targetIsMutationTarget = target === mutationTarget; - const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0; + const attributeValue = + isAttributesType && isString(attributeName) + ? attr(mutationTarget as HTMLElement, attributeName!) + : 0; const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue; - const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; + const styleChangingAttrChanged = + indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged; // if is content observer and something changed in children if (isContentObserver && !targetIsMutationTarget) { const notOnlyAttrChanged = !isAttributesType; const contentAttrChanged = isAttributesType && styleChangingAttrChanged; - const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector); + const isNestedTarget = + contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector); const baseAssertion = isNestedTarget - ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null) + ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue) : notOnlyAttrChanged || contentAttrChanged; - const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); + const contentFinalChanged = + baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); push(totalAddedNodes, addedNodes); @@ -195,7 +231,7 @@ export const createDOMObserver = ( !isContentObserver && targetIsMutationTarget && attributeChanged && - !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null) + !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue) ) { push(targetChangedAttrs, attributeName!); targetStyleChanged = targetStyleChanged || styleChangingAttrChanged; diff --git a/packages/overlayscrollbars/src/observers/sizeObserver.ts b/packages/overlayscrollbars/src/observers/sizeObserver.ts index fe0d14b..a418a86 100644 --- a/packages/overlayscrollbars/src/observers/sizeObserver.ts +++ b/packages/overlayscrollbars/src/observers/sizeObserver.ts @@ -81,10 +81,7 @@ export const createSizeObserver = ( const sizeObserver = baseElements[0] as HTMLElement; const listenerElement = sizeObserver.firstChild as HTMLElement; const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver); - const [updateResizeObserverContentRectCache] = createCache< - DOMRectReadOnly | undefined, - DOMRectReadOnly - >(0, { + const [updateResizeObserverContentRectCache] = createCache({ _initialValue: undefined, _alwaysUpdateValues: true, _equal: (currVal, newVal) => @@ -112,7 +109,6 @@ export const createSizeObserver = ( // if triggered from RO. if (isResizeObserverCall) { const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache( - 0, (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect ); const hasDimensions = domRectHasDimensions(currRContentRect); @@ -234,9 +230,12 @@ export const createSizeObserver = ( } if (observeDirectionChange) { - directionIsRTLCache = createCache(getIsDirectionRTL, { - _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change - }); + directionIsRTLCache = createCache( + { + _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change + }, + getIsDirectionRTL + ); const [updateDirectionIsRTLCache] = directionIsRTLCache; push( diff --git a/packages/overlayscrollbars/src/observers/trinsicObserver.ts b/packages/overlayscrollbars/src/observers/trinsicObserver.ts index 6fdf21f..ae51052 100644 --- a/packages/overlayscrollbars/src/observers/trinsicObserver.ts +++ b/packages/overlayscrollbars/src/observers/trinsicObserver.ts @@ -22,6 +22,11 @@ export interface TrinsicObserver { }; } +const isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean => + (ioEntryOrSize as WH).h === 0 || + (ioEntryOrSize as IntersectionObserverEntry).isIntersecting || + (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0; + /** * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element. * @param target The element which shall be observed. @@ -34,24 +39,15 @@ export const createTrinsicObserver = ( ): TrinsicObserver => { const trinsicObserver = createDiv(classNameTrinsicObserver); const offListeners: (() => void)[] = []; - const [updateHeightIntrinsicCache, getCurrentHeightIntrinsicCache] = createCache< - boolean, - IntersectionObserverEntry | WH - >( - (ioEntryOrSize: IntersectionObserverEntry | WH) => - (ioEntryOrSize! as WH).h === 0 || - (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting || - (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0, - { - _initialValue: false, - } - ); + const [updateHeightIntrinsicCache, getCurrentHeightIntrinsicCache] = createCache({ + _initialValue: false, + }); const triggerOnTrinsicChangedCallback = ( updateValue?: IntersectionObserverEntry | WH ) => { if (updateValue) { - const heightIntrinsic = updateHeightIntrinsicCache(0, updateValue); + const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue)); const [, heightIntrinsicChanged] = heightIntrinsic; if (heightIntrinsicChanged) { diff --git a/packages/overlayscrollbars/src/overlayscrollbars.ts b/packages/overlayscrollbars/src/overlayscrollbars.ts index 0503cc4..a53c9ba 100644 --- a/packages/overlayscrollbars/src/overlayscrollbars.ts +++ b/packages/overlayscrollbars/src/overlayscrollbars.ts @@ -59,7 +59,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( }, state: () => lifecycleHub._state(), update(force?: boolean) { - lifecycleHub._update(null, force); + lifecycleHub._update({}, force); }, destroy: () => lifecycleHub._destroy(), }; diff --git a/packages/overlayscrollbars/src/support/cache/cache.ts b/packages/overlayscrollbars/src/support/cache/cache.ts index cdfe5b9..6cfcec5 100644 --- a/packages/overlayscrollbars/src/support/cache/cache.ts +++ b/packages/overlayscrollbars/src/support/cache/cache.ts @@ -1,49 +1,49 @@ -export type CacheValues = [ - T, // value - boolean, // changed - T | undefined // previous -]; - -export type Cache = [ - CacheUpdate, - (force?: boolean) => CacheValues // getCurrent -]; - -export interface CacheOptions { +export interface CacheOptions { // initial value of _value. - _initialValue: T; + _initialValue: Value; // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed. - _equal?: EqualCachePropFunction; + _equal?: EqualCachePropFunction; // If true always updates _value and _previous, otherwise they update only when they changed. _alwaysUpdateValues?: boolean; } -export type CacheUpdate = undefined extends C - ? (force?: boolean | 0, context?: C) => CacheValues - : (force: boolean | 0, context: C) => CacheValues; +export type CacheValues = [ + T, // value + boolean, // changed + T? // previous +]; -export type UpdateCachePropFunction = undefined extends Ctx - ? (context?: Ctx, current?: Value, previous?: Value) => Value - : Ctx extends Value - ? ((context: Ctx, current?: Value, previous?: Value) => Value) | 0 - : (context: Ctx, current?: Value, previous?: Value) => Value; +export type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean; -export type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean; +export type CacheUpdater = (current: Value, previous?: Value) => Value; -export const createCache = ( - update: UpdateCachePropFunction, - options: CacheOptions -): Cache => { +export type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues; + +export type UpdateCache = (force?: boolean) => CacheValues; + +export type GetCurrentCache = (force?: boolean) => CacheValues; + +export type Cache = [UpdateCache, GetCurrentCache]; + +export type CacheContextual = [UpdateCacheContextual, GetCurrentCache]; + +export function createCache(options: CacheOptions): CacheContextual; +export function createCache( + options: CacheOptions, + update: CacheUpdater +): Cache; +export function createCache( + options: CacheOptions, + update?: CacheUpdater +): CacheContextual | Cache { const { _initialValue, _equal, _alwaysUpdateValues } = options; let _value: Value = _initialValue; let _previous: Value | undefined; - const cacheUpdate = ((force?: boolean | 0, context?: Ctx) => { + const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => { const curr = _value; - // @ts-ignore - // update can only not be a function if C extends T as described in "UpdateCachePropFunction" type definition - // if C extends T the cast (context as T) is perfectly valid - const newVal = update ? update(context, _value, _previous) : (context as T); + + const newVal = newValue; const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal); if (changed || _alwaysUpdateValues) { @@ -52,14 +52,17 @@ export const createCache = ( } return [_value, changed, _previous]; - }) as CacheUpdate; + }; + const cacheUpdateIsolated: UpdateCache = (force?) => + cacheUpdateContextual(update!(_value, _previous), force); - return [ - cacheUpdate, - (force?: boolean) => [ - _value, - !!force, // changed - _previous, - ], + const getCurrentCache: GetCurrentCache = (force?: boolean) => [ + _value, + !!force, // changed + _previous, ]; -}; + + return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as + | CacheContextual + | Cache; +} diff --git a/packages/overlayscrollbars/src/support/compatibility/apis.ts b/packages/overlayscrollbars/src/support/compatibility/apis.ts index d9c7ee0..b593ac8 100644 --- a/packages/overlayscrollbars/src/support/compatibility/apis.ts +++ b/packages/overlayscrollbars/src/support/compatibility/apis.ts @@ -1,7 +1,9 @@ import { jsAPI } from 'support/compatibility/vendors'; export const MutationObserverConstructor = jsAPI('MutationObserver'); -export const IntersectionObserverConstructor = jsAPI('IntersectionObserver'); +export const IntersectionObserverConstructor = jsAPI( + 'IntersectionObserver' +); export const ResizeObserverConstructor = jsAPI('ResizeObserver'); export const cAF = jsAPI('cancelAnimationFrame'); export const rAF = jsAPI('requestAnimationFrame'); diff --git a/packages/overlayscrollbars/src/support/dom/attribute.ts b/packages/overlayscrollbars/src/support/dom/attribute.ts index 62982e6..890bd05 100644 --- a/packages/overlayscrollbars/src/support/dom/attribute.ts +++ b/packages/overlayscrollbars/src/support/dom/attribute.ts @@ -23,7 +23,11 @@ function getSetProp( */ export function attr(elm: HTMLElement | null, attrName: string): string | null; export function attr(elm: HTMLElement | null, attrName: string, value: string): void; -export function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void { +export function attr( + elm: HTMLElement | null, + attrName: string, + value?: string +): string | null | void { if (isUndefined(value)) { return elm ? elm.getAttribute(attrName) : null; } diff --git a/packages/overlayscrollbars/src/support/dom/class.ts b/packages/overlayscrollbars/src/support/dom/class.ts index efc0930..1f771e5 100644 --- a/packages/overlayscrollbars/src/support/dom/class.ts +++ b/packages/overlayscrollbars/src/support/dom/class.ts @@ -53,7 +53,10 @@ export const removeClass = (elm: Element | false | null | undefined, className: * @param classNameA ClassName A. * @param classNameB ClassName B. */ -export const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => { +export const diffClass = ( + classNameA: string | null | undefined, + classNameB: string | null | undefined +) => { const classNameASplit = classNameA && classNameA.split(' '); const classNameBSplit = classNameB && classNameB.split(' '); const tempObj = {}; diff --git a/packages/overlayscrollbars/src/support/dom/dimensions.ts b/packages/overlayscrollbars/src/support/dom/dimensions.ts index f0599bf..ccb6445 100644 --- a/packages/overlayscrollbars/src/support/dom/dimensions.ts +++ b/packages/overlayscrollbars/src/support/dom/dimensions.ts @@ -3,7 +3,8 @@ export interface WH { h: T; } -const elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length); +const elementHasDimensions = (elm: HTMLElement): boolean => + !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length); const zeroObj: WH = { w: 0, h: 0, @@ -63,4 +64,5 @@ export const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBound * Determines whether the passed element has any dimensions. * @param elm The element. */ -export const hasDimensions = (elm: HTMLElement | null | undefined): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false); +export const hasDimensions = (elm: HTMLElement | null | undefined): boolean => + elm ? elementHasDimensions(elm as HTMLElement) : false; diff --git a/packages/overlayscrollbars/src/support/dom/events.ts b/packages/overlayscrollbars/src/support/dom/events.ts index 622dcfc..1c122af 100644 --- a/packages/overlayscrollbars/src/support/dom/events.ts +++ b/packages/overlayscrollbars/src/support/dom/events.ts @@ -37,7 +37,12 @@ export interface OnOptions { * @param listener The listener which shall be removed. * @param capture The options of the removed listener. */ -export const off = (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean): void => { +export const off = ( + target: EventTarget, + eventNames: string, + listener: (event: T) => any, + capture?: boolean +): void => { each(splitEventNames(eventNames), (eventName) => { target.removeEventListener(eventName, listener as EventListener, capture); }); @@ -99,4 +104,5 @@ export const preventDefault = (evt: Event): void => evt.preventDefault(); * Shorthand for the stopPropagation and preventDefault event Method. * @param evt The event of which the stopPropagation and preventDefault methods shall be called. */ -export const stopAndPrevent = (evt: Event): void => (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined); +export const stopAndPrevent = (evt: Event): void => + (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined); diff --git a/packages/overlayscrollbars/src/support/dom/manipulation.ts b/packages/overlayscrollbars/src/support/dom/manipulation.ts index 49c2094..78cedd5 100644 --- a/packages/overlayscrollbars/src/support/dom/manipulation.ts +++ b/packages/overlayscrollbars/src/support/dom/manipulation.ts @@ -10,7 +10,11 @@ type NodeCollection = ArrayLike | Node | false | null | undefined; * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end. * @param insertedElms The Nodes which shall be inserted. */ -const before = (parentElm: Node | false | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => { +const before = ( + parentElm: Node | false | null | undefined, + preferredAnchor: Node | null | undefined, + insertedElms: NodeCollection +): void => { if (insertedElms) { let anchor: Node | null | undefined = preferredAnchor; let fragment: DocumentFragment | Node | null | undefined; @@ -68,7 +72,10 @@ export const prependChildren = (node: Node | null | undefined, children: NodeCol * @param node The Node before which the given Nodes shall be inserted. * @param insertedNodes The Nodes which shall be inserted. */ -export const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => { +export const insertBefore = ( + node: Node | null | undefined, + insertedNodes: NodeCollection +): void => { before(parent(node), node, insertedNodes); }; diff --git a/packages/overlayscrollbars/src/support/dom/style.ts b/packages/overlayscrollbars/src/support/dom/style.ts index 318c731..22d91a1 100644 --- a/packages/overlayscrollbars/src/support/dom/style.ts +++ b/packages/overlayscrollbars/src/support/dom/style.ts @@ -10,19 +10,19 @@ export interface TRBL { } const cssNumber = { - //animationiterationcount: 1, - //columncount: 1, - //fillopacity: 1, - //flexgrow: 1, - //flexshrink: 1, - //fontweight: 1, - //lineheight: 1, + // animationiterationcount: 1, + // columncount: 1, + // fillopacity: 1, + // flexgrow: 1, + // flexshrink: 1, + // fontweight: 1, + // lineheight: 1, + // order: 1, + // orphans: 1, + // widows: 1, + // zoom: 1, opacity: 1, - //order: 1, - //orphans: 1, - //widows: 1, zindex: 1, - //zoom: 1, }; const parseToZeroOrNumber = (value: string, toFloat?: boolean): number => { @@ -31,18 +31,25 @@ const parseToZeroOrNumber = (value: string, toFloat?: boolean): number => { /* istanbul ignore next */ return Number.isNaN(num) ? 0 : num; }; -const adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val); +const adaptCSSVal = (prop: string, val: string | number): string | number => + !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val; const getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string => /* istanbul ignore next */ - computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop]; -const setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => { + computedStyle != null + ? computedStyle[prop] || computedStyle.getPropertyValue(prop) + : elm.style[prop]; +const setCSSVal = ( + elm: HTMLElement | false | null | undefined, + prop: string, + val: string | number +): void => { try { if (elm) { - const { style } = elm; - if (!isUndefined(style[prop])) { - style[prop] = adaptCSSVal(prop, val); + const { style: elmStyle } = elm; + if (!isUndefined(elmStyle[prop])) { + elmStyle[prop] = adaptCSSVal(prop, val); } else { - style.setProperty(prop, val as string); + elmStyle.setProperty(prop, val as string); } } } catch (e) {} @@ -53,9 +60,18 @@ const setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, va * @param elm The element to which the styles shall be applied to / be read from. * @param styles The styles which shall be set or read. */ -export function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void; -export function style(elm: HTMLElement | false | null | undefined, styles: string): string; -export function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string }; +export function style( + elm: HTMLElement | false | null | undefined, + styles: StyleObject +): void; +export function style( + elm: HTMLElement | false | null | undefined, + styles: string +): string; +export function style( + elm: HTMLElement | false | null | undefined, + styles: Array | string +): { [key: string]: string }; export function style( elm: HTMLElement | false | null | undefined, styles: StyleObject | Array | string @@ -101,7 +117,11 @@ export const show = (elm: HTMLElement | false | null | undefined): void => { * @param propertyPrefix The css property prefix. (e.g. "border") * @param propertySuffix The css property suffix. (e.g. "width") */ -export const topRightBottomLeft = (elm?: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => { +export const topRightBottomLeft = ( + elm?: HTMLElement | false | null | undefined, + propertyPrefix?: string, + propertySuffix?: string +): TRBL => { const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : ''; const finalSuffix = propertySuffix ? `-${propertySuffix}` : ''; const top = `${finalPrefix}top${finalSuffix}`; diff --git a/packages/overlayscrollbars/src/support/dom/traversal.ts b/packages/overlayscrollbars/src/support/dom/traversal.ts index b89be2a..8d358eb 100644 --- a/packages/overlayscrollbars/src/support/dom/traversal.ts +++ b/packages/overlayscrollbars/src/support/dom/traversal.ts @@ -65,7 +65,8 @@ const children = (elm: InputElementType, selector?: string): ReadonlyArray => (elm ? from(elm.childNodes) : []); +const contents = (elm: InputElementType): ReadonlyArray => + elm ? from(elm.childNodes) : []; /** * Returns the parent element of the passed element, or null if the passed element is null. @@ -97,7 +98,11 @@ const closest = (elm: InputElementType, selector: string): OutputElementType => * @param highBoundarySelector The high boundary selector. * @param deepBoundarySelector The deep boundary selector. */ -const liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => { +const liesBetween = ( + elm: InputElementType, + highBoundarySelector: string, + deepBoundarySelector: string +): boolean => { const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector); const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm); diff --git a/packages/overlayscrollbars/src/support/options/transformation.ts b/packages/overlayscrollbars/src/support/options/transformation.ts index 1ba5eb7..85bbfdb 100644 --- a/packages/overlayscrollbars/src/support/options/transformation.ts +++ b/packages/overlayscrollbars/src/support/options/transformation.ts @@ -14,7 +14,10 @@ export interface OptionsWithOptionsTemplateTransformation { _options: T; } -export type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue]; +export type OptionsWithOptionsTemplateValue = [ + T, + OptionsTemplateValue +]; export type OptionsWithOptionsTemplate = { [P in keyof T]: T[P] extends OptionsObjectType @@ -29,14 +32,17 @@ export type OptionsWithOptionsTemplate = { * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted. * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object. */ -export const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): OptionsWithOptionsTemplateTransformation => { +export const transformOptions = ( + optionsWithOptionsTemplate: OptionsWithOptionsTemplate +): OptionsWithOptionsTemplateTransformation => { const result: any = { _template: {}, _options: {}, }; each(keys(optionsWithOptionsTemplate), (key: Extract) => { - const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key]; + const val: PlainObject | OptionsTemplateTypes | Array = + optionsWithOptionsTemplate[key]; if (isArray(val)) { result._template[key] = val[1]; diff --git a/packages/overlayscrollbars/src/support/options/validation.ts b/packages/overlayscrollbars/src/support/options/validation.ts index ed062e3..2b3ef20 100644 --- a/packages/overlayscrollbars/src/support/options/validation.ts +++ b/packages/overlayscrollbars/src/support/options/validation.ts @@ -1,10 +1,21 @@ import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils'; -import { type, isArray, isUndefined, isPlainObject, isString, isNumber, isBoolean } from 'support/utils/types'; +import { + type, + isArray, + isUndefined, + isPlainObject, + isString, + isNumber, + isBoolean, +} from 'support/utils/types'; import { PlainObject } from 'typings'; export type OptionsObjectType = Record; export type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown; -export type OptionsTemplateType = ExtractPropsKey; +export type OptionsTemplateType = ExtractPropsKey< + OptionsTemplateTypeMap, + T +>; export type OptionsTemplateTypes = keyof OptionsTemplateTypeMap; export type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap]; @@ -71,13 +82,18 @@ const templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__' * Key = normal type string * value = template type string */ -const optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce( - (result, item) => { - result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1]; - return result; - }, - {} as OptionsTemplateTypesDictionary -); +const optionsTemplateTypes: OptionsTemplateTypesDictionary = [ + 'boolean', + 'number', + 'string', + 'array', + 'object', + 'function', + 'null', +].reduce((result, item) => { + result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1]; + return result; +}, {} as OptionsTemplateTypesDictionary); /** * Validates the given options object according to the given template object and returns a object which looks like: @@ -111,13 +127,20 @@ const validateRecursive = ( each(props, (prop: Extract) => { const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop]; const optionsValue: any = options[prop]; - const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop]; + const templateValue: PlainObject | string | OptionsTemplateTypes | Array = + template[prop]; const templateIsComplex = isPlainObject(templateValue); const propPrefix = propPath ? `${propPath}.` : ''; // if the template has a object as value, it means that the options are complex (verschachtelt) if (templateIsComplex && isPlainObject(optionsValue)) { - const validatedResult = validateRecursive(optionsValue, templateValue as T, optionsDiffValue, doWriteErrors, propPrefix + prop); + const validatedResult = validateRecursive( + optionsValue, + templateValue as T, + optionsDiffValue, + doWriteErrors, + propPrefix + prop + ); validatedOptions[prop] = validatedResult._validated as any; optionsCopy[prop] = validatedResult._foreign as any; @@ -163,9 +186,15 @@ const validateRecursive = ( }); if (isValid) { - const isPrimitiveArr = isArray(optionsValue) && !optionsValue.some((val) => !isNumber(val) && !isString(val) && !isBoolean(val)); + const isPrimitiveArr = + isArray(optionsValue) && + !optionsValue.some((val) => !isNumber(val) && !isString(val) && !isBoolean(val)); const doStringifyComparison = isPrimitiveArr || isPlainObject(optionsValue); - if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) { + if ( + doStringifyComparison + ? stringify(optionsValue) !== stringify(optionsDiffValue) + : optionsValue !== optionsDiffValue + ) { validatedOptions[prop] = optionsValue; } } else if (doWriteErrors) { @@ -173,7 +202,11 @@ const validateRecursive = ( `${ `The option "${propPrefix}${prop}" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of "${optionsValue}".\r\n` + `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\r\n` - }${errorEnumStrings.length > 0 ? `\r\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}` + }${ + errorEnumStrings.length > 0 + ? `\r\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` + : '' + }` ); } @@ -209,7 +242,7 @@ const validateOptions = ( template: OptionsTemplate, optionsDiff?: T | null, doWriteErrors?: boolean -): OptionsValidationResult => { +): OptionsValidationResult => /* if (!isEmptyObject(foreign) && doWriteErrors) console.warn(`The following options are discarded due to invalidity:\r\n ${window.JSON.stringify(foreign, null, 2)}`); @@ -219,7 +252,6 @@ const validateOptions = ( Object.assign(result.validated, foreign); } */ - return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false); -}; + validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false); export { validateOptions, optionsTemplateTypes }; diff --git a/packages/overlayscrollbars/src/support/utils/array.ts b/packages/overlayscrollbars/src/support/utils/array.ts index ece9af8..4d27494 100644 --- a/packages/overlayscrollbars/src/support/utils/array.ts +++ b/packages/overlayscrollbars/src/support/utils/array.ts @@ -1,4 +1,4 @@ -import { isArrayLike, isString } from 'support/utils/types'; +import { isArrayLike, isString, isArray } from 'support/utils/types'; import { PlainObject } from 'typings'; type RunEachItem = ((...args: any) => any | any[]) | null | undefined; @@ -56,21 +56,17 @@ export function each( * @param item The item. * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. */ -export const indexOf = (arr: Array, item: T, fromIndex?: number): number => - arr.indexOf(item, fromIndex); +export const indexOf = (arr: T[], item: T, fromIndex?: number): number => + isArray(arr) ? arr.indexOf(item, fromIndex) : -1; /** * Pushesh all given items into the given array and returns it. * @param array The array the items shall be pushed into. * @param items The items which shall be pushed into the array. */ -export const push = ( - array: Array, - items: T | ArrayLike, - arrayIsSingleItem?: boolean -): Array => { +export const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => { !arrayIsSingleItem && !isString(items) && isArrayLike(items) - ? Array.prototype.push.apply(array, items as Array) + ? Array.prototype.push.apply(array, items as T[]) : array.push(items as T); return array; }; @@ -83,7 +79,7 @@ export const from = (arr: ArrayLike) => { if (Array.from) { return Array.from(arr); } - const result: Array = []; + const result: T[] = []; each(arr, (elm) => { push(result, elm); @@ -96,7 +92,7 @@ export const from = (arr: ArrayLike) => { * Check whether the passed array is empty. * @param array The array which shall be checked. */ -export const isEmptyArray = (array: Array | null | undefined): boolean => +export const isEmptyArray = (array: any[] | null | undefined): boolean => !!array && array.length === 0; /** diff --git a/packages/overlayscrollbars/src/support/utils/object.ts b/packages/overlayscrollbars/src/support/utils/object.ts index cf6c57d..db817de 100644 --- a/packages/overlayscrollbars/src/support/utils/object.ts +++ b/packages/overlayscrollbars/src/support/utils/object.ts @@ -6,7 +6,8 @@ import { each } from 'support/utils/array'; * @param obj The object. * @param prop The name of the property. */ -export const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop); +export const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => + Object.prototype.hasOwnProperty.call(obj, prop); /** * Returns the names of the enumerable string properties and methods of an object. @@ -17,9 +18,27 @@ export const keys = (obj: any): Array => (obj ? Object.keys(obj) : []); // https://github.com/jquery/jquery/blob/master/src/core.js#L116 export function assignDeep(target: T, object1: U): T & U; export function assignDeep(target: T, object1: U, object2: V): T & U & V; -export function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W; -export function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X; -export function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y; +export function assignDeep( + target: T, + object1: U, + object2: V, + object3: W +): T & U & V & W; +export function assignDeep( + target: T, + object1: U, + object2: V, + object3: W, + object4: X +): T & U & V & W & X; +export function assignDeep( + target: T, + object1: U, + object2: V, + object3: W, + object4: X, + object5: Y +): T & U & V & W & X & Y; export function assignDeep( target: T, object1?: U, diff --git a/packages/overlayscrollbars/src/support/utils/types.ts b/packages/overlayscrollbars/src/support/utils/types.ts index 445d60c..9ae8f96 100644 --- a/packages/overlayscrollbars/src/support/utils/types.ts +++ b/packages/overlayscrollbars/src/support/utils/types.ts @@ -11,14 +11,13 @@ export function isNull(obj: any): obj is null { return obj === null; } -export const type: (obj: any) => string = (obj) => { - return isUndefined(obj) || isNull(obj) +export const type: (obj: any) => string = (obj) => + isUndefined(obj) || isNull(obj) ? `${obj}` : toString .call(obj) .replace(/^\[object (.+)\]$/, '$1') .toLowerCase(); -}; export function isNumber(obj: any): obj is number { return typeof obj === 'number'; @@ -52,7 +51,11 @@ export function isArrayLike(obj: any): obj is Array const length = !!obj && obj.length; const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq - return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false; + return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) + ? length > 0 && isObject(obj) + ? length - 1 in obj + : true + : false; } /** @@ -88,7 +91,11 @@ export function isPlainObject(obj: any): obj is PlainObject { */ export function isHTMLElement(obj: any): obj is HTMLElement { const instanceofObj = window.HTMLElement; - return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false; + return obj + ? instanceofObj + ? obj instanceof instanceofObj + : obj.nodeType === ElementNodeType + : false; } /** @@ -97,5 +104,9 @@ export function isHTMLElement(obj: any): obj is HTMLElement { */ export function isElement(obj: any): obj is Element { const instanceofObj = window.Element; - return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false; + return obj + ? instanceofObj + ? obj instanceof instanceofObj + : obj.nodeType === ElementNodeType + : false; } diff --git a/packages/overlayscrollbars/tests/jest/support/cache/cache.test.ts b/packages/overlayscrollbars/tests/jest/support/cache/cache.test.ts index eafd9bb..6515ab9 100644 --- a/packages/overlayscrollbars/tests/jest/support/cache/cache.test.ts +++ b/packages/overlayscrollbars/tests/jest/support/cache/cache.test.ts @@ -1,128 +1,122 @@ import { createCache } from 'support/cache'; -const createUpdater = (updaterReturn: (i: number) => T) => { - const fn = jest.fn(); +const createUpdater = (updaterReturn: (i: number) => T) => { let index = 0; - const update = (context?: C, curr?: T, prev?: T): T => { - fn(context, curr, prev); - index += 1; - return updaterReturn(index); - }; + const updater = jest.fn( + (): T => { + index += 1; + return updaterReturn(index); + } + ); - return [fn, update]; + return updater; }; describe('cache', () => { test('creates and updates cache', () => { - const [fn, updater] = createUpdater((i) => `${i}`); + const updater = createUpdater((i) => `${i}`); const _initialValue = ''; - const [updateCache, getCurrentCache] = createCache(updater, { - _initialValue, - }); + const [updateCache, getCurrentCache] = createCache( + { + _initialValue, + }, + updater + ); let [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, _initialValue, undefined); + expect(updater).toHaveBeenLastCalledWith(_initialValue, undefined); expect(value).toBe('1'); expect(previous).toBe(_initialValue); expect(changed).toBe(true); [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, '1', _initialValue); + expect(updater).toHaveBeenLastCalledWith('1', _initialValue); expect(value).toBe('2'); expect(previous).toBe('1'); expect(changed).toBe(true); }); - describe('context', () => { - test('creates and updates cache with context', () => { + describe('contextual cache', () => { + test('creates and updates contextual cache', () => { interface ContextObj { test: string; even: number; } const _initialValue = false; - const updateFn = jest.fn(); - const updater = (context?: ContextObj, current?: boolean, previous?: boolean) => { - updateFn(context, current, previous); - return context!.test === 'test' || context!.even % 2 === 0; - }; - const [updateCache, getCurrentCache] = createCache(updater, { _initialValue }); + const updater = (context: ContextObj) => context!.test === 'test' || context!.even % 2 === 0; + const [updateCache, getCurrentCache] = createCache({ _initialValue }); const firstCtx = { test: 'test', even: 2 }; - let [value, changed, previous] = updateCache(0, firstCtx); + let [value, changed, previous] = updateCache(updater(firstCtx)); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(updateFn).toHaveBeenLastCalledWith(firstCtx, _initialValue, undefined); expect(value).toBe(true); expect(previous).toBe(_initialValue); expect(changed).toBe(true); expect([value, false, previous]).toEqual(getCurrentCache()); - [value, changed, previous] = updateCache(0, firstCtx); + [value, changed, previous] = updateCache(updater(firstCtx)); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(updateFn).toHaveBeenLastCalledWith(firstCtx, true, _initialValue); expect(value).toBe(true); expect(previous).toBe(_initialValue); expect(changed).toBe(false); const scndCtx = { test: 'nah', even: 1 }; - [value, changed, previous] = updateCache(0, scndCtx); + [value, changed, previous] = updateCache(updater(scndCtx)); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(updateFn).toHaveBeenLastCalledWith(scndCtx, true, _initialValue); expect(value).toBe(false); expect(previous).toBe(true); expect(changed).toBe(true); - [value, changed, previous] = updateCache(0, scndCtx); + [value, changed, previous] = updateCache(updater(scndCtx)); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(updateFn).toHaveBeenLastCalledWith(scndCtx, false, true); expect(value).toBe(false); expect(previous).toBe(true); expect(changed).toBe(false); - [value, changed, previous] = updateCache(true, scndCtx); + [value, changed, previous] = updateCache(updater(scndCtx), true); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(updateFn).toHaveBeenLastCalledWith(scndCtx, false, true); expect(value).toBe(false); expect(previous).toBe(false); expect(changed).toBe(true); }); - test('creates and updates cache with context shorthand', () => { + test('creates and updates contextual cache with direct passing', () => { interface ContextObj { test: string; even: number; } const _initialValue = undefined; const firstCtx = { test: 'test', even: 2 }; - const [_update] = createCache(0, { + const [updateCache] = createCache({ _initialValue, }); - let [value, changed, previous] = _update(0, firstCtx); + let [value, changed, previous] = updateCache(firstCtx); expect(value).toBe(firstCtx); expect(previous).toBe(undefined); expect(changed).toBe(true); - [value, changed, previous] = _update(0, firstCtx); + [value, changed, previous] = updateCache(firstCtx); expect(value).toBe(firstCtx); expect(previous).toBe(undefined); expect(changed).toBe(false); const scndCtx = { test: 'nah', even: 1 }; - [value, changed, previous] = _update(0, scndCtx); + [value, changed, previous] = updateCache(scndCtx); expect(value).toBe(scndCtx); expect(previous).toBe(firstCtx); expect(changed).toBe(true); - [value, changed, previous] = _update(0, scndCtx); + [value, changed, previous] = updateCache(scndCtx); expect(value).toBe(scndCtx); expect(previous).toBe(firstCtx); expect(changed).toBe(false); - [value, changed, previous] = _update(true, scndCtx); + [value, changed, previous] = updateCache(scndCtx, true); expect(value).toBe(scndCtx); expect(previous).toBe(scndCtx); expect(changed).toBe(true); @@ -131,65 +125,73 @@ describe('cache', () => { describe('equal', () => { test('with equal always true', () => { - const [fn, updater] = createUpdater((i) => i); - const [updateCache, getCurrentCache] = createCache(updater, { - _initialValue: undefined, - _equal: () => true, - }); + const updater = createUpdater((i) => i); + const [updateCache, getCurrentCache] = createCache( + { + _initialValue: undefined, + _equal: () => true, + }, + updater + ); let [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, undefined, undefined); + expect(updater).toHaveBeenLastCalledWith(undefined, undefined); expect(value).toBe(undefined); expect(previous).toBe(undefined); expect(changed).toBe(false); [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, undefined, undefined); + expect(updater).toHaveBeenLastCalledWith(undefined, undefined); expect(value).toBe(undefined); expect(previous).toBe(undefined); expect(changed).toBe(false); }); test('with equal always false', () => { - const [fn, updater] = createUpdater(() => 1); - const [updateCache, getCurrentCache] = createCache(updater, { - _initialValue: undefined, - _equal: () => false, - }); + const updater = createUpdater(() => 1); + const [updateCache, getCurrentCache] = createCache( + { + _initialValue: undefined, + _equal: () => false, + }, + updater + ); let [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, undefined, undefined); + expect(updater).toHaveBeenLastCalledWith(undefined, undefined); expect(value).toBe(1); expect(previous).toBe(undefined); expect(changed).toBe(true); [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, 1, undefined); + expect(updater).toHaveBeenLastCalledWith(1, undefined); expect(value).toBe(1); expect(previous).toBe(1); expect(changed).toBe(true); }); test('with object equal', () => { - const obj = { a: -1, b: -1 }; - const [fn, updater] = createUpdater((i) => ({ a: i, b: i + 1 })); - const [updateCache] = createCache(updater, { - _initialValue: undefined, - _equal: (a, b) => a?.a === b?.a && a?.b === b?.b, - }); + const updater = createUpdater((i) => ({ a: i, b: i + 1 })); + const [updateCache] = createCache( + { + _initialValue: undefined, + _equal: (a, b) => a?.a === b?.a && a?.b === b?.b, + }, + updater + ); let [value, changed, previous] = updateCache(); - expect(fn).toHaveBeenLastCalledWith(undefined, undefined, undefined); + expect(updater).toHaveBeenLastCalledWith(undefined, undefined); expect(value).toEqual({ a: 1, b: 2 }); expect(previous).toBe(undefined); expect(changed).toBe(true); [value, changed, previous] = updateCache(); - expect(fn).toHaveBeenLastCalledWith(undefined, { a: 1, b: 2 }, undefined); + expect(updater).toHaveBeenLastCalledWith({ a: 1, b: 2 }, undefined); expect(value).toEqual({ a: 2, b: 3 }); expect(previous).toEqual({ a: 1, b: 2 }); expect(changed).toBe(true); @@ -198,19 +200,19 @@ describe('cache', () => { describe('inital value', () => { test('creates and updates cache with initialValue', () => { - const [fn, updater] = createUpdater((i) => i); - const [updateCache, getCurrentCache] = createCache(updater, { _initialValue: 0 }); + const updater = createUpdater((i) => i); + const [updateCache, getCurrentCache] = createCache({ _initialValue: 0 }, updater); let [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, 0, undefined); + expect(updater).toHaveBeenLastCalledWith(0, undefined); expect(value).toBe(1); expect(previous).toBe(0); expect(changed).toBe(true); [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, 1, 0); + expect(updater).toHaveBeenLastCalledWith(1, 0); expect(value).toBe(2); expect(previous).toBe(1); expect(changed).toBe(true); @@ -218,20 +220,23 @@ describe('cache', () => { test('creates and updates cache with initialValue and equal', () => { const obj = { a: -1, b: -1 }; - const [fn, updater] = createUpdater((i) => ({ a: i, b: i + 1 })); - const [updateCache] = createCache(updater, { - _initialValue: obj, - _equal: (a, b) => a?.a === b?.a && a?.b === b?.b, - }); + const updater = createUpdater((i) => ({ a: i, b: i + 1 })); + const [updateCache] = createCache( + { + _initialValue: obj, + _equal: (a, b) => a?.a === b?.a && a?.b === b?.b, + }, + updater + ); let [value, changed, previous] = updateCache(); - expect(fn).toHaveBeenLastCalledWith(undefined, obj, undefined); + expect(updater).toHaveBeenLastCalledWith(obj, undefined); expect(value).toEqual({ a: 1, b: 2 }); expect(previous).toBe(obj); expect(changed).toBe(true); [value, changed, previous] = updateCache(); - expect(fn).toHaveBeenLastCalledWith(undefined, { a: 1, b: 2 }, obj); + expect(updater).toHaveBeenLastCalledWith({ a: 1, b: 2 }, obj); expect(value).toEqual({ a: 2, b: 3 }); expect(previous).toEqual({ a: 1, b: 2 }); expect(changed).toBe(true); @@ -240,44 +245,47 @@ describe('cache', () => { describe('always update values', () => { test('creates and updates cache with alwaysUpdateValues and equal always true', () => { - const [fn, updater] = createUpdater((i) => i); - const [updateCache] = createCache(updater, { - _initialValue: undefined, - _alwaysUpdateValues: true, - _equal: () => true, - }); + const updater = createUpdater((i) => i); + const [updateCache] = createCache( + { + _initialValue: undefined, + _alwaysUpdateValues: true, + _equal: () => true, + }, + updater + ); let [value, changed, previous] = updateCache(); - expect(fn).toHaveBeenLastCalledWith(undefined, undefined, undefined); + expect(updater).toHaveBeenLastCalledWith(undefined, undefined); expect(value).toBe(1); expect(previous).toBe(undefined); expect(changed).toBe(false); [value, changed, previous] = updateCache(); - expect(fn).toHaveBeenLastCalledWith(undefined, 1, undefined); + expect(updater).toHaveBeenLastCalledWith(1, undefined); expect(value).toBe(2); expect(previous).toBe(1); expect(changed).toBe(false); }); - test('creates and updates cache with context shorthand and alwaysUpdateValues', () => { + test('creates and updates contextual cache with alwaysUpdateValues', () => { interface ContextObj { test: string; even: number; } - const [updateCache, getCurrentCache] = createCache(0, { + const [updateCache, getCurrentCache] = createCache({ _initialValue: undefined, _alwaysUpdateValues: true, }); const firstCtx = { test: 'test', even: 2 }; - let [value, changed, previous] = updateCache(0, firstCtx); + let [value, changed, previous] = updateCache(firstCtx); expect([value, false, previous]).toEqual(getCurrentCache()); expect(value).toBe(firstCtx); expect(previous).toBe(undefined); expect(changed).toBe(true); - [value, changed, previous] = updateCache(0, firstCtx); + [value, changed, previous] = updateCache(firstCtx); expect([value, false, previous]).toEqual(getCurrentCache()); expect(value).toBe(firstCtx); expect(previous).toBe(firstCtx); @@ -285,19 +293,19 @@ describe('cache', () => { const scndCtx = { test: 'nah', even: 1 }; - [value, changed, previous] = updateCache(0, scndCtx); + [value, changed, previous] = updateCache(scndCtx); expect([value, false, previous]).toEqual(getCurrentCache()); expect(value).toBe(scndCtx); expect(previous).toBe(firstCtx); expect(changed).toBe(true); - [value, changed, previous] = updateCache(0, scndCtx); + [value, changed, previous] = updateCache(scndCtx); expect([value, false, previous]).toEqual(getCurrentCache()); expect(value).toBe(scndCtx); expect(previous).toBe(scndCtx); expect(changed).toBe(false); - [value, changed, previous] = updateCache(true, scndCtx); + [value, changed, previous] = updateCache(scndCtx, true); expect([value, false, previous]).toEqual(getCurrentCache()); expect(value).toBe(scndCtx); expect(previous).toBe(scndCtx); @@ -307,21 +315,24 @@ describe('cache', () => { describe('constant', () => { test('updates constant initially without intial value', () => { - const [fn, updater] = createUpdater(() => true); - const [updateCache, getCurrentCache] = createCache(updater, { - _initialValue: undefined, - }); + const updater = createUpdater(() => true); + const [updateCache, getCurrentCache] = createCache( + { + _initialValue: undefined, + }, + updater + ); let [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, undefined, undefined); + expect(updater).toHaveBeenLastCalledWith(undefined, undefined); expect(value).toBe(true); expect(previous).toBe(undefined); expect(changed).toBe(true); [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, true, undefined); + expect(updater).toHaveBeenLastCalledWith(true, undefined); expect(value).toBe(true); expect(previous).toBe(undefined); expect(changed).toBe(false); @@ -329,52 +340,55 @@ describe('cache', () => { test('doesnt update constant with initial value', () => { const obj = { constant: true }; - const [fn, updater] = createUpdater(() => obj); - const [updateCache] = createCache(updater, { _initialValue: obj }); + const updater = createUpdater(() => obj); + const [updateCache] = createCache({ _initialValue: obj }, updater); let [value, changed, previous] = updateCache(); - expect(fn).toHaveBeenLastCalledWith(undefined, obj, undefined); + expect(updater).toHaveBeenLastCalledWith(obj, undefined); expect(value).toBe(obj); expect(previous).toBe(undefined); expect(changed).toBe(false); [value, changed, previous] = updateCache(); - expect(fn).toHaveBeenLastCalledWith(undefined, obj, undefined); + expect(updater).toHaveBeenLastCalledWith(obj, undefined); expect(value).toBe(obj); expect(previous).toBe(undefined); expect(changed).toBe(false); }); test('updates constant with force', () => { - const [fn, updater] = createUpdater(() => 'constant'); - const [updateCache, getCurrentCache] = createCache(updater, { - _initialValue: undefined, - }); + const updater = createUpdater(() => 'constant'); + const [updateCache, getCurrentCache] = createCache( + { + _initialValue: undefined, + }, + updater + ); let [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, undefined, undefined); + expect(updater).toHaveBeenLastCalledWith(undefined, undefined); expect(value).toBe('constant'); expect(previous).toBe(undefined); expect(changed).toBe(true); [value, changed, previous] = updateCache(true); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, 'constant', undefined); + expect(updater).toHaveBeenLastCalledWith('constant', undefined); expect(value).toBe('constant'); expect(previous).toBe('constant'); expect(changed).toBe(true); [value, changed, previous] = updateCache(false); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, 'constant', 'constant'); + expect(updater).toHaveBeenLastCalledWith('constant', 'constant'); expect(value).toBe('constant'); expect(previous).toBe('constant'); expect(changed).toBe(false); [value, changed, previous] = updateCache(); expect([value, false, previous]).toEqual(getCurrentCache()); - expect(fn).toHaveBeenLastCalledWith(undefined, 'constant', 'constant'); + expect(updater).toHaveBeenLastCalledWith('constant', 'constant'); expect(value).toBe('constant'); expect(previous).toBe('constant'); expect(changed).toBe(false);