From 6b835c52836627e8b1fb4250031baac94bbe0fcd Mon Sep 17 00:00:00 2001 From: Rene Date: Sun, 4 Apr 2021 15:29:50 +0200 Subject: [PATCH] build --- .../dist/overlayscrollbars.esm.js | 90 +++++++++++------ .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 98 +++++++++++++------ .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- 6 files changed, 129 insertions(+), 67 deletions(-) diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index b178d2c..0a8d7ba 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -1146,6 +1146,10 @@ const createOverflowLifecycle = (lifecycleHub) => { }; return { _overflowScroll: scroll, + _scrollbarsHideOffsetArrange: { + x: overlaidX && !!arrangeHideOffset, + y: overlaidY && !!arrangeHideOffset, + }, _scrollbarsHideOffset: scrollbarsHideOffset, }; }; @@ -1184,7 +1188,8 @@ const createOverflowLifecycle = (lifecycleHub) => { const arrangeViewport = (viewportOverflowState, contentScrollSize, directionIsRTL) => { if (_doViewportArrange) { - const { _scrollbarsHideOffset } = viewportOverflowState; + const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState; + const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset; const viewportPaddingStyle = _getViewportPaddingStyle(); @@ -1193,8 +1198,8 @@ const createOverflowLifecycle = (lifecycleHub) => { const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey]; const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop; const arrangeSize = { - w: hideOffsetY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '', - h: hideOffsetX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '', + w: hideOffsetY && arrangeY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '', + h: hideOffsetX && arrangeX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '', }; if (_viewportArrange) { @@ -1226,7 +1231,8 @@ const createOverflowLifecycle = (lifecycleHub) => { const hideNativeScrollbars = (viewportOverflowState, directionIsRTL, viewportArrange, viewportStyleObj) => { const { _nativeScrollbarStyling } = getEnvironment(); - const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState; + const { _overflowScroll, _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState; + const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset; const { x: scrollX, y: scrollY } = _overflowScroll; @@ -1243,8 +1249,8 @@ const createOverflowLifecycle = (lifecycleHub) => { viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue; if (viewportArrange) { - viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + hideOffsetY; - viewportStyleObj.paddingBottom = verticalPaddingValue + hideOffsetX; + viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0); + viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0); } if (!_nativeScrollbarStyling) { @@ -1254,28 +1260,49 @@ const createOverflowLifecycle = (lifecycleHub) => { } }; - const undoViewportArrange = () => { + const undoViewportArrange = (showNativeOverlaidScrollbars, viewportOverflowState) => { if (_doViewportArrange) { - const { _flexboxGlue } = getEnvironment(); + const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars); - let paddingStyle = _getViewportPaddingStyle(); + const paddingStyle = _getViewportPaddingStyle(); + + const { _flexboxGlue } = getEnvironment(); + const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState; + const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; + const finalPaddingStyle = {}; + + const assignProps = (props) => + each(props.split(' '), (prop) => { + finalPaddingStyle[prop] = paddingStyle[prop]; + }); if (!_flexboxGlue) { - paddingStyle = _extends_1({}, paddingStyle, { - height: '', - }); + finalPaddingStyle.height = ''; } - const prevStyle = style(_viewport, keys(paddingStyle)); + if (arrangeX) { + assignProps('marginTop marginBottom paddingTop paddingBottom'); + } + + if (arrangeY) { + assignProps('marginLeft marginRight paddingLeft paddingRight'); + } + + const prevStyle = style(_viewport, keys(finalPaddingStyle)); removeClass(_viewport, classNameViewportArrange); - style(_viewport, paddingStyle); - return () => { - style(_viewport, prevStyle); - addClass(_viewport, classNameViewportArrange); + style(_viewport, finalPaddingStyle); + return { + _redoViewportArrange: () => { + style(_viewport, prevStyle); + addClass(_viewport, classNameViewportArrange); + }, + _viewportOverflowState: finalViewportOverflowState, }; } - return noop; + return { + _redoViewportArrange: noop, + }; }; return (updateHints, checkOption, force) => { @@ -1307,7 +1334,10 @@ const createOverflowLifecycle = (lifecycleHub) => { } if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) { - const redoViewportArrange = undoViewportArrange(); + const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange( + showNativeOverlaidScrollbars, + preMeasureViewportOverflowState + ); const contentSize = clientSize(_viewport); const viewportRect = getBoundingClientRect(_viewport); const viewportOffsetSize = offsetSize(_viewport); @@ -1318,19 +1348,17 @@ const createOverflowLifecycle = (lifecycleHub) => { _viewportOffsetSize: viewportOffsetSize, _viewportScrollSize: viewportScrollSize, })); - redoViewportArrange(); - if ((_contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) && !showNativeOverlaidScrollbars) { - const arranged = arrangeViewport( - preMeasureViewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars), - _contentScrollSize, - directionIsRTL - ); + _redoViewportArrange(); - if (arranged) { - viewportClientSize = clientSize(_viewport); - viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport)); - } + if ( + (_contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) && + undoViewportArrangeOverflowState && + !showNativeOverlaidScrollbars && + arrangeViewport(undoViewportArrangeOverflowState, _contentScrollSize, directionIsRTL) + ) { + viewportClientSize = clientSize(_viewport); + viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport)); } overflowAmuntCache = updateOverflowAmountCache(force, { @@ -2002,7 +2030,7 @@ const createLifecycleHub = (options, structureSetup) => { const envUpdateListener = update.bind(null, null, true); addEnvironmentListener(envUpdateListener); - console.log('flexboxGlue', _flexboxGlue); + console.log(getEnvironment()); return { _update: update, diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index ab0025e..55d6b33 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/environment/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/options/options.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\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 | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\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 | void\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 | 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 | 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 | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = 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 | 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 | 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 | 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 | 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) => 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) => evt.preventDefault();\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | 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 | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | 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 | null): 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 | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\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 * 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: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...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 PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: T,\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\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","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\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\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 function 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 = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n 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} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\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}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst 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 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\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\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 };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, InternalVersionOf, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject extends Required> {\r\n _host: HTMLElement;\r\n _viewportArrange: HTMLStyleElement | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = () => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: InternalVersionOf = targetIsElm\r\n ? ({} as InternalVersionOf)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _padding: (target as OSTargetObject).padding,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _content: (target as OSTargetObject).content,\r\n };\r\n\r\n if (targetIsElm) {\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n appendChildren(_content!, getTargetContents(_target));\r\n appendChildren(_host, _padding);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(_content));\r\n removeElements(_padding);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? 'auto' : '100%',\r\n });\r\n }\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _setPaddingInfo, _setViewportPaddingStyle, _structureSetup } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setPaddingInfo({\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n });\r\n _setViewportPaddingStyle(\r\n _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n }\r\n );\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getViewportPaddingStyle, _getPaddingInfo, _setViewportOverflowScroll } = lifecycleHub;\r\n const { _host, _padding, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalXY, _initialValue: { x: 0, y: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getPaddingInfo();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n const paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: XY,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n const applyStyle = overflowAmount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.x, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.y, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset } = viewportOverflowState;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportPaddingStyle = _getViewportPaddingStyle();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { x: scrollX, y: scrollY } = _overflowScroll;\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = paddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = paddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = paddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + hideOffsetY;\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + hideOffsetX;\r\n }\r\n\r\n // hide overflowing scrollbars if there are any\r\n if (!_nativeScrollbarStyling) {\r\n style(_padding || _host, {\r\n overflow: scrollX || scrollY ? 'hidden' : '',\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @returns A function which again applies all the removed styles.\r\n */\r\n const undoViewportArrange = () => {\r\n if (_doViewportArrange) {\r\n const { _flexboxGlue } = getEnvironment();\r\n let paddingStyle = _getViewportPaddingStyle();\r\n\r\n if (!_flexboxGlue) {\r\n paddingStyle = {\r\n ...paddingStyle,\r\n height: '',\r\n };\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(paddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, paddingStyle);\r\n\r\n return () => {\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n };\r\n }\r\n return noop;\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const redoViewportArrange = undoViewportArrange();\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n redoViewportArrange();\r\n\r\n if ((contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) && !showNativeOverlaidScrollbars) {\r\n const arranged = arrangeViewport(\r\n preMeasureViewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars),\r\n contentScrollSize!,\r\n directionIsRTL!\r\n );\r\n\r\n if (arranged) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setViewportOverflowScroll(viewportOverflowState._overflowScroll);\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDOM,\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\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _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 targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\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 targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\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 if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\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: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\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 { XY, TRBL, CacheValues, each, push, keys, OptionsValidated, hasOwnProperty, isNumber, scrollLeft, scrollTop } from 'support';\r\nimport { Options } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface PaddingInfo {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: OptionsValidated | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: Options;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getPaddingInfo(): PaddingInfo;\r\n _setPaddingInfo(newPadding?: PaddingInfo | null): void;\r\n // padding related styles applied to the viewport element\r\n _getViewportPaddingStyle(): StyleObject;\r\n _setViewportPaddingStyle(newPaddingStlye?: StyleObject | null): void;\r\n _getViewportOverflowScroll(): XY;\r\n _setViewportOverflowScroll(newViewportOverflowScroll: XY): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: tabindex, open etc.\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst paddingInfoFallback: PaddingInfo = {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n};\r\nconst viewportPaddingStyleFallback: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n};\r\nconst viewportOverflowScrollFallback: XY = {\r\n x: false,\r\n y: false,\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: Options, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let paddingInfo = paddingInfoFallback;\r\n let viewportPaddingStyle = viewportPaddingStyleFallback;\r\n let viewportOverflowScroll = viewportOverflowScrollFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getPaddingInfo: () => paddingInfo,\r\n _setPaddingInfo(newPaddingInfo) {\r\n paddingInfo = newPaddingInfo || paddingInfoFallback;\r\n },\r\n _getViewportPaddingStyle: () => viewportPaddingStyle,\r\n _setViewportPaddingStyle(newPaddingStlye) {\r\n viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback;\r\n },\r\n _getViewportOverflowScroll: () => viewportOverflowScroll,\r\n _setViewportOverflowScroll(newViewportOverflowScroll) {\r\n viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback;\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (\r\n updateHints?: Partial | null,\r\n changedOptions?: OptionsValidated | null,\r\n force?: boolean\r\n ) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = _content && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, {\r\n _observeContent: true,\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const update = (changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log('flexboxGlue', _flexboxGlue);\r\n\r\n return {\r\n _update: update,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n Func,\r\n} from 'support/options';\r\nimport { ResizeBehavior, OverflowBehavior, VisibilityBehavior, AutoHideBehavior, Options } from 'options';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\n\r\nimport { validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { Options, defaultOptions, optionsTemplate } from 'options';\r\n\r\nconst OverlayScrollbars = (target: OSTarget | OSTargetObject, options?: Options, extensions?: any): any => {\r\n const currentOptions: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(options || ({} as Options), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance = {\r\n options(newOptions?: Options) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nexport default () => {\r\n return [getEnvironment(), OverlayScrollbars(document.body)];\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","createStructureSetup","targetIsElm","osTargetObj","_host","host","_target","_padding","padding","_viewport","viewport","_content","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","createPaddingLifecycle","_setPaddingInfo","_setViewportPaddingStyle","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_sizeChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsolute","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_absolute","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getViewportPaddingStyle","_getPaddingInfo","_setViewportOverflowScroll","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateOverflowAmountCache","getCurrentOverflowAmountCache","max","_contentScrollSize","_viewportSize","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","paddingAbsoluteVertical","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","setViewportOverflowState","overflowAmount","overflow","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","scrollX","scrollY","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","prevStyle","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","redoViewportArrange","contentSize","viewportClientSize","contentScrollSizeChanged","arranged","overflowChanged","overflowAmountChanged","viewportArranged","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","isRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetAttrChange","_ignoreTargetChange","_ignoreContentChange","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","Map","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","attrs","paddingInfoFallback","viewportPaddingStyleFallback","viewportOverflowScrollFallback","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","paddingInfo","viewportOverflowScroll","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newPaddingInfo","newPaddingStlye","_getViewportOverflowScroll","newViewportOverflowScroll","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","updating","elementEvents","envUpdateListener","log","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","contentMutationDebounce","hostMutationDebounce","resizeDebounce","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/options/options.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\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 | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\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 | void\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 | 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 | 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 | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = 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 | 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 | 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 | 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 | 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) => 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) => evt.preventDefault();\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | 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 | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | 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 | null): 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 | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\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 * 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: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...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 PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: T,\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\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","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\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\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 function 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 = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n 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} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\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}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst 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 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\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\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 };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, InternalVersionOf, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject extends Required> {\r\n _host: HTMLElement;\r\n _viewportArrange: HTMLStyleElement | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = () => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: InternalVersionOf = targetIsElm\r\n ? ({} as InternalVersionOf)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _padding: (target as OSTargetObject).padding,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _content: (target as OSTargetObject).content,\r\n };\r\n\r\n if (targetIsElm) {\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n appendChildren(_content!, getTargetContents(_target));\r\n appendChildren(_host, _padding);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(_content));\r\n removeElements(_padding);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? 'auto' : '100%',\r\n });\r\n }\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _setPaddingInfo, _setViewportPaddingStyle, _structureSetup } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setPaddingInfo({\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n });\r\n _setViewportPaddingStyle(\r\n _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n }\r\n );\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getViewportPaddingStyle, _getPaddingInfo, _setViewportOverflowScroll } = lifecycleHub;\r\n const { _host, _padding, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalXY, _initialValue: { x: 0, y: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getPaddingInfo();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n const paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: XY,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n const applyStyle = overflowAmount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.x, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.y, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportPaddingStyle = _getViewportPaddingStyle();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _overflowScroll, _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { x: scrollX, y: scrollY } = _overflowScroll;\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = paddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = paddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = paddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n\r\n // hide overflowing scrollbars if there are any\r\n if (!_nativeScrollbarStyling) {\r\n style(_padding || _host, {\r\n overflow: scrollX || scrollY ? 'hidden' : '',\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (showNativeOverlaidScrollbars: boolean, viewportOverflowState?: ViewportOverflowState): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = paddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginTop marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n preMeasureViewportOverflowState\r\n );\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, contentScrollSize!, directionIsRTL!)\r\n ) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setViewportOverflowScroll(viewportOverflowState._overflowScroll);\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDOM,\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\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _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 targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\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 targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\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 if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\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: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\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 { XY, TRBL, CacheValues, each, push, keys, OptionsValidated, hasOwnProperty, isNumber, scrollLeft, scrollTop } from 'support';\r\nimport { Options } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface PaddingInfo {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: OptionsValidated | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: Options;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getPaddingInfo(): PaddingInfo;\r\n _setPaddingInfo(newPadding?: PaddingInfo | null): void;\r\n // padding related styles applied to the viewport element\r\n _getViewportPaddingStyle(): StyleObject;\r\n _setViewportPaddingStyle(newPaddingStlye?: StyleObject | null): void;\r\n _getViewportOverflowScroll(): XY;\r\n _setViewportOverflowScroll(newViewportOverflowScroll: XY): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: tabindex, open etc.\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst paddingInfoFallback: PaddingInfo = {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n};\r\nconst viewportPaddingStyleFallback: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n};\r\nconst viewportOverflowScrollFallback: XY = {\r\n x: false,\r\n y: false,\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: Options, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let paddingInfo = paddingInfoFallback;\r\n let viewportPaddingStyle = viewportPaddingStyleFallback;\r\n let viewportOverflowScroll = viewportOverflowScrollFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getPaddingInfo: () => paddingInfo,\r\n _setPaddingInfo(newPaddingInfo) {\r\n paddingInfo = newPaddingInfo || paddingInfoFallback;\r\n },\r\n _getViewportPaddingStyle: () => viewportPaddingStyle,\r\n _setViewportPaddingStyle(newPaddingStlye) {\r\n viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback;\r\n },\r\n _getViewportOverflowScroll: () => viewportOverflowScroll,\r\n _setViewportOverflowScroll(newViewportOverflowScroll) {\r\n viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback;\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (\r\n updateHints?: Partial | null,\r\n changedOptions?: OptionsValidated | null,\r\n force?: boolean\r\n ) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = _content && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, {\r\n _observeContent: true,\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const update = (changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log(getEnvironment());\r\n\r\n return {\r\n _update: update,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n Func,\r\n} from 'support/options';\r\nimport { ResizeBehavior, OverflowBehavior, VisibilityBehavior, AutoHideBehavior, Options } from 'options';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\n\r\nimport { validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { Options, defaultOptions, optionsTemplate } from 'options';\r\n\r\nconst OverlayScrollbars = (target: OSTarget | OSTargetObject, options?: Options, extensions?: any): any => {\r\n const currentOptions: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(options || ({} as Options), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance = {\r\n options(newOptions?: Options) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nexport default () => {\r\n return [getEnvironment(), OverlayScrollbars(document.body)];\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","createStructureSetup","targetIsElm","osTargetObj","_host","host","_target","_padding","padding","_viewport","viewport","_content","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","createPaddingLifecycle","_setPaddingInfo","_setViewportPaddingStyle","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_sizeChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsolute","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_absolute","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getViewportPaddingStyle","_getPaddingInfo","_setViewportOverflowScroll","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateOverflowAmountCache","getCurrentOverflowAmountCache","max","_contentScrollSize","_viewportSize","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","paddingAbsoluteVertical","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","overflowAmount","overflow","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","scrollX","scrollY","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","contentSize","viewportClientSize","contentScrollSizeChanged","overflowChanged","overflowAmountChanged","viewportArranged","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","isRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetAttrChange","_ignoreTargetChange","_ignoreContentChange","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","Map","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","attrs","paddingInfoFallback","viewportPaddingStyleFallback","viewportOverflowScrollFallback","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","paddingInfo","viewportOverflowScroll","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newPaddingInfo","newPaddingStlye","_getViewportOverflowScroll","newViewportOverflowScroll","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","updating","elementEvents","envUpdateListener","log","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","contentMutationDebounce","hostMutationDebounce","resizeDebounce","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"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 cebe1e4..2038329 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:o,u:r}=e||{};let i,s=o;return{_:(e,o)=>{const l=s,a=t?t(o,s,i):o,c=e||(n?!n(l,a):l!==a);return(c||r)&&(s=a,i=l),{v:s,g:i,p:c}},m:t=>({v:s,g:i,p:!!t})}},e=Node.ELEMENT_NODE,{toString:n,hasOwnProperty:o}=Object.prototype;function r(t){return void 0===t}function i(t){return null===t}const s=t=>r(t)||i(t)?""+t:n.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function l(t){return"number"==typeof t}function a(t){return"string"==typeof t}function c(t){return"function"==typeof t}function d(t){return Array.isArray(t)}function u(t){return"object"==typeof t&&!d(t)&&!i(t)}function _(t){const e=!!t&&t.length,n=l(e)&&e>-1&&e%1==0;return!!(d(t)||!c(t)&&n)&&(!(e>0&&u(t))||e-1 in t)}function v(t){if(!t||!u(t)||"object"!==s(t))return!1;let e;const n=t.constructor,i=n&&n.prototype,l=o.call(t,"constructor"),a=i&&o.call(i,"isPrototypeOf");if(n&&!l&&!a)return!1;for(e in t);return r(e)||o.call(t,e)}function g(t){const n=window.Element;return!!t&&(n?t instanceof n:t.nodeType===e)}function h(t,e){if(_(t))for(let n=0;ne(t[n],n,t));return t}const f=(t,e,n)=>t.indexOf(e,n),p=(t,e,n)=>(n||a(e)||!_(e)?t.push(e):Array.prototype.push.apply(t,e),t),w=t=>{if(Array.from)return Array.from(t);const e=[];return h(t,t=>{p(e,t)}),e},b=t=>t&&0===t.length,y=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):h(t,n)},m=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),S=t=>t?Object.keys(t):[];function x(t,e,n,o,r,s,l){const a=[e,n,o,r,s,l];return"object"==typeof t&&!i(t)||c(t)||(t={}),h(a,e=>{h(S(e),n=>{const o=e[n];if(t===o)return!0;const r=d(o);if(o&&(v(o)||r)){const e=t[n];let i=e;r&&!d(e)?i=[]:r||v(e)||(i={}),t[n]=x(i,o)}else t[n]=o})}),t}function z(t){for(const e in t)return!1;return!0}function C(t,e,n,o){if(r(o))return n?n[t]:e;n&&(n[t]=o)}function O(t,e,n){if(r(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}function M(t,e){return C("scrollLeft",0,t,e)}function I(t,e){return C("scrollTop",0,t,e)}const L=Element.prototype,$=(t,e)=>{const n=[],o=e?g(e)?e:null:document;return o?p(n,o.querySelectorAll(t)):n},A=(t,e)=>{if(g(t)){return(L.matches||L.msMatchesSelector).call(t,e)}return!1},V=t=>t?w(t.childNodes):[],T=t=>t?t.parentElement:null,R=(t,e,n)=>{if(n){let o,r=e;t&&(_(n)?(o=document.createDocumentFragment(),h(n,t=>{t===r&&(r=t.previousSibling),o.appendChild(t)})):o=n,e&&(r?r!==e&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r||null))}},P=(t,e)=>{R(t,null,e)},j=(t,e)=>{R(t,t&&t.firstChild,e)},E=(t,e)=>{R(T(t),t&&t.nextSibling,e)},q=t=>{if(_(t))h(w(t),t=>q(t));else if(t){const e=T(t);e&&e.removeChild(t)}},B=t=>{const e=document.createElement("div");return t&&O(e,"class",t),e},H=t=>{const e=B();return e.innerHTML=t.trim(),h(V(e),t=>q(t))},F=["WebKit","Moz","O","MS","webkit","moz","o","ms"],D={},G=t=>{let e=D[t]||window[t];return m(D,t)||(h(F,n=>{var o;return e=e||window[n+(o=t,o.charAt(0).toUpperCase()+o.slice(1))],!e}),D[t]=e),e},N=G("MutationObserver"),W=G("IntersectionObserver"),Y=G("ResizeObserver"),k=G("cancelAnimationFrame"),U=G("requestAnimationFrame"),X=/[^\x20\t\r\n\f]+/g,J=(t,e,n)=>{let o,r=0,i=!1;if(t&&a(e)){const s=e.match(X)||[];for(i=s.length>0;o=s[r++];)i=!!n(t.classList,o)&&i}return i},K=(t,e)=>{J(t,e,(t,e)=>t.add(e))},Q=(t,e)=>{J(t,e,(t,e)=>t.remove(e))},Z={w:0,h:0},tt=()=>({w:window.innerWidth,h:window.innerHeight}),et=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:Z,nt=t=>t?{w:t.clientWidth,h:t.clientHeight}:Z,ot=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:Z,rt=t=>t.getBoundingClientRect();let it;const st=t=>t.split(" "),lt=(t,e,n,o)=>{h(st(e),e=>{t.removeEventListener(e,n,o)})},at=(t,e,n,o)=>{const i=(()=>{if(r(it)){it=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){it=!0}}))}catch(t){}}return it})(),s=i&&o&&o.S||!1,l=o&&o.C||!1,a=o&&o.O||!1,c=[],d=i?{passive:s,capture:l}:l;return h(st(e),e=>{const o=a?r=>{t.removeEventListener(e,o,l),n&&n(r)}:n;p(c,lt.bind(null,t,e,o,l)),t.addEventListener(e,o,d)}),y.bind(0,c)},ct=t=>t.stopPropagation(),dt=t=>t.preventDefault(),ut=(t,e,n,o)=>{if(t&&e){let r=!0;return h(n,n=>{(o?o(t[n]):t[n])!==(o?o(e[n]):e[n])&&(r=!1)}),r}return!1},_t=(t,e)=>ut(t,e,["w","h"]),vt=(t,e)=>ut(t,e,["x","y"]),gt=(t,e)=>ut(t,e,["t","r","b","l"]),ht=(t,e,n)=>ut(t,e,["width","height"],n&&(t=>Math.round(t))),ft=()=>{},pt=(t,e,n)=>{let o,r;const i=l(e)&&e>0,s=l(n)&&n>0,a=i?window.clearTimeout:k,c=i?window.setTimeout:U,d=function(e){r=s?performance.now():0,o&&a(o),t.apply(this,e)};return function(){const t=d.bind(this,arguments),i=!!s&&performance.now()-r>=n;o&&a(o),o=i?t():c(t,e)}},wt={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},bt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},yt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],mt=(t,e,n)=>{try{if(t){const{style:o}=t;r(o[e])?o.setProperty(e,n):o[e]=((t,e)=>!wt[t.toLowerCase()]&&l(e)?e+"px":e)(e,n)}}catch(o){}};function St(t,e){const n=a(e);if(d(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?yt(t,r,e):e.reduce((e,n)=>(e[n]=yt(t,r,n),e),o)}return o}h(S(e),n=>mt(t,n,e[n]))}const xt={x:0,y:0},zt=t=>{const e=t?rt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:xt};var Ct=function(t){var e={exports:{}};return t(e,e.exports),e.exports}((function(t){function e(){return t.exports=e=Object.assign||function(t){for(var e=1;e(t[e]=Mt[0]+e+Mt[1],t),{}),Lt=(t,e,n,o,i)=>{const l={},c=Ct({},t);return h(S(e).filter(e=>m(t,e)),u=>{const _=r(n[u])?{}:n[u],g=t[u],f=e[u],w=v(f),b=i?i+".":"";if(w&&v(g)){const t=Lt(g,f,_,o,b+u);l[u]=t.M,c[u]=t.I,h([c,l],t=>{z(t[u])&&delete t[u]})}else if(!w){let t=!1;const e=[],n=[],i=s(g);if(h(d(f)?f:[f],o=>{let s;h(It,(t,e)=>{t===o&&(s=e)});const l=r(s);if(l&&a(g)){const n=o.split(" ");t=!!n.find(t=>t===g),p(e,n)}else t=It[i]===o;return p(n,l?It.string:s),!t}),t){(d(g)||v(g)?Ot(g)!==Ot(_):g!==_)&&(l[u]=g)}else o&&console.warn(`The option "${b}${u}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${g}".\r\nAccepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete c[u]}}),{I:c,M:l}},$t=(t,e,n,o)=>Lt(t,e,n||{},o||!1);let At;const{abs:Vt,round:Tt}=Math,Rt=(t,e)=>{P(t,e);const n=nt(e),o=et(e);return{x:o.h-n.h,y:o.w-n.w}},Pt=(t,e)=>{St(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),M(t,0);const n=zt(t),o=zt(e);M(t,-999);const r=zt(e);return{i:n.x===o.x,n:o.x!==r.x}},jt=(t,e)=>{K(t,"os-environment-flexbox-glue");const n=rt(t),o=rt(e),r=ht(o,n,!0);K(t,"os-environment-flexbox-glue-max");const i=rt(t),s=rt(e),l=ht(s,i,!0);return r&&l},Et=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},qt=()=>{const{body:t}=document,e=H('
')[0],n=e.firstChild,o=new Set,r=Rt(t,e),i={x:0===r.x,y:0===r.y},s={L:!1,$:r,A:i,V:!1,T:"-1"===St(e,"zIndex"),R:Pt(e,n),P:jt(e,n),j(t){o.add(t)},q(t){o.delete(t)}};var l,a;if(a="style",(l=e)&&l.removeAttribute(a),q(e),!i.x||!i.y){let n=tt(),i=Et(),s=r;window.addEventListener("resize",()=>{if(o.size){const r=tt(),l={w:r.w-n.w,h:r.h-n.h};if(0===l.w&&0===l.h)return;const a={w:Vt(l.w),h:Vt(l.h)},c={w:Vt(Tt(r.w/(n.w/100))),h:Vt(Tt(r.h/(n.h/100)))},d=Et(),u=a.w>2&&a.h>2,_=!((t,e)=>{const n=Vt(t),o=Vt(e);return!(n===o||n+1===o||n-1===o)})(c.w,c.h),v=d!==i&&i>0;if(u&&_&&v){const n=At.$=Rt(t,e);q(e),s.x===n.x&&s.y===n.y||y(o),s=n}n=r,i=d}})}return s},Bt=()=>(At||(At=qt()),At),Ht=t=>{P(T(t),V(t)),q(t)};let Ft=0;const Dt=t=>{const n=function(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}(t),o=n?{}:{B:t.host,H:t.target,F:t.padding,D:t.viewport,G:t.content};if(n){const e=B("os-padding"),n=B("os-viewport"),r=B("os-content");P(e,n),P(n,r),o.H=t,o.F=e,o.D=n,o.G=r}let{H:i,F:s,D:l,G:a}=o;const c=[],d=A(i,"textarea"),u=!d&&A(i,"body"),_=d?o.B||B():i,v=t=>d?i:V(t);if(d&&_!==o.B&&(E(i,_),p(c,()=>{E(_,i),q(_)})),n)P(a,v(i)),P(_,s),p(c,()=>{P(_,V(a)),q(s),Q(_,"os-host")});else{const t=a||l||s||_,e=r(s),n=r(l),i=r(a),d=v(t);s=o.F=e?B():s,l=o.D=n?B():l,a=o.G=i?B():a,P(_,s),P(s||_,l),P(l,a);P(a||l,d),p(c,()=>{i&&Ht(a),n&&Ht(l),e&&Ht(s),Q(_,"os-host"),Q(s,"os-padding"),Q(l,"os-viewport"),Q(a,"os-content")})}K(_,"os-host"),K(s,"os-padding"),K(l,"os-viewport"),K(a,"os-content");const g=i.ownerDocument,h=g.body,f={N:g.defaultView,W:g,Y:T(h),k:h,U:d,X:u},w=Ct({},o,{B:_}),{V:b,A:m,T:S}=Bt();if(b)p(c,Q.bind(0,l,"os-viewport-scrollbar-styled"));else if(!S&&(m.x||m.y)){const t=(()=>{const t=document.createElement("style");return O(t,"id","os-viewport-arrange-"+Ft),Ft++,t})();z=t,R(T(x=l),x,z),p(c,q.bind(0,t)),w.J=t}var x,z;return{K:w,Z:f,tt:()=>{y(c)}}},Gt=e=>{const{et:n,nt:o,ot:r}=e,{B:i,F:s,D:l}=r.K,{_:a,m:c}=t(()=>((t,e,n)=>{const o=e?e+"-":"",r=n?"-"+n:"",i=`${o}top${r}`,s=`${o}right${r}`,l=`${o}bottom${r}`,a=`${o}left${r}`,c=St(t,[i,s,l,a]);return{t:bt(c[i]),r:bt(c[s]),b:bt(c[l]),l:bt(c[a])}})(i,"padding"),{o:gt});return(t,e,r)=>{let{v:i,p:d}=c(r);const{V:u}=Bt(),{rt:_,it:v}=t,{v:g,p:h}=v,{v:f,p}=e("paddingAbsolute");(_||d)&&({v:i,p:d}=a(r));const w=p||h||d;if(w){const{v:t}=a(r),e=!f||!s&&!u,i=t.r+t.l,c=t.t+t.b,d={marginTop:0,marginRight:0,marginBottom:e?-c:0,marginLeft:0,top:e?-t.t:0,right:0,bottom:0,left:0,maxWidth:e?`calc(100% + ${i}px)`:""},_={paddingTop:e?t.t:0,paddingRight:e?t.r:0,paddingBottom:e?t.b:0,paddingLeft:e?t.l:0};if(e){const e=g?"right":"left",n=g?"marginLeft":"marginRight",o=g?t.r:t.l;d[e]=-o,d[n]=-i}St(s||l,d),St(l,_),n({st:!e,F:t}),o(s?_:Ct({},d,_))}return{lt:w}}},Nt=e=>{const{ot:n,at:o,ct:r,dt:i,ut:s}=e,{B:l,F:a,D:c,J:d}=n.K,{_:u,m:_}=t(t=>h(t._t,t.vt,t.gt),{o:_t}),{_:v,m:g}=t(t=>({x:Math.max(0,t.ht.w-t.ft.w),y:Math.max(0,t.ht.h-t.ft.h)}),{o:vt,s:{x:0,y:0}}),h=(t,e,n)=>({w:t.w-Math.round(Math.max(0,n.width-e.w)),h:t.h-Math.round(Math.max(0,n.height-e.h))}),f=(t,e)=>{if(St(c,{height:""}),e){const{st:e,F:n}=i(),{pt:o,wt:r}=t,s=rt(l),a=et(l),d=nt(l),u=e?n.b+n.t:0,_=d.h+(s.height-a.h);St(c,{height:_+(o.x?r.x:0)-u})}},p=(t,e)=>{const{$:n,A:o,V:r}=Bt(),{x:i,y:s}=o,l=r||t?0:42,a=!e?St(c,["overflowX","overflowY"]):e,d={x:"scroll"===a.overflowX,y:"scroll"===a.overflowY};return{pt:d,wt:{x:d.x&&!r?i?l:n.x:0,y:d.y&&!r?s?l:n.y:0}}},w=(t,e,n)=>{if(o){const{wt:o}=t,{x:i,y:s}=o,l=r(),a=l[n?"paddingRight":"paddingLeft"],u=l.paddingTop,_={w:s?s+e.w-a+"px":"",h:i?i+e.h-u+"px":""};if(d){const{sheet:t}=d;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${O(d,"id")} + .os-viewport-arrange::before {}`,0);const n=e[0].style;n.width=_.w,n.height=_.h}}}else St(c,{"--viewport-arrange-width":_.w,"--viewport-arrange-height":_.h})}return o};return(t,e,n)=>{const{it:i,bt:d,rt:b,yt:y,St:m,lt:x}=t,{P:z,V:C,A:O}=Bt(),{v:M,p:I}=d,{v:L,p:$}=i,{v:A,p:V}=e("nativeScrollbarsOverlaid.show"),T=A&&O.x&&O.y,R=!z&&(b||m||y||V||I);let P,j=g(n),E=_(n);if(V&&C&&(T?Q(c,"os-viewport-scrollbar-styled"):K(c,"os-viewport-scrollbar-styled")),R&&(P=p(T),f(P,!!M)),b||x||m||V||$){const t=(()=>{if(o){const{P:t}=Bt();let e=r();t||(e=Ct({},e,{height:""}));const n=St(c,S(e));return Q(c,"os-viewport-arrange"),St(c,e),()=>{St(c,n),K(c,"os-viewport-arrange")}}return ft})(),e=nt(c),i=rt(c),s=et(c);let l=ot(c),a=e;const{v:d,p:_}=E=u(n,{gt:i,vt:s,_t:l});if(t(),(_||V)&&!T){w(P||p(T),d,L)&&(a=nt(c),l=h(ot(c),et(c),rt(c)))}j=v(n,{ht:{w:Math.max(d.w,l.w),h:Math.max(d.h,l.h)},ft:{w:a.w+Math.max(0,e.w-d.w),h:a.h+Math.max(0,e.h-d.h)}})}const{v:q,p:B}=e("overflow"),{v:H,p:F}=E,{v:D,p:G}=j;if(x||F||G||B||V||$||R){const t={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,maxWidth:"",overflowY:"",overflowX:""},e=((t,e,n,o)=>{const r=(t,e,n,o)=>{const r="visible-scroll"===n,i=e>0&&("scroll"===n||"hidden"===n);return i&&(o[t?"overflowX":"overflowY"]=n),{xt:!i,zt:r?"scroll":"hidden"}},{xt:i,zt:s}=r(!0,e.x,n.x,o),{xt:l,zt:a}=r(!1,e.y,n.y,o);return i&&!l&&(o.overflowX=s),l&&!i&&(o.overflowY=a),p(t,o)})(T,D,q,t);((t,e,n,o)=>{const{V:i}=Bt(),{pt:s,wt:c}=t,{x:d,y:u}=c,{x:_,y:v}=s,g=r(),h=e?"marginLeft":"marginRight",f=e?"paddingLeft":"paddingRight",p=g[h],w=g.marginBottom,b=g[f],y=g.paddingBottom;o.maxWidth=`calc(100% + ${u+-1*p}px)`,o[h]=-u+p,o.marginBottom=-d+w,n&&(o[f]=b+u,o.paddingBottom=y+d),i||St(a||l,{overflow:_||v?"hidden":""})})(e,L,w(e,H,L),t),R&&f(e,!!M),St(c,t),s(e.pt)}}},Wt={direction:["rtl"]},Yt=t=>{let e=!1;return h(St(t,["direction"]),(t,n)=>{e=e||f(Wt[n],t)>-1}),e},kt=t=>t&&(t.height||t.width),Ut=(e,n,o)=>{const{Ct:r=!1,Ot:i=!1}=o||{},{R:s}=Bt(),l=H('
')[0],a=l.firstChild,{_:c}=t(0,{u:!0,o:(t,e)=>!(!t||!kt(t)&&kt(e))}),u=t=>{const e=t&&"boolean"==typeof t.v;let o=!1;if(d(t)&&t.length>0){const{g:e,v:n,p:r}=c(0,t.pop().contentRect);o=!e||!kt(n)}else e&&t.p;if(r){const n=e?t.v:Yt(l);M(l,n?s.n?-3333333:s.i?0:3333333:3333333),I(l,3333333)}o||n(e?t:void 0)},_=[];let v,g=!!i&&u;if(Y){const t=new Y(u);t.observe(a),p(_,()=>t.disconnect())}else{const t=H('
');P(a,t),K(a,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,o=e.firstChild,r=null==o?void 0:o.firstChild;let s,l=et(a),c=l,d=!1;const v=()=>{M(o,3333333),I(o,3333333),M(n,3333333),I(n,3333333)},h=()=>{s=0,d&&(l=c,u())},f=t=>(c=et(a),d=!t||!_t(c,l),t&&d&&!s?(k(s),s=U(h)):t||h(),v(),t&&(dt(t),ct(t)),!1);p(_,[at(o,"scroll",f),at(n,"scroll",f)]),St(r,{width:3333333,height:3333333}),v(),g=i?()=>f():v}if(r){v=t(()=>Yt(l));const{_:e}=v;p(_,at(l,"scroll",t=>{const n=e(),{v:o,p:r}=n;return r&&(St(a,o?{left:"auto",right:0}:{left:0,right:"auto"}),u(n)),dt(t),ct(t),!1}))}return g&&(K(l,"os-size-observer-appear"),p(_,at(l,"animationstart",g,{O:!!Y}))),j(e,l),{tt(){y(_),q(l)},Mt:t=>({it:v?v.m(t):{v:!1,g:!1,p:!1}})}},Xt=(t,e,n,o)=>{let i;const s=()=>{n.forEach((t,e)=>{lt(e,t,o)}),n.clear()},l=e=>{if(i){h(i.reduce((n,o)=>{if(o){const r=o[0],i=o[1],s=i&&r&&(e?e(r):$(r,t));s&&p(n,[s,c(i)?i(s):i],!0)}return n},[]),t=>{const e=t[0],i=t[1];h(e,t=>{((t,e)=>{const i=n.get(t),s=r(i),l=()=>{n.set(t,e),at(t,e,o)};s||e===i?s&&l():(lt(t,i,o),l())})(t,i)})})}},a=t=>{i=t,s(),l()};return e&&a(e),{tt:s,It:l,_:a}},Jt=(t,e,n)=>{let o=!1;const{Lt:r,$t:i,At:s,Vt:l,Tt:c,Rt:d,Pt:u}=n||{},{It:_,tt:v,_:g}=Xt(t,r&&l,new Map,pt(()=>{o&&e([],!1,!0)},84)),w=s||[],y=(i||[]).concat(w),m=o=>{const i=d||ft,s=u||ft,l=[],v=[];let g=!1,y=!1,m=!1;h(o,e=>{const{attributeName:o,target:d,type:u,oldValue:_,addedNodes:h}=e,b="attributes"===u,S="childList"===u,x=t===d,z=b&&a(o)?O(d,o):0,C=0!==z&&_!==z,M=C&&x&&!r&&!i(d,o,_,z),I=f(w,o)>-1&&C;if(M&&p(l,o),r){const r=!b,l=b&&I&&!x,a=l&&c&&A(d,c),u=(a?!i(d,o,_,z):r||l)&&!s(e,!!a,t,n);p(v,h),y=y||u,m=m||S}g=g||M&&I}),m&&!b(v)&&_(t=>v.reduce((e,n)=>(p(e,$(t,n)),A(n,t)?p(e,n):e),[])),(!b(l)||g||y)&&e(l,g,y)},S=new N(m);return S.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:r,childList:r,characterData:r}),o=!0,{jt:()=>{o&&(v(),S.disconnect(),o=!1)},Et:t=>{g(o&&r&&t)},_:()=>{o&&m(S.takeRecords())}}},Kt=(t,e)=>t&&e.split(".").reduce((t,e)=>t&&m(t,e)?t[e]:void 0,t),Qt=["id","class","style","open"],Zt={st:!1,F:{t:0,r:0,b:0,l:0}},te={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},ee={x:!1,y:!1},ne={v:!1,g:!1,p:!1},oe={v:!1,g:!1,p:!1},re=(e,n)=>{let o=Zt,r=te,i=ee;const{B:s,D:a,G:c}=n.K,{V:d,A:u,P:_,j:v,q:g}=Bt(),f=!d&&(u.x||u.y),w=[],b={qt:e,ot:n,at:f,dt:()=>o,et(t){o=t||Zt},ct:()=>r,nt(t){var e,n;r=t?(n=te,S(e=t).reduce((t,n)=>{const o=e[n];return t[n]=""===o?0:o,t},Ct({},n))):te},Bt:()=>i,ut(t){i=t||ee}};p(w,(t=>{const{ot:e}=t,{G:n}=e.K;return t=>{const{bt:e}=t,{v:o,p:r}=e;r&&St(n,{height:o?"auto":"100%"})}})(b)),p(w,Gt(b)),p(w,Nt(b));const m=(t,n,o)=>{let{it:r,bt:i,rt:s=o||!1,yt:c=o||!1,St:d=o||!1,lt:u=o||!1}=t||{};const v=r||(z?z.Mt(o).it:ne),g=i||(x?x.Mt(o).bt:oe),p=t=>({v:Kt(e,t),p:o||void 0!==Kt(n,t)}),b=f||!_,y=b&&M(a),m=b&&I(a);h(w,t=>{const{rt:e,yt:n,St:r,lt:i}=t({it:v,bt:g,rt:s,yt:c,St:d,lt:u},p,!!o)||{};s=e||s,c=n||c,d=r||d,u=i||u}),l(y)&&M(a,y),l(m)&&I(a,m)},x=c&&((e,n)=>{const o=H('
')[0],r=[],{_:i,m:s}=t(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{s:!1});if(W){const t=new W(t=>{if(t&&t.length>0){const e=t.pop();if(e){const t=i(0,e);t.p&&n(t)}}},{root:e});t.observe(o),p(r,()=>t.disconnect())}else{const t=()=>{const t=et(o),e=i(0,t);e.p&&n(e)};p(r,Ut(o,t).tt),t()}return j(e,o),{tt(){y(r),q(o)},Mt:t=>({bt:s(t)})}})(s,t=>{m({bt:t})}),z=Ut(s,t=>{m({it:t,rt:!t})},{Ot:!0,Ct:!d}),C=(Jt(s,()=>{requestAnimationFrame(()=>{m({yt:!0})})},{At:Qt,$t:Qt}),Jt(c||a,()=>{requestAnimationFrame(()=>{m({St:!0})})},{Lt:!0,At:Qt,$t:Qt,Vt:e.updating.elementEvents}),(t,e)=>{m(null,t,e)}),O=C.bind(null,null,!0);return v(O),console.log("flexboxGlue",_),{_:C,tt(){g(O)}}},ie=It.number,se=[It.string,It.array,It.null],le=[!0,It.boolean],ae=[!1,It.boolean],ce={resize:["none","none both horizontal vertical"],paddingAbsolute:ae,updating:{elementEvents:[[["img","load"]],[It.array,It.null]],contentMutationDebounce:[80,ie],hostMutationDebounce:[0,ie],resizeDebounce:[0,ie]},overflow:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,ie],dragScroll:le,clickScroll:ae,touch:le},textarea:{dynWidth:ae,dynHeight:ae,inheritedAttrs:[["style","class"],se]},nativeScrollbarsOverlaid:{show:ae,initialize:ae}},{Ht:de,qt:ue}=function t(e){const n={Ht:{},qt:{}};return h(S(e),o=>{const r=e[o];if(d(r))n.Ht[o]=r[1],n.qt[o]=r[0];else{const e=t(r);n.Ht[o]=e.Ht,n.qt[o]=e.qt}}),n}(ce),_e=(t,e,n)=>{const o=x({},ue,$t(e||{},de,null,!0).M),r=Dt(t),i=re(o,r),s={options(t){if(t){const{M:e}=$t(t,de,o,!0);z(e)||(x(o,e),i._(e))}return o},update(t){i._(null,t)}};return s.update(!0),s};export default()=>[Bt(),_e(document.body)]; \ No newline at end of file +const t=(t,e)=>{const{o:n,s:r,u:o}=e||{};let i,s=r;return{_:(e,r)=>{const a=s,l=t?t(r,s,i):r,c=e||(n?!n(a,l):a!==l);return(c||o)&&(s=l,i=a),{g:s,v:i,p:c}},m:t=>({g:s,v:i,p:!!t})}},e=Node.ELEMENT_NODE,{toString:n,hasOwnProperty:r}=Object.prototype;function o(t){return void 0===t}function i(t){return null===t}const s=t=>o(t)||i(t)?""+t:n.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function a(t){return"number"==typeof t}function l(t){return"string"==typeof t}function c(t){return"function"==typeof t}function d(t){return Array.isArray(t)}function u(t){return"object"==typeof t&&!d(t)&&!i(t)}function _(t){const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!!(d(t)||!c(t)&&n)&&(!(e>0&&u(t))||e-1 in t)}function g(t){if(!t||!u(t)||"object"!==s(t))return!1;let e;const n=t.constructor,i=n&&n.prototype,a=r.call(t,"constructor"),l=i&&r.call(i,"isPrototypeOf");if(n&&!a&&!l)return!1;for(e in t);return o(e)||r.call(t,e)}function v(t){const n=window.Element;return!!t&&(n?t instanceof n:t.nodeType===e)}function f(t,e){if(_(t))for(let n=0;ne(t[n],n,t));return t}const h=(t,e,n)=>t.indexOf(e,n),p=(t,e,n)=>(n||l(e)||!_(e)?t.push(e):Array.prototype.push.apply(t,e),t),w=t=>{if(Array.from)return Array.from(t);const e=[];return f(t,t=>{p(e,t)}),e},b=t=>t&&0===t.length,m=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):f(t,n)},y=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),S=t=>t?Object.keys(t):[];function x(t,e,n,r,o,s,a){const l=[e,n,r,o,s,a];return"object"==typeof t&&!i(t)||c(t)||(t={}),f(l,e=>{f(S(e),n=>{const r=e[n];if(t===r)return!0;const o=d(r);if(r&&(g(r)||o)){const e=t[n];let i=e;o&&!d(e)?i=[]:o||g(e)||(i={}),t[n]=x(i,r)}else t[n]=r})}),t}function O(t){for(const e in t)return!1;return!0}function z(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function C(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}function M(t,e){return z("scrollLeft",0,t,e)}function A(t,e){return z("scrollTop",0,t,e)}const L=Element.prototype,I=(t,e)=>{const n=[],r=e?v(e)?e:null:document;return r?p(n,r.querySelectorAll(t)):n},V=(t,e)=>{if(v(t)){return(L.matches||L.msMatchesSelector).call(t,e)}return!1},T=t=>t?w(t.childNodes):[],$=t=>t?t.parentElement:null,R=(t,e,n)=>{if(n){let r,o=e;t&&(_(n)?(r=document.createDocumentFragment(),f(n,t=>{t===o&&(o=t.previousSibling),r.appendChild(t)})):r=n,e&&(o?o!==e&&(o=o.nextSibling):o=t.firstChild),t.insertBefore(r,o||null))}},P=(t,e)=>{R(t,null,e)},j=(t,e)=>{R(t,t&&t.firstChild,e)},H=(t,e)=>{R($(t),t&&t.nextSibling,e)},B=t=>{if(_(t))f(w(t),t=>B(t));else if(t){const e=$(t);e&&e.removeChild(t)}},E=t=>{const e=document.createElement("div");return t&&C(e,"class",t),e},q=t=>{const e=E();return e.innerHTML=t.trim(),f(T(e),t=>B(t))},F=["WebKit","Moz","O","MS","webkit","moz","o","ms"],D={},N=t=>{let e=D[t]||window[t];return y(D,t)||(f(F,n=>{var r;return e=e||window[n+(r=t,r.charAt(0).toUpperCase()+r.slice(1))],!e}),D[t]=e),e},G=N("MutationObserver"),W=N("IntersectionObserver"),Y=N("ResizeObserver"),k=N("cancelAnimationFrame"),U=N("requestAnimationFrame"),X=/[^\x20\t\r\n\f]+/g,J=(t,e,n)=>{let r,o=0,i=!1;if(t&&l(e)){const s=e.match(X)||[];for(i=s.length>0;r=s[o++];)i=!!n(t.classList,r)&&i}return i},K=(t,e)=>{J(t,e,(t,e)=>t.add(e))},Q=(t,e)=>{J(t,e,(t,e)=>t.remove(e))},Z={w:0,h:0},tt=()=>({w:window.innerWidth,h:window.innerHeight}),et=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:Z,nt=t=>t?{w:t.clientWidth,h:t.clientHeight}:Z,rt=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:Z,ot=t=>t.getBoundingClientRect();let it;const st=t=>t.split(" "),at=(t,e,n,r)=>{f(st(e),e=>{t.removeEventListener(e,n,r)})},lt=(t,e,n,r)=>{const i=(()=>{if(o(it)){it=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){it=!0}}))}catch(t){}}return it})(),s=i&&r&&r.S||!1,a=r&&r.O||!1,l=r&&r.C||!1,c=[],d=i?{passive:s,capture:a}:a;return f(st(e),e=>{const r=l?o=>{t.removeEventListener(e,r,a),n&&n(o)}:n;p(c,at.bind(null,t,e,r,a)),t.addEventListener(e,r,d)}),m.bind(0,c)},ct=t=>t.stopPropagation(),dt=t=>t.preventDefault(),ut=(t,e,n,r)=>{if(t&&e){let o=!0;return f(n,n=>{(r?r(t[n]):t[n])!==(r?r(e[n]):e[n])&&(o=!1)}),o}return!1},_t=(t,e)=>ut(t,e,["w","h"]),gt=(t,e)=>ut(t,e,["x","y"]),vt=(t,e)=>ut(t,e,["t","r","b","l"]),ft=(t,e,n)=>ut(t,e,["width","height"],n&&(t=>Math.round(t))),ht=()=>{},pt=(t,e,n)=>{let r,o;const i=a(e)&&e>0,s=a(n)&&n>0,l=i?window.clearTimeout:k,c=i?window.setTimeout:U,d=function(e){o=s?performance.now():0,r&&l(r),t.apply(this,e)};return function(){const t=d.bind(this,arguments),i=!!s&&performance.now()-o>=n;r&&l(r),r=i?t():c(t,e)}},wt={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},bt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},mt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],yt=(t,e,n)=>{try{if(t){const{style:r}=t;o(r[e])?r.setProperty(e,n):r[e]=((t,e)=>!wt[t.toLowerCase()]&&a(e)?e+"px":e)(e,n)}}catch(r){}};function St(t,e){const n=l(e);if(d(e)||n){let r=n?"":{};if(t){const o=window.getComputedStyle(t,null);r=n?mt(t,o,e):e.reduce((e,n)=>(e[n]=mt(t,o,n),e),r)}return r}f(S(e),n=>yt(t,n,e[n]))}const xt={x:0,y:0},Ot=t=>{const e=t?ot(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:xt};var zt=function(t){var e={exports:{}};return t(e,e.exports),e.exports}((function(t){function e(){return t.exports=e=Object.assign||function(t){for(var e=1;e(t[e]=Mt[0]+e+Mt[1],t),{}),Lt=(t,e,n,r,i)=>{const a={},c=zt({},t);return f(S(e).filter(e=>y(t,e)),u=>{const _=o(n[u])?{}:n[u],v=t[u],h=e[u],w=g(h),b=i?i+".":"";if(w&&g(v)){const t=Lt(v,h,_,r,b+u);a[u]=t.M,c[u]=t.A,f([c,a],t=>{O(t[u])&&delete t[u]})}else if(!w){let t=!1;const e=[],n=[],i=s(v);if(f(d(h)?h:[h],r=>{let s;f(At,(t,e)=>{t===r&&(s=e)});const a=o(s);if(a&&l(v)){const n=r.split(" ");t=!!n.find(t=>t===v),p(e,n)}else t=At[i]===r;return p(n,a?At.string:s),!t}),t){(d(v)||g(v)?Ct(v)!==Ct(_):v!==_)&&(a[u]=v)}else r&&console.warn(`The option "${b}${u}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${v}".\r\nAccepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete c[u]}}),{A:c,M:a}},It=(t,e,n,r)=>Lt(t,e,n||{},r||!1);let Vt;const{abs:Tt,round:$t}=Math,Rt=(t,e)=>{P(t,e);const n=nt(e),r=et(e);return{x:r.h-n.h,y:r.w-n.w}},Pt=(t,e)=>{St(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),M(t,0);const n=Ot(t),r=Ot(e);M(t,-999);const o=Ot(e);return{i:n.x===r.x,n:r.x!==o.x}},jt=(t,e)=>{K(t,"os-environment-flexbox-glue");const n=ot(t),r=ot(e),o=ft(r,n,!0);K(t,"os-environment-flexbox-glue-max");const i=ot(t),s=ot(e),a=ft(s,i,!0);return o&&a},Ht=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},Bt=()=>{const{body:t}=document,e=q('
')[0],n=e.firstChild,r=new Set,o=Rt(t,e),i={x:0===o.x,y:0===o.y},s={L:!1,I:o,V:i,T:!1,$:"-1"===St(e,"zIndex"),R:Pt(e,n),P:jt(e,n),j(t){r.add(t)},H(t){r.delete(t)}};var a,l;if(l="style",(a=e)&&a.removeAttribute(l),B(e),!i.x||!i.y){let n=tt(),i=Ht(),s=o;window.addEventListener("resize",()=>{if(r.size){const o=tt(),a={w:o.w-n.w,h:o.h-n.h};if(0===a.w&&0===a.h)return;const l={w:Tt(a.w),h:Tt(a.h)},c={w:Tt($t(o.w/(n.w/100))),h:Tt($t(o.h/(n.h/100)))},d=Ht(),u=l.w>2&&l.h>2,_=!((t,e)=>{const n=Tt(t),r=Tt(e);return!(n===r||n+1===r||n-1===r)})(c.w,c.h),g=d!==i&&i>0;if(u&&_&&g){const n=Vt.I=Rt(t,e);B(e),s.x===n.x&&s.y===n.y||m(r),s=n}n=o,i=d}})}return s},Et=()=>(Vt||(Vt=Bt()),Vt),qt=t=>{P($(t),T(t)),B(t)};let Ft=0;const Dt=t=>{const n=function(t){const n=window.HTMLElement;return!!t&&(n?t instanceof n:t.nodeType===e)}(t),r=n?{}:{B:t.host,q:t.target,F:t.padding,D:t.viewport,N:t.content};if(n){const e=E("os-padding"),n=E("os-viewport"),o=E("os-content");P(e,n),P(n,o),r.q=t,r.F=e,r.D=n,r.N=o}let{q:i,F:s,D:a,N:l}=r;const c=[],d=V(i,"textarea"),u=!d&&V(i,"body"),_=d?r.B||E():i,g=t=>d?i:T(t);if(d&&_!==r.B&&(H(i,_),p(c,()=>{H(_,i),B(_)})),n)P(l,g(i)),P(_,s),p(c,()=>{P(_,T(l)),B(s),Q(_,"os-host")});else{const t=l||a||s||_,e=o(s),n=o(a),i=o(l),d=g(t);s=r.F=e?E():s,a=r.D=n?E():a,l=r.N=i?E():l,P(_,s),P(s||_,a),P(a,l);P(l||a,d),p(c,()=>{i&&qt(l),n&&qt(a),e&&qt(s),Q(_,"os-host"),Q(s,"os-padding"),Q(a,"os-viewport"),Q(l,"os-content")})}K(_,"os-host"),K(s,"os-padding"),K(a,"os-viewport"),K(l,"os-content");const v=i.ownerDocument,f=v.body,h={G:v.defaultView,W:v,Y:$(f),k:f,U:d,X:u},w=zt({},r,{B:_}),{T:b,V:y,$:S}=Et();if(b)p(c,Q.bind(0,a,"os-viewport-scrollbar-styled"));else if(!S&&(y.x||y.y)){const t=(()=>{const t=document.createElement("style");return C(t,"id","os-viewport-arrange-"+Ft),Ft++,t})();O=t,R($(x=a),x,O),p(c,B.bind(0,t)),w.J=t}var x,O;return{K:w,Z:h,tt:()=>{m(c)}}},Nt=e=>{const{et:n,nt:r,rt:o}=e,{B:i,F:s,D:a}=o.K,{_:l,m:c}=t(()=>((t,e,n)=>{const r=e?e+"-":"",o=n?"-"+n:"",i=`${r}top${o}`,s=`${r}right${o}`,a=`${r}bottom${o}`,l=`${r}left${o}`,c=St(t,[i,s,a,l]);return{t:bt(c[i]),r:bt(c[s]),b:bt(c[a]),l:bt(c[l])}})(i,"padding"),{o:vt});return(t,e,o)=>{let{g:i,p:d}=c(o);const{T:u}=Et(),{ot:_,it:g}=t,{g:v,p:f}=g,{g:h,p}=e("paddingAbsolute");(_||d)&&({g:i,p:d}=l(o));const w=p||f||d;if(w){const{g:t}=l(o),e=!h||!s&&!u,i=t.r+t.l,c=t.t+t.b,d={marginTop:0,marginRight:0,marginBottom:e?-c:0,marginLeft:0,top:e?-t.t:0,right:0,bottom:0,left:0,maxWidth:e?`calc(100% + ${i}px)`:""},_={paddingTop:e?t.t:0,paddingRight:e?t.r:0,paddingBottom:e?t.b:0,paddingLeft:e?t.l:0};if(e){const e=v?"right":"left",n=v?"marginLeft":"marginRight",r=v?t.r:t.l;d[e]=-r,d[n]=-i}St(s||a,d),St(a,_),n({st:!e,F:t}),r(s?_:zt({},d,_))}return{at:w}}},Gt=e=>{const{rt:n,lt:r,ct:o,dt:i,ut:s}=e,{B:a,F:l,D:c,J:d}=n.K,{_:u,m:_}=t(t=>h(t._t,t.gt,t.vt),{o:_t}),{_:g,m:v}=t(t=>({x:Math.max(0,t.ft.w-t.ht.w),y:Math.max(0,t.ft.h-t.ht.h)}),{o:gt,s:{x:0,y:0}}),h=(t,e,n)=>({w:t.w-Math.round(Math.max(0,n.width-e.w)),h:t.h-Math.round(Math.max(0,n.height-e.h))}),p=(t,e)=>{if(St(c,{height:""}),e){const{st:e,F:n}=i(),{pt:r,wt:o}=t,s=ot(a),l=et(a),d=nt(a),u=e?n.b+n.t:0,_=d.h+(s.height-l.h);St(c,{height:_+(r.x?o.x:0)-u})}},w=(t,e)=>{const{I:n,V:r,T:o}=Et(),{x:i,y:s}=r,a=o||t?0:42,l=!e?St(c,["overflowX","overflowY"]):e,d={x:"scroll"===l.overflowX,y:"scroll"===l.overflowY};return{pt:d,bt:{x:i&&!!a,y:s&&!!a},wt:{x:d.x&&!o?i?a:n.x:0,y:d.y&&!o?s?a:n.y:0}}},b=(t,e,n)=>{if(r){const{wt:r,bt:i}=t,{x:s,y:a}=i,{x:l,y:u}=r,_=o(),g=_[n?"paddingRight":"paddingLeft"],v=_.paddingTop,f={w:u&&a?u+e.w-g+"px":"",h:l&&s?l+e.h-v+"px":""};if(d){const{sheet:t}=d;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${C(d,"id")} + .os-viewport-arrange::before {}`,0);const n=e[0].style;n.width=f.w,n.height=f.h}}}else St(c,{"--viewport-arrange-width":f.w,"--viewport-arrange-height":f.h})}return r};return(t,e,n)=>{const{it:i,yt:d,ot:m,St:y,xt:x,at:O}=t,{P:z,T:C,V:M}=Et(),{g:A,p:L}=d,{g:I,p:V}=i,{g:T,p:$}=e("nativeScrollbarsOverlaid.show"),R=T&&M.x&&M.y,P=!z&&(m||x||y||$||L);let j,H=v(n),B=_(n);if($&&C&&(R?Q(c,"os-viewport-scrollbar-styled"):K(c,"os-viewport-scrollbar-styled")),P&&(j=w(R),p(j,!!A)),m||O||x||$||V){const{Ot:t,zt:e}=((t,e)=>{if(r){const n=e||w(t),r=o(),{P:i}=Et(),{bt:s}=n,{x:a,y:l}=s,d={},u=t=>f(t.split(" "),t=>{d[t]=r[t]});i||(d.height=""),a&&u("marginTop marginBottom paddingTop paddingBottom"),l&&u("marginLeft marginRight paddingLeft paddingRight");const _=St(c,S(d));return Q(c,"os-viewport-arrange"),St(c,d),{Ot:()=>{St(c,_),K(c,"os-viewport-arrange")},zt:n}}return{Ot:ht}})(R,j),i=nt(c),s=ot(c),a=et(c);let l=rt(c),d=i;const{g:_,p:v}=B=u(n,{vt:s,gt:a,_t:l});t(),(v||$)&&e&&!R&&b(e,_,I)&&(d=nt(c),l=h(rt(c),et(c),ot(c))),H=g(n,{ft:{w:Math.max(_.w,l.w),h:Math.max(_.h,l.h)},ht:{w:d.w+Math.max(0,i.w-_.w),h:d.h+Math.max(0,i.h-_.h)}})}const{g:E,p:q}=e("overflow"),{g:F,p:D}=B,{g:N,p:G}=H;if(O||D||G||q||$||V||P){const t={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,maxWidth:"",overflowY:"",overflowX:""},e=((t,e,n,r)=>{const o=(t,e,n,r)=>{const o="visible-scroll"===n,i=e>0&&("scroll"===n||"hidden"===n);return i&&(r[t?"overflowX":"overflowY"]=n),{Ct:!i,Mt:o?"scroll":"hidden"}},{Ct:i,Mt:s}=o(!0,e.x,n.x,r),{Ct:a,Mt:l}=o(!1,e.y,n.y,r);return i&&!a&&(r.overflowX=s),a&&!i&&(r.overflowY=l),w(t,r)})(R,N,E,t);((t,e,n,r)=>{const{T:i}=Et(),{pt:s,wt:c,bt:d}=t,{x:u,y:_}=d,{x:g,y:v}=c,{x:f,y:h}=s,p=o(),w=e?"marginLeft":"marginRight",b=e?"paddingLeft":"paddingRight",m=p[w],y=p.marginBottom,S=p[b],x=p.paddingBottom;r.maxWidth=`calc(100% + ${v+-1*m}px)`,r[w]=-v+m,r.marginBottom=-g+y,n&&(r[b]=S+(_?v:0),r.paddingBottom=x+(u?g:0)),i||St(l||a,{overflow:f||h?"hidden":""})})(e,I,b(e,F,I),t),P&&p(e,!!A),St(c,t),s(e.pt)}}},Wt={direction:["rtl"]},Yt=t=>{let e=!1;return f(St(t,["direction"]),(t,n)=>{e=e||h(Wt[n],t)>-1}),e},kt=t=>t&&(t.height||t.width),Ut=(e,n,r)=>{const{At:o=!1,Lt:i=!1}=r||{},{R:s}=Et(),a=q('
')[0],l=a.firstChild,{_:c}=t(0,{u:!0,o:(t,e)=>!(!t||!kt(t)&&kt(e))}),u=t=>{const e=t&&"boolean"==typeof t.g;let r=!1;if(d(t)&&t.length>0){const{v:e,g:n,p:o}=c(0,t.pop().contentRect);r=!e||!kt(n)}else e&&t.p;if(o){const n=e?t.g:Yt(a);M(a,n?s.n?-3333333:s.i?0:3333333:3333333),A(a,3333333)}r||n(e?t:void 0)},_=[];let g,v=!!i&&u;if(Y){const t=new Y(u);t.observe(l),p(_,()=>t.disconnect())}else{const t=q('
');P(l,t),K(l,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,r=e.firstChild,o=null==r?void 0:r.firstChild;let s,a=et(l),c=a,d=!1;const g=()=>{M(r,3333333),A(r,3333333),M(n,3333333),A(n,3333333)},f=()=>{s=0,d&&(a=c,u())},h=t=>(c=et(l),d=!t||!_t(c,a),t&&d&&!s?(k(s),s=U(f)):t||f(),g(),t&&(dt(t),ct(t)),!1);p(_,[lt(r,"scroll",h),lt(n,"scroll",h)]),St(o,{width:3333333,height:3333333}),g(),v=i?()=>h():g}if(o){g=t(()=>Yt(a));const{_:e}=g;p(_,lt(a,"scroll",t=>{const n=e(),{g:r,p:o}=n;return o&&(St(l,r?{left:"auto",right:0}:{left:0,right:"auto"}),u(n)),dt(t),ct(t),!1}))}return v&&(K(a,"os-size-observer-appear"),p(_,lt(a,"animationstart",v,{C:!!Y}))),j(e,a),{tt(){m(_),B(a)},It:t=>({it:g?g.m(t):{g:!1,v:!1,p:!1}})}},Xt=(t,e,n,r)=>{let i;const s=()=>{n.forEach((t,e)=>{at(e,t,r)}),n.clear()},a=e=>{if(i){f(i.reduce((n,r)=>{if(r){const o=r[0],i=r[1],s=i&&o&&(e?e(o):I(o,t));s&&p(n,[s,c(i)?i(s):i],!0)}return n},[]),t=>{const e=t[0],i=t[1];f(e,t=>{((t,e)=>{const i=n.get(t),s=o(i),a=()=>{n.set(t,e),lt(t,e,r)};s||e===i?s&&a():(at(t,i,r),a())})(t,i)})})}},l=t=>{i=t,s(),a()};return e&&l(e),{tt:s,Vt:a,_:l}},Jt=(t,e,n)=>{let r=!1;const{Tt:o,$t:i,Rt:s,Pt:a,jt:c,Ht:d,Bt:u}=n||{},{Vt:_,tt:g,_:v}=Xt(t,o&&a,new Map,pt(()=>{r&&e([],!1,!0)},84)),w=s||[],m=(i||[]).concat(w),y=r=>{const i=d||ht,s=u||ht,a=[],g=[];let v=!1,m=!1,y=!1;f(r,e=>{const{attributeName:r,target:d,type:u,oldValue:_,addedNodes:f}=e,b="attributes"===u,S="childList"===u,x=t===d,O=b&&l(r)?C(d,r):0,z=0!==O&&_!==O,M=z&&x&&!o&&!i(d,r,_,O),A=h(w,r)>-1&&z;if(M&&p(a,r),o){const o=!b,a=b&&A&&!x,l=a&&c&&V(d,c),u=(l?!i(d,r,_,O):o||a)&&!s(e,!!l,t,n);p(g,f),m=m||u,y=y||S}v=v||M&&A}),y&&!b(g)&&_(t=>g.reduce((e,n)=>(p(e,I(t,n)),V(n,t)?p(e,n):e),[])),(!b(a)||v||m)&&e(a,v,m)},S=new G(y);return S.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:m,subtree:o,childList:o,characterData:o}),r=!0,{Et:()=>{r&&(g(),S.disconnect(),r=!1)},qt:t=>{v(r&&o&&t)},_:()=>{r&&y(S.takeRecords())}}},Kt=(t,e)=>t&&e.split(".").reduce((t,e)=>t&&y(t,e)?t[e]:void 0,t),Qt=["id","class","style","open"],Zt={st:!1,F:{t:0,r:0,b:0,l:0}},te={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},ee={x:!1,y:!1},ne={g:!1,v:!1,p:!1},re={g:!1,v:!1,p:!1},oe=(e,n)=>{let r=Zt,o=te,i=ee;const{B:s,D:l,N:c}=n.K,{T:d,V:u,P:_,j:g,H:v}=Et(),h=!d&&(u.x||u.y),w=[],b={Ft:e,rt:n,lt:h,dt:()=>r,et(t){r=t||Zt},ct:()=>o,nt(t){var e,n;o=t?(n=te,S(e=t).reduce((t,n)=>{const r=e[n];return t[n]=""===r?0:r,t},zt({},n))):te},Dt:()=>i,ut(t){i=t||ee}};p(w,(t=>{const{rt:e}=t,{N:n}=e.K;return t=>{const{yt:e}=t,{g:r,p:o}=e;o&&St(n,{height:r?"auto":"100%"})}})(b)),p(w,Nt(b)),p(w,Gt(b));const y=(t,n,r)=>{let{it:o,yt:i,ot:s=r||!1,St:c=r||!1,xt:d=r||!1,at:u=r||!1}=t||{};const g=o||(O?O.It(r).it:ne),v=i||(x?x.It(r).yt:re),p=t=>({g:Kt(e,t),p:r||void 0!==Kt(n,t)}),b=h||!_,m=b&&M(l),y=b&&A(l);f(w,t=>{const{ot:e,St:n,xt:o,at:i}=t({it:g,yt:v,ot:s,St:c,xt:d,at:u},p,!!r)||{};s=e||s,c=n||c,d=o||d,u=i||u}),a(m)&&M(l,m),a(y)&&A(l,y)},x=c&&((e,n)=>{const r=q('
')[0],o=[],{_:i,m:s}=t(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{s:!1});if(W){const t=new W(t=>{if(t&&t.length>0){const e=t.pop();if(e){const t=i(0,e);t.p&&n(t)}}},{root:e});t.observe(r),p(o,()=>t.disconnect())}else{const t=()=>{const t=et(r),e=i(0,t);e.p&&n(e)};p(o,Ut(r,t).tt),t()}return j(e,r),{tt(){m(o),B(r)},It:t=>({yt:s(t)})}})(s,t=>{y({yt:t})}),O=Ut(s,t=>{y({it:t,ot:!t})},{Lt:!0,At:!d}),z=(Jt(s,()=>{requestAnimationFrame(()=>{y({St:!0})})},{Rt:Qt,$t:Qt}),Jt(c||l,()=>{requestAnimationFrame(()=>{y({xt:!0})})},{Tt:!0,Rt:Qt,$t:Qt,Pt:e.updating.elementEvents}),(t,e)=>{y(null,t,e)}),C=z.bind(null,null,!0);return g(C),console.log(Et()),{_:z,tt(){v(C)}}},ie=At.number,se=[At.string,At.array,At.null],ae=[!0,At.boolean],le=[!1,At.boolean],ce={resize:["none","none both horizontal vertical"],paddingAbsolute:le,updating:{elementEvents:[[["img","load"]],[At.array,At.null]],contentMutationDebounce:[80,ie],hostMutationDebounce:[0,ie],resizeDebounce:[0,ie]},overflow:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,ie],dragScroll:ae,clickScroll:le,touch:ae},textarea:{dynWidth:le,dynHeight:le,inheritedAttrs:[["style","class"],se]},nativeScrollbarsOverlaid:{show:le,initialize:le}},{Nt:de,Ft:ue}=function t(e){const n={Nt:{},Ft:{}};return f(S(e),r=>{const o=e[r];if(d(o))n.Nt[r]=o[1],n.Ft[r]=o[0];else{const e=t(o);n.Nt[r]=e.Nt,n.Ft[r]=e.Ft}}),n}(ce),_e=(t,e,n)=>{const r=x({},ue,It(e||{},de,null,!0).M),o=Dt(t),i=oe(r,o),s={options(t){if(t){const{M:e}=It(t,de,r,!0);O(e)||(x(r,e),i._(e))}return r},update(t){i._(null,t)}};return s.update(!0),s};export default()=>[Et(),_e(document.body)]; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index d714ce4..4f1fece 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -1302,6 +1302,10 @@ }; return { _overflowScroll: scroll, + _scrollbarsHideOffsetArrange: { + x: overlaidX && !!arrangeHideOffset, + y: overlaidY && !!arrangeHideOffset, + }, _scrollbarsHideOffset: scrollbarsHideOffset, }; }; @@ -1345,7 +1349,10 @@ var arrangeViewport = function arrangeViewport(viewportOverflowState, contentScrollSize, directionIsRTL) { if (_doViewportArrange) { - var _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset; + var _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset, + _scrollbarsHideOffsetArrange = viewportOverflowState._scrollbarsHideOffsetArrange; + var arrangeX = _scrollbarsHideOffsetArrange.x, + arrangeY = _scrollbarsHideOffsetArrange.y; var hideOffsetX = _scrollbarsHideOffset.x, hideOffsetY = _scrollbarsHideOffset.y; @@ -1355,8 +1362,8 @@ var viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey]; var viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop; var arrangeSize = { - w: hideOffsetY ? hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue + 'px' : '', - h: hideOffsetX ? hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue + 'px' : '', + w: hideOffsetY && arrangeY ? hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue + 'px' : '', + h: hideOffsetX && arrangeX ? hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue + 'px' : '', }; if (_viewportArrange) { @@ -1391,7 +1398,10 @@ _nativeScrollbarStyling = _getEnvironment2._nativeScrollbarStyling; var _overflowScroll = viewportOverflowState._overflowScroll, - _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset; + _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset, + _scrollbarsHideOffsetArrange = viewportOverflowState._scrollbarsHideOffsetArrange; + var arrangeX = _scrollbarsHideOffsetArrange.x, + arrangeY = _scrollbarsHideOffsetArrange.y; var hideOffsetX = _scrollbarsHideOffset.x, hideOffsetY = _scrollbarsHideOffset.y; var scrollX = _overflowScroll.x, @@ -1410,8 +1420,8 @@ viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue; if (viewportArrange) { - viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + hideOffsetY; - viewportStyleObj.paddingBottom = verticalPaddingValue + hideOffsetX; + viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0); + viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0); } if (!_nativeScrollbarStyling) { @@ -1421,29 +1431,53 @@ } }; - var undoViewportArrange = function undoViewportArrange() { + var undoViewportArrange = function undoViewportArrange(showNativeOverlaidScrollbars, viewportOverflowState) { if (_doViewportArrange) { - var _getEnvironment3 = getEnvironment(), - _flexboxGlue = _getEnvironment3._flexboxGlue; + var finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars); var paddingStyle = _getViewportPaddingStyle(); - if (!_flexboxGlue) { - paddingStyle = _extends_1({}, paddingStyle, { - height: '', + var _getEnvironment3 = getEnvironment(), + _flexboxGlue = _getEnvironment3._flexboxGlue; + + var _scrollbarsHideOffsetArrange = finalViewportOverflowState._scrollbarsHideOffsetArrange; + var arrangeX = _scrollbarsHideOffsetArrange.x, + arrangeY = _scrollbarsHideOffsetArrange.y; + var finalPaddingStyle = {}; + + var assignProps = function assignProps(props) { + return each(props.split(' '), function (prop) { + finalPaddingStyle[prop] = paddingStyle[prop]; }); + }; + + if (!_flexboxGlue) { + finalPaddingStyle.height = ''; } - var prevStyle = style(_viewport, keys(paddingStyle)); + if (arrangeX) { + assignProps('marginTop marginBottom paddingTop paddingBottom'); + } + + if (arrangeY) { + assignProps('marginLeft marginRight paddingLeft paddingRight'); + } + + var prevStyle = style(_viewport, keys(finalPaddingStyle)); removeClass(_viewport, classNameViewportArrange); - style(_viewport, paddingStyle); - return function () { - style(_viewport, prevStyle); - addClass(_viewport, classNameViewportArrange); + style(_viewport, finalPaddingStyle); + return { + _redoViewportArrange: function _redoViewportArrange() { + style(_viewport, prevStyle); + addClass(_viewport, classNameViewportArrange); + }, + _viewportOverflowState: finalViewportOverflowState, }; } - return noop; + return { + _redoViewportArrange: noop, + }; }; return function (updateHints, checkOption, force) { @@ -1489,7 +1523,10 @@ } if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) { - var redoViewportArrange = undoViewportArrange(); + var _undoViewportArrange = undoViewportArrange(showNativeOverlaidScrollbars, preMeasureViewportOverflowState), + _redoViewportArrange = _undoViewportArrange._redoViewportArrange, + undoViewportArrangeOverflowState = _undoViewportArrange._viewportOverflowState; + var contentSize = clientSize(_viewport); var viewportRect = getBoundingClientRect(_viewport); var viewportOffsetSize = offsetSize(_viewport); @@ -1504,19 +1541,16 @@ _contentScrollSize = _contentScrollSizeCac._value, _contentScrollSizeChanged = _contentScrollSizeCac._changed; - redoViewportArrange(); + _redoViewportArrange(); - if ((_contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) && !showNativeOverlaidScrollbars) { - var arranged = arrangeViewport( - preMeasureViewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars), - _contentScrollSize, - directionIsRTL - ); - - if (arranged) { - viewportClientSize = clientSize(_viewport); - viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport)); - } + if ( + (_contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) && + undoViewportArrangeOverflowState && + !showNativeOverlaidScrollbars && + arrangeViewport(undoViewportArrangeOverflowState, _contentScrollSize, directionIsRTL) + ) { + viewportClientSize = clientSize(_viewport); + viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport)); } overflowAmuntCache = updateOverflowAmountCache(force, { @@ -2261,7 +2295,7 @@ var envUpdateListener = update.bind(null, null, true); addEnvironmentListener(envUpdateListener); - console.log('flexboxGlue', _flexboxGlue); + console.log(getEnvironment()); return { _update: update, _destroy: function _destroy() { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index f9b1e1d..d97c303 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/environment/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/options/options.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\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 | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\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 | void\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 | 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 | 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 | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = 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 | 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 | 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 | 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 | 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) => 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) => evt.preventDefault();\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | 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 | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | 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 | null): 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 | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\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 * 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: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...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 PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: T,\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\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","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\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\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 function 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 = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n 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} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\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}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst 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 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\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\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 };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, InternalVersionOf, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject extends Required> {\r\n _host: HTMLElement;\r\n _viewportArrange: HTMLStyleElement | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = () => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: InternalVersionOf = targetIsElm\r\n ? ({} as InternalVersionOf)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _padding: (target as OSTargetObject).padding,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _content: (target as OSTargetObject).content,\r\n };\r\n\r\n if (targetIsElm) {\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n appendChildren(_content!, getTargetContents(_target));\r\n appendChildren(_host, _padding);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(_content));\r\n removeElements(_padding);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? 'auto' : '100%',\r\n });\r\n }\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _setPaddingInfo, _setViewportPaddingStyle, _structureSetup } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setPaddingInfo({\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n });\r\n _setViewportPaddingStyle(\r\n _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n }\r\n );\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getViewportPaddingStyle, _getPaddingInfo, _setViewportOverflowScroll } = lifecycleHub;\r\n const { _host, _padding, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalXY, _initialValue: { x: 0, y: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getPaddingInfo();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n const paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: XY,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n const applyStyle = overflowAmount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.x, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.y, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset } = viewportOverflowState;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportPaddingStyle = _getViewportPaddingStyle();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { x: scrollX, y: scrollY } = _overflowScroll;\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = paddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = paddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = paddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + hideOffsetY;\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + hideOffsetX;\r\n }\r\n\r\n // hide overflowing scrollbars if there are any\r\n if (!_nativeScrollbarStyling) {\r\n style(_padding || _host, {\r\n overflow: scrollX || scrollY ? 'hidden' : '',\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @returns A function which again applies all the removed styles.\r\n */\r\n const undoViewportArrange = () => {\r\n if (_doViewportArrange) {\r\n const { _flexboxGlue } = getEnvironment();\r\n let paddingStyle = _getViewportPaddingStyle();\r\n\r\n if (!_flexboxGlue) {\r\n paddingStyle = {\r\n ...paddingStyle,\r\n height: '',\r\n };\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(paddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, paddingStyle);\r\n\r\n return () => {\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n };\r\n }\r\n return noop;\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const redoViewportArrange = undoViewportArrange();\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n redoViewportArrange();\r\n\r\n if ((contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) && !showNativeOverlaidScrollbars) {\r\n const arranged = arrangeViewport(\r\n preMeasureViewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars),\r\n contentScrollSize!,\r\n directionIsRTL!\r\n );\r\n\r\n if (arranged) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setViewportOverflowScroll(viewportOverflowState._overflowScroll);\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDOM,\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\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _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 targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\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 targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\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 if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\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: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\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 { XY, TRBL, CacheValues, each, push, keys, OptionsValidated, hasOwnProperty, isNumber, scrollLeft, scrollTop } from 'support';\r\nimport { Options } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface PaddingInfo {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: OptionsValidated | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: Options;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getPaddingInfo(): PaddingInfo;\r\n _setPaddingInfo(newPadding?: PaddingInfo | null): void;\r\n // padding related styles applied to the viewport element\r\n _getViewportPaddingStyle(): StyleObject;\r\n _setViewportPaddingStyle(newPaddingStlye?: StyleObject | null): void;\r\n _getViewportOverflowScroll(): XY;\r\n _setViewportOverflowScroll(newViewportOverflowScroll: XY): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: tabindex, open etc.\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst paddingInfoFallback: PaddingInfo = {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n};\r\nconst viewportPaddingStyleFallback: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n};\r\nconst viewportOverflowScrollFallback: XY = {\r\n x: false,\r\n y: false,\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: Options, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let paddingInfo = paddingInfoFallback;\r\n let viewportPaddingStyle = viewportPaddingStyleFallback;\r\n let viewportOverflowScroll = viewportOverflowScrollFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getPaddingInfo: () => paddingInfo,\r\n _setPaddingInfo(newPaddingInfo) {\r\n paddingInfo = newPaddingInfo || paddingInfoFallback;\r\n },\r\n _getViewportPaddingStyle: () => viewportPaddingStyle,\r\n _setViewportPaddingStyle(newPaddingStlye) {\r\n viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback;\r\n },\r\n _getViewportOverflowScroll: () => viewportOverflowScroll,\r\n _setViewportOverflowScroll(newViewportOverflowScroll) {\r\n viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback;\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (\r\n updateHints?: Partial | null,\r\n changedOptions?: OptionsValidated | null,\r\n force?: boolean\r\n ) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = _content && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, {\r\n _observeContent: true,\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const update = (changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log('flexboxGlue', _flexboxGlue);\r\n\r\n return {\r\n _update: update,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n Func,\r\n} from 'support/options';\r\nimport { ResizeBehavior, OverflowBehavior, VisibilityBehavior, AutoHideBehavior, Options } from 'options';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\n\r\nimport { validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { Options, defaultOptions, optionsTemplate } from 'options';\r\n\r\nconst OverlayScrollbars = (target: OSTarget | OSTargetObject, options?: Options, extensions?: any): any => {\r\n const currentOptions: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(options || ({} as Options), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance = {\r\n options(newOptions?: Options) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nexport default () => {\r\n return [getEnvironment(), OverlayScrollbars(document.body)];\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","Object","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","createStructureSetup","targetIsElm","osTargetObj","_host","host","_target","_padding","padding","_viewport","viewport","_content","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","createPaddingLifecycle","_setPaddingInfo","_setViewportPaddingStyle","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_sizeChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsolute","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_absolute","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getViewportPaddingStyle","_getPaddingInfo","_setViewportOverflowScroll","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","max","_contentScrollSize","_viewportSize","updateOverflowAmountCache","getCurrentOverflowAmountCache","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","paddingAbsoluteVertical","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","setViewportOverflowState","overflowAmount","overflow","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","scrollX","scrollY","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","prevStyle","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","redoViewportArrange","contentSize","viewportClientSize","contentScrollSizeChanged","arranged","overflowChanged","overflowAmountChanged","viewportArranged","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","isRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","ioEntryOrSize","isIntersecting","intersectionRatio","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreTargetAttrChange","_ignoreContentChange","Map","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","attrs","paddingInfoFallback","viewportPaddingStyleFallback","viewportOverflowScrollFallback","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","paddingInfo","viewportOverflowScroll","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newPaddingInfo","newPaddingStlye","_getViewportOverflowScroll","newViewportOverflowScroll","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","updating","elementEvents","envUpdateListener","log","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","contentMutationDebounce","hostMutationDebounce","resizeDebounce","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/options/options.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\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 | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\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 | void\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 | 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 | 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 | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null | undefined, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = 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 | 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 | 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 | 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 | 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) => 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) => evt.preventDefault();\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | 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 | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | 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 | null): 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 | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\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 * 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: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...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 PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: T,\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\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","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\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\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 function 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 = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n 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} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\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}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst 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 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\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\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 };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollbarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, InternalVersionOf, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject extends Required> {\r\n _host: HTMLElement;\r\n _viewportArrange: HTMLStyleElement | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = () => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: InternalVersionOf = targetIsElm\r\n ? ({} as InternalVersionOf)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _padding: (target as OSTargetObject).padding,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _content: (target as OSTargetObject).content,\r\n };\r\n\r\n if (targetIsElm) {\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n appendChildren(_content!, getTargetContents(_target));\r\n appendChildren(_host, _padding);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(_content));\r\n removeElements(_padding);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? 'auto' : '100%',\r\n });\r\n }\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _setPaddingInfo, _setViewportPaddingStyle, _structureSetup } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setPaddingInfo({\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n });\r\n _setViewportPaddingStyle(\r\n _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n }\r\n );\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getViewportPaddingStyle, _getPaddingInfo, _setViewportOverflowScroll } = lifecycleHub;\r\n const { _host, _padding, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalXY, _initialValue: { x: 0, y: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getPaddingInfo();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n const paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: XY,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n const applyStyle = overflowAmount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.x, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.y, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportPaddingStyle = _getViewportPaddingStyle();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _overflowScroll, _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { x: scrollX, y: scrollY } = _overflowScroll;\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = paddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = paddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = paddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n\r\n // hide overflowing scrollbars if there are any\r\n if (!_nativeScrollbarStyling) {\r\n style(_padding || _host, {\r\n overflow: scrollX || scrollY ? 'hidden' : '',\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (showNativeOverlaidScrollbars: boolean, viewportOverflowState?: ViewportOverflowState): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = paddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginTop marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n preMeasureViewportOverflowState\r\n );\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, contentScrollSize!, directionIsRTL!)\r\n ) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setViewportOverflowScroll(viewportOverflowState._overflowScroll);\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDOM,\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\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _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 targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\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 targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\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 if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\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: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\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 { XY, TRBL, CacheValues, each, push, keys, OptionsValidated, hasOwnProperty, isNumber, scrollLeft, scrollTop } from 'support';\r\nimport { Options } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface PaddingInfo {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: OptionsValidated | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: Options;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getPaddingInfo(): PaddingInfo;\r\n _setPaddingInfo(newPadding?: PaddingInfo | null): void;\r\n // padding related styles applied to the viewport element\r\n _getViewportPaddingStyle(): StyleObject;\r\n _setViewportPaddingStyle(newPaddingStlye?: StyleObject | null): void;\r\n _getViewportOverflowScroll(): XY;\r\n _setViewportOverflowScroll(newViewportOverflowScroll: XY): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: tabindex, open etc.\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst paddingInfoFallback: PaddingInfo = {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n};\r\nconst viewportPaddingStyleFallback: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n};\r\nconst viewportOverflowScrollFallback: XY = {\r\n x: false,\r\n y: false,\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: Options, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let paddingInfo = paddingInfoFallback;\r\n let viewportPaddingStyle = viewportPaddingStyleFallback;\r\n let viewportOverflowScroll = viewportOverflowScrollFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getPaddingInfo: () => paddingInfo,\r\n _setPaddingInfo(newPaddingInfo) {\r\n paddingInfo = newPaddingInfo || paddingInfoFallback;\r\n },\r\n _getViewportPaddingStyle: () => viewportPaddingStyle,\r\n _setViewportPaddingStyle(newPaddingStlye) {\r\n viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback;\r\n },\r\n _getViewportOverflowScroll: () => viewportOverflowScroll,\r\n _setViewportOverflowScroll(newViewportOverflowScroll) {\r\n viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback;\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (\r\n updateHints?: Partial | null,\r\n changedOptions?: OptionsValidated | null,\r\n force?: boolean\r\n ) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = _content && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, {\r\n _observeContent: true,\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const update = (changedOptions?: OptionsValidated | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n console.log(getEnvironment());\r\n\r\n return {\r\n _update: update,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n Func,\r\n} from 'support/options';\r\nimport { ResizeBehavior, OverflowBehavior, VisibilityBehavior, AutoHideBehavior, Options } from 'options';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\n\r\nimport { validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { Options, defaultOptions, optionsTemplate } from 'options';\r\n\r\nconst OverlayScrollbars = (target: OSTarget | OSTargetObject, options?: Options, extensions?: any): any => {\r\n const currentOptions: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(options || ({} as Options), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance = {\r\n options(newOptions?: Options) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nexport default () => {\r\n return [getEnvironment(), OverlayScrollbars(document.body)];\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","Object","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","createStructureSetup","targetIsElm","osTargetObj","_host","host","_target","_padding","padding","_viewport","viewport","_content","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","createPaddingLifecycle","_setPaddingInfo","_setViewportPaddingStyle","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_sizeChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsolute","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_absolute","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getViewportPaddingStyle","_getPaddingInfo","_setViewportOverflowScroll","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","max","_contentScrollSize","_viewportSize","updateOverflowAmountCache","getCurrentOverflowAmountCache","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","paddingAbsoluteVertical","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","overflowAmount","overflow","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","scrollX","scrollY","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","contentSize","viewportClientSize","contentScrollSizeChanged","overflowChanged","overflowAmountChanged","viewportArranged","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","isRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","ioEntryOrSize","isIntersecting","intersectionRatio","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreTargetAttrChange","_ignoreContentChange","Map","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","attrs","paddingInfoFallback","viewportPaddingStyleFallback","viewportOverflowScrollFallback","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","paddingInfo","viewportOverflowScroll","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newPaddingInfo","newPaddingStlye","_getViewportOverflowScroll","newViewportOverflowScroll","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","updating","elementEvents","envUpdateListener","log","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","contentMutationDebounce","hostMutationDebounce","resizeDebounce","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"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 149923e..d04c57b 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=t()}(this,(function(){"use strict";var n=function(n,t){var r,e=t||{},i=e.o,o=e.u,u=e.s,a=o;return{v:function(t,e){var o=a,c=n?n(e,a,r):e,f=t||(i?!i(o,c):o!==c);return(f||u)&&(a=c,r=o),{_:a,g:r,p:f}},m:function(n){return{_:a,g:r,p:!!n}}}},t=Node.ELEMENT_NODE,r=Object.prototype,e=r.toString,i=r.hasOwnProperty;function o(n){return void 0===n}function u(n){return null===n}var a=function(n){return o(n)||u(n)?""+n:e.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function f(n){return"string"==typeof n}function l(n){return"function"==typeof n}function s(n){return Array.isArray(n)}function v(n){return"object"==typeof n&&!s(n)&&!u(n)}function d(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(s(n)||!l(n)&&r)&&(!(t>0&&v(n))||t-1 in n)}function h(n){if(!n||!v(n)||"object"!==a(n))return!1;var t,r=n.constructor,e=r&&r.prototype,u=i.call(n,"constructor"),c=e&&i.call(e,"isPrototypeOf");if(r&&!u&&!c)return!1;for(t in n);return o(t)||i.call(n,t)}function _(n){var r=window.Element;return!!n&&(r?n instanceof r:n.nodeType===t)}function g(n,t){if(d(n))for(var r=0;r0;e=u[i++];)o=!!r(n.classList,e)&&o}return o},Z=function(n,t){Q(n,t,(function(n,t){return n.add(t)}))},nn=function(n,t){Q(n,t,(function(n,t){return n.remove(t)}))},tn={w:0,h:0},rn=function(){return{w:window.innerWidth,h:window.innerHeight}},en=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:tn},on=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:tn},un=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:tn},an=function(n){return n.getBoundingClientRect()},cn=function(n){return n.split(" ")},fn=function(n,t,r,e){g(cn(t),(function(t){n.removeEventListener(t,r,e)}))},ln=function(n,t,r,e){var i=function(){if(o(T)){T=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){T=!0}}))}catch(n){}}return T}(),u=i&&e&&e.S||!1,a=e&&e.M||!1,c=e&&e.O||!1,f=[],l=i?{passive:u,capture:a}:a;return g(cn(t),(function(t){var e=c?function(i){n.removeEventListener(t,e,a),r&&r(i)}:r;w(f,fn.bind(null,n,t,e,a)),n.addEventListener(t,e,l)})),y.bind(0,f)},sn=function(n){return n.stopPropagation()},vn=function(n){return n.preventDefault()},dn=function(n,t,r,e){if(n&&t){var i=!0;return g(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},hn=function(n,t){return dn(n,t,["w","h"])},_n=function(n,t){return dn(n,t,["x","y"])},gn=function(n,t){return dn(n,t,["t","r","b","l"])},pn=function(n,t,r){return dn(n,t,["width","height"],r&&function(n){return Math.round(n)})},wn=function(){},bn={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},mn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},yn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},xn=function(n,t,r){try{if(n){var e=n.style;o(e[t])?e.setProperty(t,r):e[t]=function(n,t){return!bn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r)}}catch(i){}};function Sn(n,t){var r=f(t);if(s(t)||r){var e=r?"":{};if(n){var i=window.getComputedStyle(n,null);e=r?yn(n,i,t):t.reduce((function(t,r){return t[r]=yn(n,i,r),t}),e)}return e}g(S(t),(function(r){return xn(n,r,t[r])}))}var zn={x:0,y:0},Mn=function(n){var t=n?an(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:zn};var On=function(n){var t={exports:{}};return n(t,t.exports),t.exports}((function(n){function t(){return n.exports=t=Object.assign||function(n){for(var t=1;t0?"\r\nValid strings are: [ "+S.join(", ")+" ].":""));delete l[v]}})),{C:l,L:c}}(n,t,r||{},e||!1)};var jn,Rn=Math.abs,In=Math.round,Vn=function(n,t){q(n,t);var r=on(t),e=en(t);return{x:e.h-r.h,y:e.w-r.w}},En=function(n,t){Sn(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),C(n,0);var r=Mn(n),e=Mn(t);C(n,-999);var i=Mn(t);return{i:r.x===e.x,n:e.x!==i.x}},Pn=function(n,t){Z(n,"os-environment-flexbox-glue");var r=an(n),e=an(t),i=pn(e,r,!0);Z(n,"os-environment-flexbox-glue-max");var o=an(n),u=an(t),a=pn(u,o,!0);return i&&a},qn=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},Bn=function(){var n,t,r=document.body,e=W('
')[0],i=e.firstChild,o=new Set,u=Vn(r,e),a={x:0===u.x,y:0===u.y},c={A:!1,T:u,j:a,R:!1,I:"-1"===Sn(e,"zIndex"),V:En(e,i),P:Pn(e,i),q:function(n){o.add(n)},B:function(n){o.delete(n)}};if(t="style",(n=e)&&n.removeAttribute(t),D(e),!a.x||!a.y){var f=rn(),l=qn(),s=u;window.addEventListener("resize",(function(){if(o.size){var n=rn(),t={w:n.w-f.w,h:n.h-f.h};if(0===t.w&&0===t.h)return;var i={w:Rn(t.w),h:Rn(t.h)},u={w:Rn(In(n.w/(f.w/100))),h:Rn(In(n.h/(f.h/100)))},a=qn(),c=i.w>2&&i.h>2,v=(h=u.h,_=Rn(u.w),g=Rn(h),!(_!==g&&_+1!==g&&_-1!==g));if(c&&v&&(a!==l&&l>0)){var d=jn.T=Vn(r,e);D(e),s.x===d.x&&s.y===d.y||y(o),s=d}f=n,l=a}var h,_,g}))}return c},Fn=function(){return jn||(jn=Bn()),jn},Dn=function(n){q(E(n),V(n)),D(n)},Hn=0,Wn=function(n){var r=function(n){var r=window.HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===t)}(n),e=r?{}:{F:n.host,D:n.target,H:n.padding,W:n.viewport,Y:n.content};if(r){var i=H("os-padding"),u=H("os-viewport"),a=H("os-content");q(i,u),q(u,a),e.D=n,e.H=i,e.W=u,e.Y=a}var c=e.D,f=e.H,l=e.W,s=e.Y,v=[],d=I(c,"textarea"),h=!d&&I(c,"body"),_=d?e.F||H():c,g=function(n){return d?c:V(n)};if(d&&_!==e.F&&(F(c,_),w(v,(function(){F(_,c),D(_)}))),r)q(s,g(c)),q(_,f),w(v,(function(){q(_,V(s)),D(f),nn(_,"os-host")}));else{var p=s||l||f||_,b=o(f),m=o(l),x=o(s),S=g(p);f=e.H=b?H():f,l=e.W=m?H():l,s=e.Y=x?H():s,q(_,f),q(f||_,l),q(l,s),q(s||l,S),w(v,(function(){x&&Dn(s),m&&Dn(l),b&&Dn(f),nn(_,"os-host"),nn(f,"os-padding"),nn(l,"os-viewport"),nn(s,"os-content")}))}Z(_,"os-host"),Z(f,"os-padding"),Z(l,"os-viewport"),Z(s,"os-content");var z,M,O,C=c.ownerDocument,A=C.body,T={k:C.defaultView,N:C,X:E(A),G:A,U:d,$:h},j=On({},e,{F:_}),R=Fn(),B=R.R,W=R.j,Y=R.I;if(B)w(v,nn.bind(0,l,"os-viewport-scrollbar-styled"));else if(!Y&&(W.x||W.y)){var k=(L(O=document.createElement("style"),"id","os-viewport-arrange-"+Hn),Hn++,O);M=k,P(E(z=l),z,M),w(v,D.bind(0,k)),j.J=k}return{K:j,Z:T,nn:function(){y(v)}}},Yn=function(t){var r=t.tn,e=t.rn,i=t.en.K,o=i.F,u=i.H,a=i.W,c=n((function(){return f=Sn(o,[i=(r=(n="padding")?n+"-":"")+"top"+(e=t?"-"+t:""),u=r+"right"+e,a=r+"bottom"+e,c=r+"left"+e]),{t:mn(f[i]),r:mn(f[u]),b:mn(f[a]),l:mn(f[c])};var n,t,r,e,i,u,a,c,f}),{o:gn}),f=c.v,l=c.m;return function(n,t,i){var o=l(i),c=(o._,o.p),s=Fn().R,v=n.in,d=n.on,h=d._,_=d.p,g=t("paddingAbsolute"),p=g._,w=g.p;if(v||c){var b=f(i);b._,c=b.p}var m=w||_||c;if(m){var y=f(i)._,x=!p||!u&&!s,S=y.r+y.l,z=y.t+y.b,M={marginTop:0,marginRight:0,marginBottom:x?-z:0,marginLeft:0,top:x?-y.t:0,right:0,bottom:0,left:0,maxWidth:x?"calc(100% + "+S+"px)":""},O={paddingTop:x?y.t:0,paddingRight:x?y.r:0,paddingBottom:x?y.b:0,paddingLeft:x?y.l:0};if(x){var L=h?"right":"left",C=h?"marginLeft":"marginRight",A=h?y.r:y.l;M[L]=-A,M[C]=-S}Sn(u||a,M),Sn(a,O),r({un:!x,H:y}),e(u?O:On({},M,O))}return{an:m}}},kn=function(t){var r=t.en,e=t.cn,i=t.fn,o=t.ln,u=t.sn,a=r.K,c=a.F,f=a.H,l=a.W,s=a.J,v=n((function(n){return w(n.vn,n.dn,n.hn)}),{o:hn}),d=v.v,h=v.m,_=n((function(n){return{x:Math.max(0,n._n.w-n.gn.w),y:Math.max(0,n._n.h-n.gn.h)}}),{o:_n,u:{x:0,y:0}}),g=_.v,p=_.m,w=function(n,t,r){return{w:n.w-Math.round(Math.max(0,r.width-t.w)),h:n.h-Math.round(Math.max(0,r.height-t.h))}},b=function(n,t){if(Sn(l,{height:""}),t){var r=o(),e=r.un,i=r.H,u=n.pn,a=n.wn,f=an(c),s=en(c),v=on(c),d=e?i.b+i.t:0,h=v.h+(f.height-s.h);Sn(l,{height:h+(u.x?a.x:0)-d})}},m=function(n,t){var r=Fn(),e=r.T,i=r.j,o=r.R,u=i.x,a=i.y,c=o||n?0:42,f=!t?Sn(l,["overflowX","overflowY"]):t,s={x:"scroll"===f.overflowX,y:"scroll"===f.overflowY};return{pn:s,wn:{x:s.x&&!o?u?c:e.x:0,y:s.y&&!o?a?c:e.y:0}}},y=function(n,t,r){if(e){var o=n.wn,u=o.x,a=o.y,c=i(),f=c[r?"paddingRight":"paddingLeft"],v=c.paddingTop,d={w:a?a+t.w-f+"px":"",h:u?u+t.h-v+"px":""};if(s){var h=s.sheet;if(h){var _=h.cssRules;if(_){_.length||h.insertRule("#"+L(s,"id")+" + .os-viewport-arrange::before {}",0);var g=_[0].style;g.width=d.w,g.height=d.h}}}else Sn(l,{"--viewport-arrange-width":d.w,"--viewport-arrange-height":d.h})}return e};return function(n,t,r){var o,a=n.on,s=n.bn,v=n.in,_=n.mn,x=n.yn,z=n.an,M=Fn(),O=M.P,L=M.R,C=M.j,A=s._,T=s.p,j=a._,R=a.p,I=t("nativeScrollbarsOverlaid.show"),V=I._,E=I.p,P=V&&C.x&&C.y,q=!O&&(v||x||_||E||T),B=p(r),F=h(r);if(E&&L&&(P?nn(l,"os-viewport-scrollbar-styled"):Z(l,"os-viewport-scrollbar-styled")),q&&(o=m(P),b(o,!!A)),v||z||x||E||R){var D=function(){if(e){var n=Fn().P,t=i();n||(t=On({},t,{height:""}));var r=Sn(l,S(t));return nn(l,"os-viewport-arrange"),Sn(l,t),function(){Sn(l,r),Z(l,"os-viewport-arrange")}}return wn}(),H=on(l),W=an(l),Y=en(l),k=un(l),N=H,X=F=d(r,{hn:W,dn:Y,vn:k}),G=X._,U=X.p;if(D(),(U||E)&&!P)y(o||m(P),G,j)&&(N=on(l),k=w(un(l),en(l),an(l)));B=g(r,{_n:{w:Math.max(G.w,k.w),h:Math.max(G.h,k.h)},gn:{w:N.w+Math.max(0,H.w-G.w),h:N.h+Math.max(0,H.h-G.h)}})}var $=t("overflow"),J=$._,K=$.p,Q=F,tn=Q._,rn=Q.p,cn=B,fn=cn._,ln=cn.p;if(z||rn||ln||K||E||R||q){var sn={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,maxWidth:"",overflowY:"",overflowX:""},vn=function(n,t,r,e){var i=function(n,t,r,e){var i="visible-scroll"===r,o=t>0&&("scroll"===r||"hidden"===r);return o&&(e[n?"overflowX":"overflowY"]=r),{xn:!o,Sn:i?"scroll":"hidden"}},o=i(!0,t.x,r.x,e),u=o.xn,a=o.Sn,c=i(!1,t.y,r.y,e),f=c.xn,l=c.Sn;return u&&!f&&(e.overflowX=a),f&&!u&&(e.overflowY=l),m(n,e)}(P,fn,J,sn);!function(n,t,r,e){var o=Fn().R,u=n.pn,a=n.wn,l=a.x,s=a.y,v=u.x,d=u.y,h=i(),_=t?"marginLeft":"marginRight",g=t?"paddingLeft":"paddingRight",p=h[_],w=h.marginBottom,b=h[g],m=h.paddingBottom;e.maxWidth="calc(100% + "+(s+-1*p)+"px)",e[_]=-s+p,e.marginBottom=-l+w,r&&(e[g]=b+s,e.paddingBottom=m+l),o||Sn(f||c,{overflow:v||d?"hidden":""})}(vn,j,y(vn,tn,j),sn),q&&b(vn,!!A),Sn(l,sn),u(vn.pn)}}},Nn={direction:["rtl"]},Xn=function(n){var t=!1;return g(Sn(n,["direction"]),(function(n,r){t=t||p(Nn[r],n)>-1})),t},Gn=function(n){return n&&(n.height||n.width)},Un=function(t,r,e){var i,o=e||{},u=o.zn,a=void 0!==u&&u,c=o.Mn,f=void 0!==c&&c,l=Fn().V,v=W('
')[0],d=v.firstChild,h=n(0,{s:!0,o:function(n,t){return!(!n||!Gn(n)&&Gn(t))}}).v,_=function(n){var t=n&&"boolean"==typeof n._,e=!1;if(s(n)&&n.length>0){var i=h(0,n.pop().contentRect),o=i.g,u=i._;i.p;e=!o||!Gn(u)}else t&&n.p;if(a){var c=t?n._:Xn(v);C(v,c?l.n?-3333333:l.i?0:3333333:3333333),A(v,3333333)}e||r(t?n:void 0)},g=[],p=!!f&&_;if(U){var b=new U(_);b.observe(d),w(g,(function(){return b.disconnect()}))}else{var m=W('
');q(d,m),Z(d,"os-size-observer-listener-scroll");var x,S=m[0],z=S.lastChild,M=S.firstChild,O=null==M?void 0:M.firstChild,L=en(d),T=L,j=!1,R=function(){C(M,3333333),A(M,3333333),C(z,3333333),A(z,3333333)},I=function(){x=0,j&&(L=T,_())},V=function(n){return T=en(d),j=!n||!hn(T,L),n&&j&&!x?($(x),x=J(I)):n||I(),R(),n&&(vn(n),sn(n)),!1};w(g,[ln(M,"scroll",V),ln(z,"scroll",V)]),Sn(O,{width:3333333,height:3333333}),R(),p=f?function(){return V()}:R}if(a){var E=(i=n((function(){return Xn(v)}))).v;w(g,ln(v,"scroll",(function(n){var t=E(),r=t._;return t.p&&(Sn(d,r?{left:"auto",right:0}:{left:0,right:"auto"}),_(t)),vn(n),sn(n),!1})))}return p&&(Z(v,"os-size-observer-appear"),w(g,ln(v,"animationstart",p,{O:!!U}))),B(t,v),{nn:function(){y(g),D(v)},On:function(n){return{on:i?i.m(n):{_:!1,g:!1,p:!1}}}}},$n=function(n,t,r,e){var i,u=function(){r.forEach((function(n,t){fn(t,n,e)})),r.clear()},a=function(t){i&&g(i.reduce((function(r,e){if(e){var i=e[0],o=e[1],u=o&&i&&(t?t(i):R(i,n));u&&w(r,[u,l(o)?o(u):o],!0)}return r}),[]),(function(n){var t=n[0],i=n[1];g(t,(function(n){!function(n,t){var i=r.get(n),u=o(i),a=function(){r.set(n,t),ln(n,t,e)};u||t===i?u&&a():(fn(n,i,e),a())}(n,i)}))}))},c=function(n){i=n,u(),a()};return t&&c(t),{nn:u,Ln:a,v:c}},Jn=function(n,t,r){var e,i,o,u,a,l,s,v,d,h,_=!1,b=r||{},y=b.Cn,x=b.An,S=b.Tn,z=b.jn,M=b.Rn,O=b.In,C=b.Vn,A=$n(n,y&&z,new Map,(e=function(){_&&t([],!1,!0)},l=c(i=84)&&i>0,s=c(o)&&o>0,v=l?window.clearTimeout:$,d=l?window.setTimeout:J,h=function(n){a=s?performance.now():0,u&&v(u),e.apply(this,n)},function(){var n=h.bind(this,arguments),t=!!s&&performance.now()-a>=o;u&&v(u),u=t?n():d(n,i)})),T=A.Ln,j=A.nn,V=A.v,E=S||[],P=(x||[]).concat(E),q=function(e){var i=O||wn,o=C||wn,u=[],a=[],c=!1,l=!1,s=!1;g(e,(function(t){var e=t.attributeName,v=t.target,d=t.type,h=t.oldValue,_=t.addedNodes,g="attributes"===d,b="childList"===d,m=n===v,x=g&&f(e)?L(v,e):0,S=0!==x&&h!==x,z=S&&m&&!y&&!i(v,e,h,x),O=p(E,e)>-1&&S;if(z&&w(u,e),y){var C=!g,A=g&&O&&!m,T=A&&M&&I(v,M),j=(T?!i(v,e,h,x):C||A)&&!o(t,!!T,n,r);w(a,_),l=l||j,s=s||b}c=c||z&&O})),s&&!m(a)&&T((function(n){return a.reduce((function(t,r){return w(t,R(n,r)),I(r,n)?w(t,r):t}),[])})),(!m(u)||c||l)&&t(u,c,l)},B=new X(q);return B.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:P,subtree:y,childList:y,characterData:y}),_=!0,{En:function(){_&&(j(),B.disconnect(),_=!1)},Pn:function(n){V(_&&y&&n)},v:function(){_&&q(B.takeRecords())}}},Kn=function(n,t){return n&&t.split(".").reduce((function(n,t){return n&&x(n,t)?n[t]:void 0}),n)},Qn=["id","class","style","open"],Zn={un:!1,H:{t:0,r:0,b:0,l:0}},nt={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},tt={x:!1,y:!1},rt={_:!1,g:!1,p:!1},et={_:!1,g:!1,p:!1},it=function(t,r){var e=Zn,i=nt,o=tt,u=r.K,a=u.F,f=u.W,l=u.Y,s=Fn(),v=s.R,d=s.j,h=s.P,_=s.q,p=s.B,b=!v&&(d.x||d.y),m=[],x={qn:t,en:r,cn:b,ln:function(){return e},tn:function(n){e=n||Zn},fn:function(){return i},rn:function(n){var t,r;i=n?(r=nt,S(t=n).reduce((function(n,r){var e=t[r];return n[r]=""===e?0:e,n}),On({},r))):nt},Bn:function(){return o},sn:function(n){o=n||tt}};w(m,function(n){var t=n.en.K.Y;return function(n){var r=n.bn,e=r._;r.p&&Sn(t,{height:e?"auto":"100%"})}}(x)),w(m,Yn(x)),w(m,kn(x));var z=function(n,r,e){var i=n||{},o=i.on,u=i.bn,a=i.in,l=void 0===a?e||!1:a,s=i.mn,v=void 0===s?e||!1:s,d=i.yn,_=void 0===d?e||!1:d,p=i.an,w=void 0===p?e||!1:p,y=o||(O?O.On(e).on:rt),x=u||(M?M.On(e).bn:et),S=function(n){return{_:Kn(t,n),p:e||void 0!==Kn(r,n)}},z=b||!h,L=z&&C(f),T=z&&A(f);g(m,(function(n){var t=n({on:y,bn:x,in:l,mn:v,yn:_,an:w},S,!!e)||{},r=t.in,i=t.mn,o=t.yn,u=t.an;l=r||l,v=i||v,_=o||_,w=u||w})),c(L)&&C(f,L),c(T)&&A(f,T)},M=l&&function(t,r){var e=W('
')[0],i=[],o=n((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{u:!1}),u=o.v,a=o.m;if(G){var c=new G((function(n){if(n&&n.length>0){var t=n.pop();if(t){var e=u(0,t);e.p&&r(e)}}}),{root:t});c.observe(e),w(i,(function(){return c.disconnect()}))}else{var f=function(){var n=en(e),t=u(0,n);t.p&&r(t)};w(i,Un(e,f).nn),f()}return B(t,e),{nn:function(){y(i),D(e)},On:function(n){return{bn:a(n)}}}}(a,(function(n){z({bn:n})})),O=Un(a,(function(n){z({on:n,in:!n})}),{Mn:!0,zn:!v}),L=(Jn(a,(function(){requestAnimationFrame((function(){z({mn:!0})}))}),{Tn:Qn,An:Qn}),Jn(l||f,(function(){requestAnimationFrame((function(){z({yn:!0})}))}),{Cn:!0,Tn:Qn,An:Qn,jn:t.updating.elementEvents}),function(n,t){z(null,n,t)}),T=L.bind(null,null,!0);return _(T),console.log("flexboxGlue",h),{v:L,nn:function(){p(T)}}},ot=An.number,ut=[An.string,An.array,An.null],at=[!0,An.boolean],ct=[!1,An.boolean],ft=function n(t){var r={Fn:{},qn:{}};return g(S(t),(function(e){var i=t[e];if(s(i))r.Fn[e]=i[1],r.qn[e]=i[0];else{var o=n(i);r.Fn[e]=o.Fn,r.qn[e]=o.qn}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:ct,updating:{elementEvents:[[["img","load"]],[An.array,An.null]],contentMutationDebounce:[80,ot],hostMutationDebounce:[0,ot],resizeDebounce:[0,ot]},overflow:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,ot],dragScroll:at,clickScroll:ct,touch:at},textarea:{dynWidth:ct,dynHeight:ct,inheritedAttrs:[["style","class"],ut]},nativeScrollbarsOverlaid:{show:ct,initialize:ct}}),lt=ft.Fn,st=ft.qn;return function(){return[Fn(),(n=document.body,r=z({},st,Tn(t||{},lt,null,!0).L),e=Wn(n),i=it(r,e),o={options:function(n){if(n){var t=Tn(n,lt,r,!0).L;M(t)||(z(r,t),i.v(t))}return r},update:function(n){i.v(null,n)}},o.update(!0),o)];var n,t,r,e,i,o}})); \ No newline at end of file +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=t()}(this,(function(){"use strict";var n=function(n,t){var r,e=t||{},i=e.o,o=e.u,u=e.s,a=o;return{v:function(t,e){var o=a,c=n?n(e,a,r):e,f=t||(i?!i(o,c):o!==c);return(f||u)&&(a=c,r=o),{g:a,p:r,_:f}},m:function(n){return{g:a,p:r,_:!!n}}}},t=Node.ELEMENT_NODE,r=Object.prototype,e=r.toString,i=r.hasOwnProperty;function o(n){return void 0===n}function u(n){return null===n}var a=function(n){return o(n)||u(n)?""+n:e.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function f(n){return"string"==typeof n}function l(n){return"function"==typeof n}function s(n){return Array.isArray(n)}function v(n){return"object"==typeof n&&!s(n)&&!u(n)}function d(n){var t=!!n&&n.length,r=c(t)&&t>-1&&t%1==0;return!!(s(n)||!l(n)&&r)&&(!(t>0&&v(n))||t-1 in n)}function h(n){if(!n||!v(n)||"object"!==a(n))return!1;var t,r=n.constructor,e=r&&r.prototype,u=i.call(n,"constructor"),c=e&&i.call(e,"isPrototypeOf");if(r&&!u&&!c)return!1;for(t in n);return o(t)||i.call(n,t)}function g(n){var r=window.Element;return!!n&&(r?n instanceof r:n.nodeType===t)}function p(n,t){if(d(n))for(var r=0;r0;e=u[i++];)o=!!r(n.classList,e)&&o}return o},Z=function(n,t){Q(n,t,(function(n,t){return n.add(t)}))},nn=function(n,t){Q(n,t,(function(n,t){return n.remove(t)}))},tn={w:0,h:0},rn=function(){return{w:window.innerWidth,h:window.innerHeight}},en=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:tn},on=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:tn},un=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:tn},an=function(n){return n.getBoundingClientRect()},cn=function(n){return n.split(" ")},fn=function(n,t,r,e){p(cn(t),(function(t){n.removeEventListener(t,r,e)}))},ln=function(n,t,r,e){var i=function(){if(o(T)){T=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){T=!0}}))}catch(n){}}return T}(),u=i&&e&&e.S||!1,a=e&&e.O||!1,c=e&&e.M||!1,f=[],l=i?{passive:u,capture:a}:a;return p(cn(t),(function(t){var e=c?function(i){n.removeEventListener(t,e,a),r&&r(i)}:r;w(f,fn.bind(null,n,t,e,a)),n.addEventListener(t,e,l)})),y.bind(0,f)},sn=function(n){return n.stopPropagation()},vn=function(n){return n.preventDefault()},dn=function(n,t,r,e){if(n&&t){var i=!0;return p(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},hn=function(n,t){return dn(n,t,["w","h"])},gn=function(n,t){return dn(n,t,["x","y"])},pn=function(n,t){return dn(n,t,["t","r","b","l"])},_n=function(n,t,r){return dn(n,t,["width","height"],r&&function(n){return Math.round(n)})},wn=function(){},bn={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},mn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},yn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},xn=function(n,t,r){try{if(n){var e=n.style;o(e[t])?e.setProperty(t,r):e[t]=function(n,t){return!bn[n.toLowerCase()]&&c(t)?t+"px":t}(t,r)}}catch(i){}};function Sn(n,t){var r=f(t);if(s(t)||r){var e=r?"":{};if(n){var i=window.getComputedStyle(n,null);e=r?yn(n,i,t):t.reduce((function(t,r){return t[r]=yn(n,i,r),t}),e)}return e}p(S(t),(function(r){return xn(n,r,t[r])}))}var zn={x:0,y:0},On=function(n){var t=n?an(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:zn};var Mn=function(n){var t={exports:{}};return n(t,t.exports),t.exports}((function(n){function t(){return n.exports=t=Object.assign||function(n){for(var t=1;t0?"\r\nValid strings are: [ "+S.join(", ")+" ].":""));delete l[v]}})),{A:l,L:c}}(n,t,r||{},e||!1)};var Rn,jn=Math.abs,Vn=Math.round,In=function(n,t){P(n,t);var r=on(t),e=en(t);return{x:e.h-r.h,y:e.w-r.w}},Bn=function(n,t){Sn(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),A(n,0);var r=On(n),e=On(t);A(n,-999);var i=On(t);return{i:r.x===e.x,n:e.x!==i.x}},En=function(n,t){Z(n,"os-environment-flexbox-glue");var r=an(n),e=an(t),i=_n(e,r,!0);Z(n,"os-environment-flexbox-glue-max");var o=an(n),u=an(t),a=_n(u,o,!0);return i&&a},Pn=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},qn=function(){var n,t,r=document.body,e=W('
')[0],i=e.firstChild,o=new Set,u=In(r,e),a={x:0===u.x,y:0===u.y},c={C:!1,T:u,R:a,j:!1,V:"-1"===Sn(e,"zIndex"),I:Bn(e,i),B:En(e,i),P:function(n){o.add(n)},q:function(n){o.delete(n)}};if(t="style",(n=e)&&n.removeAttribute(t),D(e),!a.x||!a.y){var f=rn(),l=Pn(),s=u;window.addEventListener("resize",(function(){if(o.size){var n=rn(),t={w:n.w-f.w,h:n.h-f.h};if(0===t.w&&0===t.h)return;var i={w:jn(t.w),h:jn(t.h)},u={w:jn(Vn(n.w/(f.w/100))),h:jn(Vn(n.h/(f.h/100)))},a=Pn(),c=i.w>2&&i.h>2,v=(h=u.h,g=jn(u.w),p=jn(h),!(g!==p&&g+1!==p&&g-1!==p));if(c&&v&&(a!==l&&l>0)){var d=Rn.T=In(r,e);D(e),s.x===d.x&&s.y===d.y||y(o),s=d}f=n,l=a}var h,g,p}))}return c},Fn=function(){return Rn||(Rn=qn()),Rn},Dn=function(n){P(B(n),I(n)),D(n)},Hn=0,Wn=function(n){var r=function(n){var r=window.HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===t)}(n),e=r?{}:{F:n.host,D:n.target,H:n.padding,W:n.viewport,Y:n.content};if(r){var i=H("os-padding"),u=H("os-viewport"),a=H("os-content");P(i,u),P(u,a),e.D=n,e.H=i,e.W=u,e.Y=a}var c=e.D,f=e.H,l=e.W,s=e.Y,v=[],d=V(c,"textarea"),h=!d&&V(c,"body"),g=d?e.F||H():c,p=function(n){return d?c:I(n)};if(d&&g!==e.F&&(F(c,g),w(v,(function(){F(g,c),D(g)}))),r)P(s,p(c)),P(g,f),w(v,(function(){P(g,I(s)),D(f),nn(g,"os-host")}));else{var _=s||l||f||g,b=o(f),m=o(l),x=o(s),S=p(_);f=e.H=b?H():f,l=e.W=m?H():l,s=e.Y=x?H():s,P(g,f),P(f||g,l),P(l,s),P(s||l,S),w(v,(function(){x&&Dn(s),m&&Dn(l),b&&Dn(f),nn(g,"os-host"),nn(f,"os-padding"),nn(l,"os-viewport"),nn(s,"os-content")}))}Z(g,"os-host"),Z(f,"os-padding"),Z(l,"os-viewport"),Z(s,"os-content");var z,O,M,A=c.ownerDocument,C=A.body,T={k:A.defaultView,N:A,X:B(C),U:C,$:d,G:h},R=Mn({},e,{F:g}),j=Fn(),q=j.j,W=j.R,Y=j.V;if(q)w(v,nn.bind(0,l,"os-viewport-scrollbar-styled"));else if(!Y&&(W.x||W.y)){var k=(L(M=document.createElement("style"),"id","os-viewport-arrange-"+Hn),Hn++,M);O=k,E(B(z=l),z,O),w(v,D.bind(0,k)),R.J=k}return{K:R,Z:T,nn:function(){y(v)}}},Yn=function(t){var r=t.tn,e=t.rn,i=t.en.K,o=i.F,u=i.H,a=i.W,c=n((function(){return f=Sn(o,[i=(r=(n="padding")?n+"-":"")+"top"+(e=t?"-"+t:""),u=r+"right"+e,a=r+"bottom"+e,c=r+"left"+e]),{t:mn(f[i]),r:mn(f[u]),b:mn(f[a]),l:mn(f[c])};var n,t,r,e,i,u,a,c,f}),{o:pn}),f=c.v,l=c.m;return function(n,t,i){var o=l(i),c=(o.g,o._),s=Fn().j,v=n.in,d=n.on,h=d.g,g=d._,p=t("paddingAbsolute"),_=p.g,w=p._;if(v||c){var b=f(i);b.g,c=b._}var m=w||g||c;if(m){var y=f(i).g,x=!_||!u&&!s,S=y.r+y.l,z=y.t+y.b,O={marginTop:0,marginRight:0,marginBottom:x?-z:0,marginLeft:0,top:x?-y.t:0,right:0,bottom:0,left:0,maxWidth:x?"calc(100% + "+S+"px)":""},M={paddingTop:x?y.t:0,paddingRight:x?y.r:0,paddingBottom:x?y.b:0,paddingLeft:x?y.l:0};if(x){var L=h?"right":"left",A=h?"marginLeft":"marginRight",C=h?y.r:y.l;O[L]=-C,O[A]=-S}Sn(u||a,O),Sn(a,M),r({un:!x,H:y}),e(u?M:Mn({},O,M))}return{an:m}}},kn=function(t){var r=t.en,e=t.cn,i=t.fn,o=t.ln,u=t.sn,a=r.K,c=a.F,f=a.H,l=a.W,s=a.J,v=n((function(n){return b(n.vn,n.dn,n.hn)}),{o:hn}),d=v.v,h=v.m,g=n((function(n){return{x:Math.max(0,n.gn.w-n.pn.w),y:Math.max(0,n.gn.h-n.pn.h)}}),{o:gn,u:{x:0,y:0}}),_=g.v,w=g.m,b=function(n,t,r){return{w:n.w-Math.round(Math.max(0,r.width-t.w)),h:n.h-Math.round(Math.max(0,r.height-t.h))}},m=function(n,t){if(Sn(l,{height:""}),t){var r=o(),e=r.un,i=r.H,u=n._n,a=n.wn,f=an(c),s=en(c),v=on(c),d=e?i.b+i.t:0,h=v.h+(f.height-s.h);Sn(l,{height:h+(u.x?a.x:0)-d})}},y=function(n,t){var r=Fn(),e=r.T,i=r.R,o=r.j,u=i.x,a=i.y,c=o||n?0:42,f=!t?Sn(l,["overflowX","overflowY"]):t,s={x:"scroll"===f.overflowX,y:"scroll"===f.overflowY};return{_n:s,bn:{x:u&&!!c,y:a&&!!c},wn:{x:s.x&&!o?u?c:e.x:0,y:s.y&&!o?a?c:e.y:0}}},x=function(n,t,r){if(e){var o=n.wn,u=n.bn,a=u.x,c=u.y,f=o.x,v=o.y,d=i(),h=d[r?"paddingRight":"paddingLeft"],g=d.paddingTop,p={w:v&&c?v+t.w-h+"px":"",h:f&&a?f+t.h-g+"px":""};if(s){var _=s.sheet;if(_){var w=_.cssRules;if(w){w.length||_.insertRule("#"+L(s,"id")+" + .os-viewport-arrange::before {}",0);var b=w[0].style;b.width=p.w,b.height=p.h}}}else Sn(l,{"--viewport-arrange-width":p.w,"--viewport-arrange-height":p.h})}return e};return function(n,t,r){var o,a=n.on,s=n.mn,v=n.in,g=n.yn,z=n.xn,O=n.an,M=Fn(),L=M.B,A=M.j,C=M.R,T=s.g,R=s._,j=a.g,V=a._,I=t("nativeScrollbarsOverlaid.show"),B=I.g,E=I._,P=B&&C.x&&C.y,q=!L&&(v||z||g||E||R),F=w(r),D=h(r);if(E&&A&&(P?nn(l,"os-viewport-scrollbar-styled"):Z(l,"os-viewport-scrollbar-styled")),q&&(o=y(P),m(o,!!T)),v||O||z||E||V){var H=function(n,t){if(e){var r=t||y(n),o=i(),u=Fn().B,a=r.bn,c=a.x,f=a.y,s={},v=function(n){return p(n.split(" "),(function(n){s[n]=o[n]}))};u||(s.height=""),c&&v("marginTop marginBottom paddingTop paddingBottom"),f&&v("marginLeft marginRight paddingLeft paddingRight");var d=Sn(l,S(s));return nn(l,"os-viewport-arrange"),Sn(l,s),{Sn:function(){Sn(l,d),Z(l,"os-viewport-arrange")},zn:r}}return{Sn:wn}}(P,o),W=H.Sn,Y=H.zn,k=on(l),N=an(l),X=en(l),U=un(l),$=k,G=D=d(r,{hn:N,dn:X,vn:U}),J=G.g,K=G._;W(),(K||E)&&Y&&!P&&x(Y,J,j)&&($=on(l),U=b(un(l),en(l),an(l))),F=_(r,{gn:{w:Math.max(J.w,U.w),h:Math.max(J.h,U.h)},pn:{w:$.w+Math.max(0,k.w-J.w),h:$.h+Math.max(0,k.h-J.h)}})}var Q=t("overflow"),tn=Q.g,rn=Q._,cn=D,fn=cn.g,ln=cn._,sn=F,vn=sn.g,dn=sn._;if(O||ln||dn||rn||E||V||q){var hn={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,maxWidth:"",overflowY:"",overflowX:""},gn=function(n,t,r,e){var i=function(n,t,r,e){var i="visible-scroll"===r,o=t>0&&("scroll"===r||"hidden"===r);return o&&(e[n?"overflowX":"overflowY"]=r),{On:!o,Mn:i?"scroll":"hidden"}},o=i(!0,t.x,r.x,e),u=o.On,a=o.Mn,c=i(!1,t.y,r.y,e),f=c.On,l=c.Mn;return u&&!f&&(e.overflowX=a),f&&!u&&(e.overflowY=l),y(n,e)}(P,vn,tn,hn);!function(n,t,r,e){var o=Fn().j,u=n._n,a=n.wn,l=n.bn,s=l.x,v=l.y,d=a.x,h=a.y,g=u.x,p=u.y,_=i(),w=t?"marginLeft":"marginRight",b=t?"paddingLeft":"paddingRight",m=_[w],y=_.marginBottom,x=_[b],S=_.paddingBottom;e.maxWidth="calc(100% + "+(h+-1*m)+"px)",e[w]=-h+m,e.marginBottom=-d+y,r&&(e[b]=x+(v?h:0),e.paddingBottom=S+(s?d:0)),o||Sn(f||c,{overflow:g||p?"hidden":""})}(gn,j,x(gn,fn,j),hn),q&&m(gn,!!T),Sn(l,hn),u(gn._n)}}},Nn={direction:["rtl"]},Xn=function(n){var t=!1;return p(Sn(n,["direction"]),(function(n,r){t=t||_(Nn[r],n)>-1})),t},Un=function(n){return n&&(n.height||n.width)},$n=function(t,r,e){var i,o=e||{},u=o.Ln,a=void 0!==u&&u,c=o.An,f=void 0!==c&&c,l=Fn().I,v=W('
')[0],d=v.firstChild,h=n(0,{s:!0,o:function(n,t){return!(!n||!Un(n)&&Un(t))}}).v,g=function(n){var t=n&&"boolean"==typeof n.g,e=!1;if(s(n)&&n.length>0){var i=h(0,n.pop().contentRect),o=i.p,u=i.g;i._;e=!o||!Un(u)}else t&&n._;if(a){var c=t?n.g:Xn(v);A(v,c?l.n?-3333333:l.i?0:3333333:3333333),C(v,3333333)}e||r(t?n:void 0)},p=[],_=!!f&&g;if($){var b=new $(g);b.observe(d),w(p,(function(){return b.disconnect()}))}else{var m=W('
');P(d,m),Z(d,"os-size-observer-listener-scroll");var x,S=m[0],z=S.lastChild,O=S.firstChild,M=null==O?void 0:O.firstChild,L=en(d),T=L,R=!1,j=function(){A(O,3333333),C(O,3333333),A(z,3333333),C(z,3333333)},V=function(){x=0,R&&(L=T,g())},I=function(n){return T=en(d),R=!n||!hn(T,L),n&&R&&!x?(G(x),x=J(V)):n||V(),j(),n&&(vn(n),sn(n)),!1};w(p,[ln(O,"scroll",I),ln(z,"scroll",I)]),Sn(M,{width:3333333,height:3333333}),j(),_=f?function(){return I()}:j}if(a){var B=(i=n((function(){return Xn(v)}))).v;w(p,ln(v,"scroll",(function(n){var t=B(),r=t.g;return t._&&(Sn(d,r?{left:"auto",right:0}:{left:0,right:"auto"}),g(t)),vn(n),sn(n),!1})))}return _&&(Z(v,"os-size-observer-appear"),w(p,ln(v,"animationstart",_,{M:!!$}))),q(t,v),{nn:function(){y(p),D(v)},Cn:function(n){return{on:i?i.m(n):{g:!1,p:!1,_:!1}}}}},Gn=function(n,t,r,e){var i,u=function(){r.forEach((function(n,t){fn(t,n,e)})),r.clear()},a=function(t){i&&p(i.reduce((function(r,e){if(e){var i=e[0],o=e[1],u=o&&i&&(t?t(i):j(i,n));u&&w(r,[u,l(o)?o(u):o],!0)}return r}),[]),(function(n){var t=n[0],i=n[1];p(t,(function(n){!function(n,t){var i=r.get(n),u=o(i),a=function(){r.set(n,t),ln(n,t,e)};u||t===i?u&&a():(fn(n,i,e),a())}(n,i)}))}))},c=function(n){i=n,u(),a()};return t&&c(t),{nn:u,Tn:a,v:c}},Jn=function(n,t,r){var e,i,o,u,a,l,s,v,d,h,g=!1,b=r||{},y=b.Rn,x=b.jn,S=b.Vn,z=b.In,O=b.Bn,M=b.En,A=b.Pn,C=Gn(n,y&&z,new Map,(e=function(){g&&t([],!1,!0)},l=c(i=84)&&i>0,s=c(o)&&o>0,v=l?window.clearTimeout:G,d=l?window.setTimeout:J,h=function(n){a=s?performance.now():0,u&&v(u),e.apply(this,n)},function(){var n=h.bind(this,arguments),t=!!s&&performance.now()-a>=o;u&&v(u),u=t?n():d(n,i)})),T=C.Tn,R=C.nn,I=C.v,B=S||[],E=(x||[]).concat(B),P=function(e){var i=M||wn,o=A||wn,u=[],a=[],c=!1,l=!1,s=!1;p(e,(function(t){var e=t.attributeName,v=t.target,d=t.type,h=t.oldValue,g=t.addedNodes,p="attributes"===d,b="childList"===d,m=n===v,x=p&&f(e)?L(v,e):0,S=0!==x&&h!==x,z=S&&m&&!y&&!i(v,e,h,x),M=_(B,e)>-1&&S;if(z&&w(u,e),y){var A=!p,C=p&&M&&!m,T=C&&O&&V(v,O),R=(T?!i(v,e,h,x):A||C)&&!o(t,!!T,n,r);w(a,g),l=l||R,s=s||b}c=c||z&&M})),s&&!m(a)&&T((function(n){return a.reduce((function(t,r){return w(t,j(n,r)),V(r,n)?w(t,r):t}),[])})),(!m(u)||c||l)&&t(u,c,l)},q=new X(P);return q.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:E,subtree:y,childList:y,characterData:y}),g=!0,{qn:function(){g&&(R(),q.disconnect(),g=!1)},Fn:function(n){I(g&&y&&n)},v:function(){g&&P(q.takeRecords())}}},Kn=function(n,t){return n&&t.split(".").reduce((function(n,t){return n&&x(n,t)?n[t]:void 0}),n)},Qn=["id","class","style","open"],Zn={un:!1,H:{t:0,r:0,b:0,l:0}},nt={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},tt={x:!1,y:!1},rt={g:!1,p:!1,_:!1},et={g:!1,p:!1,_:!1},it=function(t,r){var e=Zn,i=nt,o=tt,u=r.K,a=u.F,f=u.W,l=u.Y,s=Fn(),v=s.j,d=s.R,h=s.B,g=s.P,_=s.q,b=!v&&(d.x||d.y),m=[],x={Dn:t,en:r,cn:b,ln:function(){return e},tn:function(n){e=n||Zn},fn:function(){return i},rn:function(n){var t,r;i=n?(r=nt,S(t=n).reduce((function(n,r){var e=t[r];return n[r]=""===e?0:e,n}),Mn({},r))):nt},Hn:function(){return o},sn:function(n){o=n||tt}};w(m,function(n){var t=n.en.K.Y;return function(n){var r=n.mn,e=r.g;r._&&Sn(t,{height:e?"auto":"100%"})}}(x)),w(m,Yn(x)),w(m,kn(x));var z=function(n,r,e){var i=n||{},o=i.on,u=i.mn,a=i.in,l=void 0===a?e||!1:a,s=i.yn,v=void 0===s?e||!1:s,d=i.xn,g=void 0===d?e||!1:d,_=i.an,w=void 0===_?e||!1:_,y=o||(M?M.Cn(e).on:rt),x=u||(O?O.Cn(e).mn:et),S=function(n){return{g:Kn(t,n),_:e||void 0!==Kn(r,n)}},z=b||!h,L=z&&A(f),T=z&&C(f);p(m,(function(n){var t=n({on:y,mn:x,in:l,yn:v,xn:g,an:w},S,!!e)||{},r=t.in,i=t.yn,o=t.xn,u=t.an;l=r||l,v=i||v,g=o||g,w=u||w})),c(L)&&A(f,L),c(T)&&C(f,T)},O=l&&function(t,r){var e=W('
')[0],i=[],o=n((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{u:!1}),u=o.v,a=o.m;if(U){var c=new U((function(n){if(n&&n.length>0){var t=n.pop();if(t){var e=u(0,t);e._&&r(e)}}}),{root:t});c.observe(e),w(i,(function(){return c.disconnect()}))}else{var f=function(){var n=en(e),t=u(0,n);t._&&r(t)};w(i,$n(e,f).nn),f()}return q(t,e),{nn:function(){y(i),D(e)},Cn:function(n){return{mn:a(n)}}}}(a,(function(n){z({mn:n})})),M=$n(a,(function(n){z({on:n,in:!n})}),{An:!0,Ln:!v}),L=(Jn(a,(function(){requestAnimationFrame((function(){z({yn:!0})}))}),{Vn:Qn,jn:Qn}),Jn(l||f,(function(){requestAnimationFrame((function(){z({xn:!0})}))}),{Rn:!0,Vn:Qn,jn:Qn,In:t.updating.elementEvents}),function(n,t){z(null,n,t)}),T=L.bind(null,null,!0);return g(T),console.log(Fn()),{v:L,nn:function(){_(T)}}},ot=Cn.number,ut=[Cn.string,Cn.array,Cn.null],at=[!0,Cn.boolean],ct=[!1,Cn.boolean],ft=function n(t){var r={Wn:{},Dn:{}};return p(S(t),(function(e){var i=t[e];if(s(i))r.Wn[e]=i[1],r.Dn[e]=i[0];else{var o=n(i);r.Wn[e]=o.Wn,r.Dn[e]=o.Dn}})),r}({resize:["none","none both horizontal vertical"],paddingAbsolute:ct,updating:{elementEvents:[[["img","load"]],[Cn.array,Cn.null]],contentMutationDebounce:[80,ot],hostMutationDebounce:[0,ot],resizeDebounce:[0,ot]},overflow:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]},scrollbars:{visibility:["auto","visible hidden auto"],autoHide:["never","never scroll leavemove"],autoHideDelay:[800,ot],dragScroll:at,clickScroll:ct,touch:at},textarea:{dynWidth:ct,dynHeight:ct,inheritedAttrs:[["style","class"],ut]},nativeScrollbarsOverlaid:{show:ct,initialize:ct}}),lt=ft.Wn,st=ft.Dn;return function(){return[Fn(),(n=document.body,r=z({},st,Tn(t||{},lt,null,!0).L),e=Wn(n),i=it(r,e),o={options:function(n){if(n){var t=Tn(n,lt,r,!0).L;O(t)||(z(r,t),i.v(t))}return r},update:function(n){i.v(null,n)}},o.update(!0),o)];var n,t,r,e,i,o}})); \ No newline at end of file