From bf3d553260babd4049dbab35c9eb5cd6fe822696 Mon Sep 17 00:00:00 2001 From: Rene Haas Date: Wed, 20 Jul 2022 15:03:19 +0200 Subject: [PATCH] scrollbar handle offset update --- .../dist/overlayscrollbars.css | 8 +- .../dist/overlayscrollbars.esm.js | 9 +- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 11 +- .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- .../setups/scrollbarsSetup/scrollbarsSetup.ts | 144 +++++++----------- .../src/styles/scrollbars.scss | 1 + 9 files changed, 74 insertions(+), 107 deletions(-) diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.css b/packages/overlayscrollbars/dist/overlayscrollbars.css index 4e45276..967dd50 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.css +++ b/packages/overlayscrollbars/dist/overlayscrollbars.css @@ -85,15 +85,15 @@ @-webkit-keyframes os-size-observer-appear-animation { from { - z-index: 0; } + cursor: auto; } to { - z-index: -1; } } + cursor: none; } } @keyframes os-size-observer-appear-animation { from { - z-index: 0; } + cursor: auto; } to { - z-index: -1; } } + cursor: none; } } .os-trinsic-observer { flex: none; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index 42864b6..7b16235 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -1832,15 +1832,16 @@ const createEventContentChange = (t, n, o) => { n(); } } - const i = on(o, c, (t => { + const listener = t => { if (e) { - i(); + off(o, c, listener); s.delete(o); } else { n(t); } - })); - s.set(o, [ c, i ]); + }; + on(o, c, listener); + s.set(o, [ c, () => off(o, c, listener) ]); })))); } }; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 1367d14..0f7e009 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/utils/array.ts","../src/support/dom/style.ts","../src/support/cache.ts","../src/support/utils/types.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/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidationPlugin/validation.ts","../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | false | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | false | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | false | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | false | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n 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: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\n\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: CreateCache = (\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache => {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\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 const isArrayLike = (obj: any): obj is ArrayLike => {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const 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 const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\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};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: 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 const 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 { from } from 'support/utils/array';\r\nimport { isNull, isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): T;\r\n (elm: HTMLElement | false | null | undefined, value: T | false | null): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T | false | null): T | void;\r\n};\r\n\r\nconst getSetProp = (\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string | false | null\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && !isNull(value) && value !== false && (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 const attr = ((\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}) as Attr;\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n if (value) {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n }\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(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 | false | null | undefined, 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 const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\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 const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\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 const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Node | Element | Node | false | null | undefined;\r\ntype OutputElementType = Node | Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween, closest };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | 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 = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): 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 = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor =\r\n jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\nexport const setT = window.setTimeout as (handler: TimerHandler, timeout?: number) => number;\r\nexport const clearT = window.clearTimeout as (id?: number) => void;\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\ntype ClassContainingElement = Node | Element | false | null | undefined;\r\ntype ClassName = string | false | null | undefined;\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: ClassContainingElement,\r\n className: ClassName,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n const classList = elm && (elm as Element).classList;\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (classList && className && 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(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: ClassContainingElement, className: ClassName): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\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: ClassContainingElement, className: ClassName): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\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 * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (elm: ClassContainingElement, className: ClassName): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\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: ClassName, classNameB: ClassName) => {\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","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF, setT, clearT } from 'support/compatibility/apis';\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear: () => void = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (clear !== noop) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | 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 | false | 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 fractional- 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 fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\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 | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEachAndClear } 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() {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) ?? doSupportPassiveEvents;\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 = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) 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 runEachAndClear.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { 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","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from, isEmptyArray } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name]\r\n ) => void;\r\n type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: RemoveEvent = (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void => {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n\r\n const addEvent: AddEvent = (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): (() => void) => {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n };\r\n\r\n const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n args?: EventMap[Name]\r\n ): void => {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [AddEvent, RemoveEvent, TriggerEvent];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { DeepPartial } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: DeepPartial,\r\n force: boolean,\r\n ...args: T\r\n) => void;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup<\r\n DynamicState,\r\n StaticState extends Record = Record,\r\n A extends any[] = []\r\n> = [update: SetupUpdate, state: (() => DynamicState) & StaticState, destroy: () => void];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: DeepPartial,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\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 dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostScrollbarHidden = 'scrollbarHidden';\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 classNameViewportScrollbarHidden = `${classNameViewport}-scrollbar-hidden`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\nexport const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { DeepPartial, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type ScrollbarVisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type ScrollbarAutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n showNativeOverlaidScrollbars: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n theme: string | null;\r\n visibility: ScrollbarVisibilityBehavior;\r\n autoHide: ScrollbarAutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n showNativeOverlaidScrollbars: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n theme: 'os-theme-dark',\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n};\r\n","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, DeepPartial } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n DeepPartial, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\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 template The template according to which the options object shall be validated.\r\n * @param options The options object which 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 template: OptionsTemplate,\r\n options: DeepPartial,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: DeepPartial = {};\r\n const optionsCopy: DeepPartial = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = 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 validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\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 * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: DeepPartial,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n Options,\r\n OverflowBehavior,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { DeepPartial } from 'typings';\r\nimport type { Plugin } from 'plugins';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n showNativeOverlaidScrollbars: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n theme: [oTypes.string, oTypes.null], // string || null\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => DeepPartial;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type SizeObserverPluginInstance = {\r\n _: (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean\r\n ) => [appearCallback: () => any, offFns: (() => any)[]];\r\n};\r\n\r\nconst scrollAmount = 3333333;\r\nconst scrollEventName = 'scroll';\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const sizeObserverPlugin: Plugin = {\r\n [sizeObserverPluginName]: {\r\n _: (listenerElement, onSizeChangedCallback, observeAppearChange) => {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallback(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopPropagation(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]\r\n );\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import {\r\n keys,\r\n attr,\r\n WH,\r\n style,\r\n addClass,\r\n removeClass,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n UpdateCache,\r\n XY,\r\n} from 'support';\r\nimport { classNameViewportArrange } from 'classnames';\r\nimport type { StyleObject } from 'typings';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type {\r\n ViewportOverflowState,\r\n GetViewportOverflowState,\r\n HideNativeScrollbars,\r\n} from 'setups/structureSetup/updateSegments/overflowUpdateSegment';\r\nimport type { InternalEnvironment } from 'environment';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type ArrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n) => boolean;\r\n\r\nexport type UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nexport type UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n) => UndoViewportArrangeResult;\r\n\r\nexport type ScrollbarsHidingPluginInstance = {\r\n _createUniqueViewportArrangeElement(env: InternalEnvironment): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: boolean,\r\n flexboxGlue: boolean,\r\n viewport: HTMLElement,\r\n viewportArrange: HTMLStyleElement | false | null | undefined,\r\n getState: () => StructureSetupState,\r\n getViewportOverflowState: GetViewportOverflowState,\r\n hideNativeScrollbars: HideNativeScrollbars\r\n ): [ArrangeViewport, UndoArrangeViewport];\r\n _envWindowZoom(): (\r\n envInstance: InternalEnvironment,\r\n updateNativeScrollbarSizeCache: UpdateCache>,\r\n triggerEvent: () => void\r\n ) => void;\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst { round, abs } = Math;\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\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n flexboxGlue,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport: ArrangeViewport = (\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n directionIsRTL\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\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 viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (viewportArrange) {\r\n const { sheet } = viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange: UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n viewportOverflowState?\r\n ) => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(viewport, classNameViewportArrange);\r\n\r\n if (!flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(viewport, prevStyle);\r\n addClass(viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return [arrangeViewport, undoViewportArrange];\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n\r\n return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {\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) {\r\n return;\r\n }\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 && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent();\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { DeepPartial } from 'typings';\r\nimport { DefaultInitialization } from 'initialization';\r\nimport { getPlugins, ScrollbarsHidingPluginInstance, scrollbarsHidingPluginName } from 'plugins';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _staticDefaultInitialization: DefaultInitialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): DefaultInitialization;\r\n _setDefaultInitialization(newInitialization: DeepPartial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: DeepPartial): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n clear && removeElements(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarHidden);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = 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 const revertFbxGlueMax = 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 revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache(\r\n {\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n getNativeScrollbarSize.bind(0, body, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const defaultInitialization = {\r\n padding: !nativeScrollbarsHiding,\r\n content: false,\r\n cancel: {\r\n nativeScrollbarsOverlaid: true,\r\n body: null,\r\n },\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getDefaultInitialization: assignDeep.bind(\r\n 0,\r\n {} as DefaultInitialization,\r\n defaultInitialization\r\n ),\r\n _setDefaultInitialization(newInitializationStrategy) {\r\n assignDeep(defaultInitialization, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _staticDefaultInitialization: assignDeep({}, defaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let resizeFn: undefined | ReturnType;\r\n window.addEventListener('resize', () => {\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n\r\n resizeFn = resizeFn || (scrollbarsHidingPlugin && scrollbarsHidingPlugin._envWindowZoom());\r\n resizeFn && resizeFn(env, updateNativeScrollbarSizeCache, triggerEvent.bind(0, '_'));\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isBoolean, isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n DefaultStructureInitialization,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n DefaultScrollbarsInitialization,\r\n} from 'setups/scrollbarsSetup';\r\nimport { getEnvironment } from 'environment';\r\nimport { DeepPartial } from 'typings';\r\nimport { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type CancelInitialization = {\r\n cancel: {\r\n nativeScrollbarsOverlaid: boolean | undefined;\r\n body: boolean | null | undefined;\r\n };\r\n};\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization &\r\n ScrollbarsInitialization &\r\n DeepPartial;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type DefaultInitialization = DefaultStructureInitialization &\r\n DefaultScrollbarsInitialization &\r\n CancelInitialization;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type DefaultInitializtationElement = Exclude;\r\n\r\nexport type FallbackInitializtationElement<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackStaticInitializationElement: FallbackInitializtationElement,\r\n defaultStaticInitializationElementStrategy?: DefaultInitializtationElement,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(defaultStaticInitializationElementStrategy, args),\r\n args\r\n ) || fallbackStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackDynamicInitializationElement: FallbackInitializtationElement,\r\n defaultDynamicInitializationElementStrategy?: DefaultInitializtationElement,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n defaultDynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? fallbackDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nconst cancelInitialization = (\r\n cancelInitializationValue: DeepPartial | false | null | undefined,\r\n structureSetupElements: StructureSetupElementsObj\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _isBody, _viewportIsTarget } = structureSetupElements;\r\n const { _getDefaultInitialization, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isBoolean(body) || isNull(body) ? body : defaultbody;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n _isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_viewportIsTarget\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement, cancelInitialization };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEachAndClear,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n hasOwnProperty,\r\n noop,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n InitializationTargetObject,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false | null | undefined;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const env = getEnvironment();\r\n const { _getDefaultInitialization, _nativeScrollbarsHiding } = env;\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\r\n const {\r\n host: defaultHostInitializationStrategy,\r\n viewport: defaultViewportInitializationStrategy,\r\n padding: defaultPaddingInitializationStrategy,\r\n content: defaultContentInitializationStrategy,\r\n } = _getDefaultInitialization();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const {\r\n host: hostInitializationStrategy,\r\n padding: paddingInitializationStrategy,\r\n viewport: viewportInitializationStrategy,\r\n content: contentInitializationStrategy,\r\n } = targetStructureInitialization;\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const isBody = targetElement === ownerDocument.body;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = isBody\r\n ? _nativeScrollbarsHiding\r\n : !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarsHiding;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n defaultViewportInitializationStrategy,\r\n isBody && !hasOwnProperty(targetStructureInitialization, 'viewport')\r\n ? targetElement\r\n : viewportInitializationStrategy\r\n ),\r\n staticInitializationElement(createNewDiv, defaultViewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n singleElmSupport ? true : potentialViewport !== targetElement\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n defaultHostInitializationStrategy,\r\n hostInitializationStrategy\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultPaddingInitializationStrategy,\r\n paddingInitializationStrategy\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultContentInitializationStrategy,\r\n contentInitializationStrategy\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n const removeHtmlClass = isBody\r\n ? addClass(parent(targetElement), classNameViewportScrollbarHidden)\r\n : noop;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHtmlClass();\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarHidden));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEachAndClear.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\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 attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportScrollbarHidden,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostScrollbarHidden,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst max0 = max.bind(0, 0);\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.h),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\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 structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowEdge, getCurrentOverflowEdgeCache] = createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState: GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars,\r\n viewportStyleObj?\r\n ) => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarsHiding && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarsHiding ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarsOverlaid.x, _nativeScrollbarsSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarsOverlaid.y, _nativeScrollbarsSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\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 hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\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: HideNativeScrollbars = (\r\n viewportOverflowState,\r\n directionIsRTL,\r\n viewportArrange,\r\n viewportStyleObj\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n const [arrangeViewport, undoViewportArrange] = scrollbarsHidingPlugin\r\n ? scrollbarsHidingPlugin._overflowUpdateSegment(\r\n doViewportArrange,\r\n _flexboxGlue,\r\n _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('showNativeOverlaidScrollbars');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n let overflowEdgeCache = getCurrentOverflowEdgeCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarHidden,\r\n dataValueHostScrollbarHidden,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n const overflowAmountScrollSize = {\r\n w: max0(max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n arrangedViewportClientSize.h +\r\n max0(viewportclientSize.h - viewportScrollSize.h) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowEdgeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowEdgeChanged: overflowEdgeChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createOverflowUpdateSegment,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowEdgeChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdateSegment(structureSetupElements, state),\r\n createPaddingUpdateSegment(structureSetupElements, state),\r\n createOverflowUpdateSegment(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowEdgeChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\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 let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'scroll', (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopPropagation(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'animationstart', 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 runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\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 type TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n destroy: () => void,\r\n update: () => void | Parameters\r\n];\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH,\r\n fromRecords?: true\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n !fromRecords && onTrinsicChangedCallback(heightIntrinsic);\r\n return [heightIntrinsic];\r\n }\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n entries: IntersectionObserverEntry[],\r\n fromRecords?: true\r\n ) => {\r\n if (entries && entries.length > 0) {\r\n return triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n (entries) => intersectionObserverCallback(entries),\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance!.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n () => {\r\n if (intersectionObserverInstance) {\r\n return intersectionObserverCallback(intersectionObserverInstance.takeRecords(), true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [\r\n destroy: () => void,\r\n update: () => void | false | Parameters>\r\n];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const debouncedEventContentChange = debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n );\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (\r\n mutations: MutationRecord[],\r\n fromRecords?: true\r\n ): void | Parameters> => {\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 =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] as Parameters>;\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n !fromRecords &&\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n return [targetChangedAttrs, targetStyleChanged] as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!((mutations) =>\r\n observerCallback(mutations)\r\n );\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n debouncedEventContentChange._flush();\r\n\r\n const records = mutationObserver.takeRecords();\r\n return !isEmptyArray(records) && observerCallback(records, true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n closest,\r\n assignDeep,\r\n push,\r\n scrollLeft,\r\n scrollTop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n classNameScrollbar,\r\n classNameViewportArrange,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n destroy: () => void,\r\n updateObservers: () => Partial,\r\n updateObserversOptions: StructureSetupObserversUpdate\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const hasOver = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n const hasVpStyle = _viewportHasClass(classNameViewportArrange, '');\r\n const scrollOffsetX = hasVpStyle && scrollLeft(_viewport);\r\n const scrollOffsetY = hasVpStyle && scrollTop(_viewport);\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n _viewportAddRemoveClass(classNameViewportArrange, '');\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, hasOver);\r\n _viewportAddRemoveClass(classNameViewportArrange, '', hasVpStyle);\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues, fromRecords?: true) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: Partial = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && structureSetupUpdate(updateHints);\r\n return updateHints;\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean, fromRecords?: true) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n const updateHints: Partial = {\r\n _contentMutation: contentSizeChanged,\r\n };\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n !fromRecords && updateFn(updateHints);\r\n }\r\n return updateHints;\r\n };\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ) => {\r\n const updateHints: Partial = { _hostMutation: targetStyleChanged };\r\n if (targetStyleChanged) {\r\n !fromRecords && structureSetupUpdateWithDebouncedAdaptiveUpdateHints(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n return updateHints;\r\n };\r\n\r\n const trinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n }\r\n );\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n trinsicObserver && trinsicObserver[0](); // destroy\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[1](); // update\r\n const trinsicUpdateResult = trinsicObserver && trinsicObserver[1](); // update\r\n\r\n if (hostUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onHostMutation.apply(\r\n 0,\r\n push(hostUpdateResult, true) as [\r\n ...updateResult: typeof hostUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (contentUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onContentMutation.apply(\r\n 0,\r\n push(contentUpdateResult, true) as [\r\n ...updateResult: typeof contentUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (trinsicUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onTrinsicChanged.apply(\r\n 0,\r\n push(trinsicUpdateResult as any[], true) as [\r\n ...updateResult: typeof trinsicUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n\r\n return updateHints;\r\n },\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub, isEmptyObject, keys } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { DeepPartial, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowEdge: XY;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [updateHints: StructureSetupUpdateHints, changedOptions: DeepPartial, force: boolean];\r\n};\r\n\r\nconst initialXYNumber = { x: 0, y: 0 };\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowEdge: initialXYNumber,\r\n _overflowAmount: initialXYNumber,\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const triggerUpdateEvent: (...args: StructureSetupEventMap['u']) => void = (\r\n updateHints,\r\n changedOptions,\r\n force\r\n ) => {\r\n const truthyUpdateHints = keys(updateHints).some((key) => updateHints[key]);\r\n\r\n if (truthyUpdateHints || !isEmptyObject(changedOptions) || force) {\r\n triggerEvent('u', [updateHints, changedOptions, force]);\r\n }\r\n };\r\n const [destroyObservers, updateObservers, updateObserversOptions] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerUpdateEvent(updateStructure(checkOptionsFallback, updateHints), {}, false);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObserversOptions(checkOption);\r\n triggerUpdateEvent(\r\n updateStructure(checkOption, updateObservers(), force),\r\n changedOptions,\r\n !!force\r\n );\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n each,\r\n isEmptyArray,\r\n noop,\r\n on,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\r\n stopPropagation,\r\n style,\r\n} from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n classNamesScrollbarInteraction,\r\n classNamesScrollbarTransitionless,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n DefaultScrollbarsInitialization,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElement {\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _addRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => void;\r\n _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n // _removeClass: (classNames: string) => void;\r\n /*\r\n _addEventListener: () => void;\r\n _removeEventListener: () => void;\r\n */\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst interactionStartEventNames = 'touchstart mouseenter';\r\nconst interactionEndEventNames = 'touchend touchcancel mouseleave';\r\nconst stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>\r\n on(\r\n scrollbar,\r\n 'mousedown',\r\n on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),\r\n { _capture: true }\r\n );\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization } = getEnvironment();\r\n const { scrollbarsSlot: defaultScrollbarSlot } =\r\n _getDefaultInitialization() as DefaultScrollbarsInitialization;\r\n const { _documentElm, _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const scrollbarSlot = _targetIsElm ? null : (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n defaultScrollbarSlot,\r\n scrollbarSlot\r\n );\r\n const scrollbarsAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action((elm || noop)(scrollbarStructure) || scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const scrollbarsHandleStyle = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => {\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n const [elm, styles] = elmStyle(scrollbarStructure);\r\n style(elm, styles);\r\n });\r\n };\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const addRemoveClassHorizontal = scrollbarsAddRemoveClass.bind(0, horizontalScrollbars);\r\n const addRemoveClassVertical = scrollbarsAddRemoveClass.bind(0, verticalScrollbars);\r\n const generateScrollbarDOM = (horizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = horizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;\r\n const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';\r\n const scrollbar = createDiv(\r\n `${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass}`\r\n );\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n push(arrToPush, result);\r\n push(destroyFns, [\r\n removeElements.bind(0, scrollbar),\r\n on(scrollbar, interactionStartEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction, true);\r\n addRemoveClassVertical(classNamesScrollbarInteraction, true);\r\n }),\r\n on(scrollbar, interactionEndEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction);\r\n addRemoveClassVertical(classNamesScrollbarInteraction);\r\n }),\r\n stopRootClickPropagation(scrollbar, _documentElm),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = generateScrollbarDOM.bind(0, true);\r\n const generateVerticalScrollbarStructure = generateScrollbarDOM.bind(0, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n setT(() => {\r\n addRemoveClassHorizontal(classNamesScrollbarTransitionless);\r\n addRemoveClassVertical(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassHorizontal,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassVertical,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, verticalScrollbars),\r\n },\r\n },\r\n appendElements,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElement,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOSOptions,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { OverflowStyle, StyleObject } from 'typings';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nconst { min } = Math;\r\nconst createSelfCancelTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nconst refreshScrollbarHandleLength = (\r\n setStyleFn: ScrollbarsSetupElement['_handleStyle'],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n const handleRatio = min(1, viewportSize / (viewportSize + overflowAmount));\r\n\r\n setStyleFn((structure) => [\r\n structure._handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(handleRatio * 100).toFixed(3)}%`,\r\n },\r\n ]);\r\n};\r\n\r\nconst refreshScrollbarHandlePosition = (\r\n setStyleFn: (styles: StyleObject) => void,\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n /*\r\n //measure the handle length to respect min & max length\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\r\n var handleTrackDiff = trackLength - handleLength;\r\n var handleCSS = {};\r\n var transformOffset;\r\n var translateValue;\r\n\r\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\r\n // because its a bit behind during the small delay when content size updates\r\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\r\n var maxScroll =\r\n (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] -\r\n _viewportElementNative['client' + scrollbarVars._Width_Height]) *\r\n (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\r\n var getScrollRatio = function (base) {\r\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\r\n };\r\n var getHandleOffset = function (scrollRatio) {\r\n var offset = handleTrackDiff * scrollRatio;\r\n offset = isNaN(offset) ? 0 : offset;\r\n offset =\r\n isRTLisHorizontal && !_rtlScrollBehavior.i ? trackLength - handleLength - offset : offset;\r\n offset = MATH.max(0, offset);\r\n return offset;\r\n };\r\n var scrollRatio = getScrollRatio(nativeScroll);\r\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\r\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\r\n var snappedHandleOffset = getHandleOffset(scrollRatio);\r\n\r\n scrollbarVarsInfo._maxScroll = maxScroll;\r\n scrollbarVarsInfo._currentScroll = nativeScroll;\r\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\r\n\r\n if (_supportTransform) {\r\n transformOffset = isRTLisHorizontal\r\n ? -(trackLength - handleLength - handleOffset)\r\n : handleOffset; //in px\r\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\r\n translateValue = isHorizontal\r\n ? strTranslateBrace + transformOffset + 'px, 0)'\r\n : strTranslateBrace + '0, ' + transformOffset + 'px)';\r\n\r\n handleCSS[strTransform] = translateValue;\r\n\r\n //apply or clear up transition\r\n if (_supportTransition)\r\n handleCSS[strTransition] =\r\n transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1\r\n ? getCSSTransitionString(scrollbarVars._handle) +\r\n ', ' +\r\n (strTransform + _strSpace + transitionDuration + 'ms')\r\n : _strEmpty;\r\n } else handleCSS[scrollbarVars._left_top] = handleOffset;\r\n\r\n //only apply css if offset has changed and overflow exists.\r\n if (!nativeOverlayScrollbarsAreActive()) {\r\n scrollbarVars._handle.css(handleCSS);\r\n\r\n //clear up transition\r\n if (_supportTransform && _supportTransition && transition) {\r\n scrollbarVars._handle.one(_strTransitionEndEvent, function () {\r\n if (!_destroyed) scrollbarVars._handle.css(strTransition, _strEmpty);\r\n });\r\n }\r\n }\r\n\r\n scrollbarVarsInfo._handleOffset = handleOffset;\r\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\r\n scrollbarVarsInfo._trackLength = trackLength;\r\n */\r\n};\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup => {\r\n let autoHideIsMove: boolean;\r\n let autoHideIsLeave: boolean;\r\n let autoHideNotNever: boolean;\r\n let mouseInHost: boolean | undefined;\r\n let prevTheme: string | null | undefined;\r\n let globalAutoHideDelay = 0;\r\n\r\n const state = createState({});\r\n const [getState] = state;\r\n const [requestMouseMoveAnimationFrame, cancelMouseMoveAnimationFrame] = createSelfCancelTimeout();\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = createSelfCancelTimeout();\r\n const [scrollTimeout, clearScrollTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideMoveTimeout, clearAutoHideTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideTimeout, clearAutoTimeout] = createSelfCancelTimeout(() => globalAutoHideDelay);\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupState._elements\r\n );\r\n const { _host, _viewport } = structureSetupState._elements;\r\n const { _horizontal, _vertical } = elements;\r\n const { _addRemoveClass: addRemoveClassHorizontal, _handleStyle: styleHorizontal } = _horizontal;\r\n const { _addRemoveClass: addRemoveClassVertical, _handleStyle: styleVertical } = _vertical;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden, true);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden, true);\r\n };\r\n if (globalAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const onHostMouseEnter = () => {\r\n mouseInHost = autoHideIsLeave;\r\n mouseInHost && manageScrollbarsAutoHide(true);\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearScrollTimeout,\r\n clearAutoTimeout,\r\n clearAutoHideTimeout,\r\n cancelScrollAnimationFrame,\r\n cancelMouseMoveAnimationFrame,\r\n destroyElements,\r\n\r\n on(_host, 'mouseover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'mouseenter', onHostMouseEnter),\r\n on(_host, 'mouseleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'mousemove', () => {\r\n autoHideIsMove &&\r\n requestMouseMoveAnimationFrame(() => {\r\n clearScrollTimeout();\r\n manageScrollbarsAutoHide(true);\r\n auotHideMoveTimeout(() => {\r\n autoHideIsMove && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n on(_viewport, 'scroll', () => {\r\n autoHideNotNever &&\r\n requestScrollAnimationFrame(() => {\r\n manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n ];\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force, structureUpdateHints) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n\r\n const [theme, themeChanged] = checkOption('scrollbars.theme');\r\n const [visibility, visibilityChanged] =\r\n checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] =\r\n checkOption('scrollbars.autoHide');\r\n const [autoHideDelay] = checkOption('scrollbars.autoHideDelay');\r\n const [dragScrolling, dragScrollingChanged] = checkOption(\r\n 'scrollbars.dragScrolling'\r\n );\r\n const [touchSupport, touchSupportChanged] = checkOption('scrollbars.touchSupport');\r\n\r\n const updateHandle = _overflowEdgeChanged || _overflowAmountChanged;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged;\r\n\r\n const setScrollbarVisibility = (\r\n overflowStyle: OverflowStyle,\r\n addRemoveClass: (classNames: string, add?: boolean) => void\r\n ) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n addRemoveClass(classNamesScrollbarVisible, isVisible);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (updateVisibility) {\r\n const { _overflowStyle } = currStructureSetupState;\r\n\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, addRemoveClassHorizontal);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, addRemoveClassVertical);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n addRemoveClassHorizontal(classNamesScrollbarCornerless, !hasCorner);\r\n addRemoveClassVertical(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (themeChanged) {\r\n addRemoveClassHorizontal(prevTheme);\r\n addRemoveClassVertical(prevTheme);\r\n\r\n addRemoveClassHorizontal(theme, true);\r\n addRemoveClassVertical(theme, true);\r\n prevTheme = theme;\r\n }\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideNotNever = autoHide !== 'never';\r\n manageScrollbarsAutoHide(!autoHideNotNever, true);\r\n }\r\n if (updateHandle) {\r\n refreshScrollbarHandleLength(styleHorizontal, currStructureSetupState, true);\r\n refreshScrollbarHandleLength(styleVertical, currStructureSetupState);\r\n }\r\n },\r\n scrollbarsSetupState,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n Plugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { DeepPartial, OverflowStyle } from 'typings';\r\nimport {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n DefaultInitialization,\r\n cancelInitialization,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: DeepPartial,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n staticDefaultInitialization: DefaultInitialization;\r\n staticDefaultOptions: Options;\r\n\r\n getDefaultInitialization(): DefaultInitialization;\r\n setDefaultInitialization(newDefaultInitialization: DeepPartial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: DeepPartial): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowEdge: XY;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowEdgeChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: DeepPartial;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, canceled: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: DeepPartial): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const { _getDefaultOptions, _addListener: addEnvListener } = getEnvironment();\r\n const plugins = getPlugins();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: DeepPartial) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState\r\n );\r\n const update = (changedOptions: DeepPartial, force?: boolean) => {\r\n updateStructure(changedOptions, !!force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (canceled?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!canceled]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: DeepPartial) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force: boolean) => {\r\n updateScrollbars(changedOptions, force, updateHints);\r\n });\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n if (cancelInitialization(!targetIsElement && target.cancel, structureState._elements)) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowEdgeChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowEdgeChanged: _overflowEdgeChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","o","_initialValue","u","_equal","_","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","setT","setTimeout","clearT","clearTimeout","rnothtmlwhite","classListAction","className","action","classList","clazz","classes","match","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","maxTimeoutId","prevArguments","latestArguments","clear","g","_timeout","v","_maxDelay","p","_mergeParams","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","clearTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","timeoutId","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","_ref","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostScrollbarHidden","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarHidden","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarAutoHidden","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","showNativeOverlaidScrollbars","updating","elementEvents","attributes","ignoreMutation","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","optionsTemplateTypes","boolean","number","string","object","function","null","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsValidationPluginName","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","contentArrangeCounter","abs","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","env","A","_nativeScrollbarsHiding","T","_nativeScrollbarsOverlaid","D","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","H","_viewportPaddingStyle","L","_scrollbarsHideOffset","M","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","finalViewportOverflowState","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_envWindowZoom","size","dpr","envInstance","updateNativeScrollbarSizeCache","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","_nativeScrollbarsSize","environmentInstance","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","createEnvironment","envDOM","envElm","envChildElm","getNativeScrollbarSizeCache","nativeScrollbarsSize","nativeScrollbarsHiding","nativeScrollbarsOverlaid","defaultInitialization","padding","content","cancel","defaultDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElementStrategy","dynamicInitializationElementValue","cancelInitialization","cancelInitializationValue","structureSetupElements","W","_isBody","X","_viewportIsTarget","Y","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","host","defaultHostInitializationStrategy","defaultViewportInitializationStrategy","defaultPaddingInitializationStrategy","defaultContentInitializationStrategy","targetIsElm","targetStructureInitialization","hostInitializationStrategy","paddingInitializationStrategy","viewportInitializationStrategy","contentInitializationStrategy","targetElement","isTextarea","ownerDocument","isBody","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","filter","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_windowElm","_documentElm","_isTextarea","_targetIsElm","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","J","K","tt","Z","nt","ot","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","removeHtmlClass","createTrinsicUpdateSegment","updateHints","B","ut","_heightIntrinsic","dt","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_nativeScrollbarStyling","ht","_directionIsRTL","ft","_t","gt","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","max0","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdateSegment","lt","V","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowEdge","getCurrentOverflowEdgeCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","vt","bt","_overflowScroll","hostClientSize","isContentBox","subtractXScrollbar","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","nativeScrollbarSize","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","visibleBehaviorX","visibleBehaviorY","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","St","_hostMutation","wt","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmountScrollSize","overflowAmountClientSize","overflowEdge","overflowEdgeChanged","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowEdge","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowEdgeChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_direction","observeDirectionChange","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Et","_attributes","Pt","_styleChangingAttributes","Ht","_eventContentChange","Lt","_nestedTargetSelector","Mt","_ignoreTargetChange","Rt","_ignoreContentChange","debouncedEventContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","records","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","ct","it","updateContentSizeCache","hasOver","hasVpStyle","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroySizeObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","contentUpdateResult","trinsicUpdateResult","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","interactionStartEventNames","interactionEndEventNames","stopRootClickPropagation","scrollbar","documentElm","createScrollbarsSetupElements","scrollbarsSlot","defaultScrollbarSlot","et","rt","scrollbarSlot","evaluatedScrollbarSlot","scrollbarsAddRemoveClass","scrollbarStructures","scrollbarStructure","_scrollbar","scrollbarsHandleStyle","horizontalScrollbars","verticalScrollbars","addRemoveClassHorizontal","addRemoveClassVertical","generateScrollbarDOM","horizontal","scrollbarClassName","arrToPush","transitionlessClass","track","handle","_track","_handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_horizontal","_scrollbarStructures","_clone","_addRemoveClass","_handleStyle","_vertical","min","createSelfCancelTimeout","id","setTFn","clearTFn","refreshScrollbarHandleLength","setStyleFn","isHorizontal","xt","Ct","axis","viewportSize","handleRatio","structure","toFixed","createScrollbarsSetup","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","prevTheme","globalAutoHideDelay","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","clearScrollTimeout","auotHideMoveTimeout","clearAutoHideTimeout","auotHideTimeout","clearAutoTimeout","Ft","Xt","styleHorizontal","styleVertical","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","zt","It","Ot","currStructureSetupState","themeChanged","visibilityChanged","autoHideChanged","updateHandle","updateVisibility","setScrollbarVisibility","addRemoveClass","isVisible","yt","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","F","addEnvListener","plugins","targetIsElement","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","canceled","instance","$t","pluginInstance","sizeChanged","hostMutation","k","N","U","q","G","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","staticDefaultInitialization","staticDefaultOptions","getDefaultInitialization","setDefaultInitialization","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/array.ts","../src/support/dom/style.ts","../src/support/cache.ts","../src/support/utils/types.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/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidationPlugin/validation.ts","../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | false | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | false | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | false | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | false | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n 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: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\n\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: CreateCache = (\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache => {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\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 const isArrayLike = (obj: any): obj is ArrayLike => {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const 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 const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\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};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: 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 const 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 { from } from 'support/utils/array';\r\nimport { isNull, isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): T;\r\n (elm: HTMLElement | false | null | undefined, value: T | false | null): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T | false | null): T | void;\r\n};\r\n\r\nconst getSetProp = (\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string | false | null\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && !isNull(value) && value !== false && (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 const attr = ((\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}) as Attr;\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n if (value) {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n }\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(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 | false | null | undefined, 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 const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\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 const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\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 const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Node | Element | Node | false | null | undefined;\r\ntype OutputElementType = Node | Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween, closest };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | 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 = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): 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 = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor =\r\n jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\nexport const setT = window.setTimeout as (handler: TimerHandler, timeout?: number) => number;\r\nexport const clearT = window.clearTimeout as (id?: number) => void;\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\ntype ClassContainingElement = Node | Element | false | null | undefined;\r\ntype ClassName = string | false | null | undefined;\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: ClassContainingElement,\r\n className: ClassName,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n const classList = elm && (elm as Element).classList;\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (classList && className && 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(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: ClassContainingElement, className: ClassName): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\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: ClassContainingElement, className: ClassName): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\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 * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (elm: ClassContainingElement, className: ClassName): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\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: ClassName, classNameB: ClassName) => {\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","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF, setT, clearT } from 'support/compatibility/apis';\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear: () => void = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (clear !== noop) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | 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 | false | 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 fractional- 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 fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\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 | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEachAndClear } 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() {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) ?? doSupportPassiveEvents;\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 = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) 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 runEachAndClear.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { 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","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from, isEmptyArray } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name]\r\n ) => void;\r\n type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: RemoveEvent = (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void => {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n\r\n const addEvent: AddEvent = (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): (() => void) => {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n };\r\n\r\n const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n args?: EventMap[Name]\r\n ): void => {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [AddEvent, RemoveEvent, TriggerEvent];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { DeepPartial } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: DeepPartial,\r\n force: boolean,\r\n ...args: T\r\n) => void;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup<\r\n DynamicState,\r\n StaticState extends Record = Record,\r\n A extends any[] = []\r\n> = [update: SetupUpdate
, state: (() => DynamicState) & StaticState, destroy: () => void];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: DeepPartial,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\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 dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostScrollbarHidden = 'scrollbarHidden';\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 classNameViewportScrollbarHidden = `${classNameViewport}-scrollbar-hidden`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\nexport const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { DeepPartial, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type ScrollbarVisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type ScrollbarAutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n showNativeOverlaidScrollbars: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n theme: string | null;\r\n visibility: ScrollbarVisibilityBehavior;\r\n autoHide: ScrollbarAutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n showNativeOverlaidScrollbars: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n theme: 'os-theme-dark',\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n};\r\n","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, DeepPartial } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n DeepPartial, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\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 template The template according to which the options object shall be validated.\r\n * @param options The options object which 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 template: OptionsTemplate,\r\n options: DeepPartial,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: DeepPartial = {};\r\n const optionsCopy: DeepPartial = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = 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 validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\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 * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: DeepPartial,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n Options,\r\n OverflowBehavior,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { DeepPartial } from 'typings';\r\nimport type { Plugin } from 'plugins';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n showNativeOverlaidScrollbars: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n theme: [oTypes.string, oTypes.null], // string || null\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => DeepPartial;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type SizeObserverPluginInstance = {\r\n _: (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean\r\n ) => [appearCallback: () => any, offFns: (() => any)[]];\r\n};\r\n\r\nconst scrollAmount = 3333333;\r\nconst scrollEventName = 'scroll';\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const sizeObserverPlugin: Plugin = {\r\n [sizeObserverPluginName]: {\r\n _: (listenerElement, onSizeChangedCallback, observeAppearChange) => {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallback(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopPropagation(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]\r\n );\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import {\r\n keys,\r\n attr,\r\n WH,\r\n style,\r\n addClass,\r\n removeClass,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n UpdateCache,\r\n XY,\r\n} from 'support';\r\nimport { classNameViewportArrange } from 'classnames';\r\nimport type { StyleObject } from 'typings';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type {\r\n ViewportOverflowState,\r\n GetViewportOverflowState,\r\n HideNativeScrollbars,\r\n} from 'setups/structureSetup/updateSegments/overflowUpdateSegment';\r\nimport type { InternalEnvironment } from 'environment';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type ArrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n) => boolean;\r\n\r\nexport type UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nexport type UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n) => UndoViewportArrangeResult;\r\n\r\nexport type ScrollbarsHidingPluginInstance = {\r\n _createUniqueViewportArrangeElement(env: InternalEnvironment): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: boolean,\r\n flexboxGlue: boolean,\r\n viewport: HTMLElement,\r\n viewportArrange: HTMLStyleElement | false | null | undefined,\r\n getState: () => StructureSetupState,\r\n getViewportOverflowState: GetViewportOverflowState,\r\n hideNativeScrollbars: HideNativeScrollbars\r\n ): [ArrangeViewport, UndoArrangeViewport];\r\n _envWindowZoom(): (\r\n envInstance: InternalEnvironment,\r\n updateNativeScrollbarSizeCache: UpdateCache>,\r\n triggerEvent: () => void\r\n ) => void;\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst { round, abs } = Math;\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\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n flexboxGlue,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport: ArrangeViewport = (\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n directionIsRTL\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\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 viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (viewportArrange) {\r\n const { sheet } = viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange: UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n viewportOverflowState?\r\n ) => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(viewport, classNameViewportArrange);\r\n\r\n if (!flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(viewport, prevStyle);\r\n addClass(viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return [arrangeViewport, undoViewportArrange];\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n\r\n return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {\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) {\r\n return;\r\n }\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 && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent();\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { DeepPartial } from 'typings';\r\nimport { DefaultInitialization } from 'initialization';\r\nimport { getPlugins, ScrollbarsHidingPluginInstance, scrollbarsHidingPluginName } from 'plugins';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _staticDefaultInitialization: DefaultInitialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): DefaultInitialization;\r\n _setDefaultInitialization(newInitialization: DeepPartial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: DeepPartial): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n clear && removeElements(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarHidden);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = 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 const revertFbxGlueMax = 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 revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache(\r\n {\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n getNativeScrollbarSize.bind(0, body, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const defaultInitialization = {\r\n padding: !nativeScrollbarsHiding,\r\n content: false,\r\n cancel: {\r\n nativeScrollbarsOverlaid: true,\r\n body: null,\r\n },\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getDefaultInitialization: assignDeep.bind(\r\n 0,\r\n {} as DefaultInitialization,\r\n defaultInitialization\r\n ),\r\n _setDefaultInitialization(newInitializationStrategy) {\r\n assignDeep(defaultInitialization, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _staticDefaultInitialization: assignDeep({}, defaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let resizeFn: undefined | ReturnType;\r\n window.addEventListener('resize', () => {\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n\r\n resizeFn = resizeFn || (scrollbarsHidingPlugin && scrollbarsHidingPlugin._envWindowZoom());\r\n resizeFn && resizeFn(env, updateNativeScrollbarSizeCache, triggerEvent.bind(0, '_'));\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isBoolean, isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n DefaultStructureInitialization,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n DefaultScrollbarsInitialization,\r\n} from 'setups/scrollbarsSetup';\r\nimport { getEnvironment } from 'environment';\r\nimport { DeepPartial } from 'typings';\r\nimport { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type CancelInitialization = {\r\n cancel: {\r\n nativeScrollbarsOverlaid: boolean | undefined;\r\n body: boolean | null | undefined;\r\n };\r\n};\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization &\r\n ScrollbarsInitialization &\r\n DeepPartial;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type DefaultInitialization = DefaultStructureInitialization &\r\n DefaultScrollbarsInitialization &\r\n CancelInitialization;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type DefaultInitializtationElement = Exclude;\r\n\r\nexport type FallbackInitializtationElement<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackStaticInitializationElement: FallbackInitializtationElement,\r\n defaultStaticInitializationElementStrategy?: DefaultInitializtationElement,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(defaultStaticInitializationElementStrategy, args),\r\n args\r\n ) || fallbackStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackDynamicInitializationElement: FallbackInitializtationElement,\r\n defaultDynamicInitializationElementStrategy?: DefaultInitializtationElement,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n defaultDynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? fallbackDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nconst cancelInitialization = (\r\n cancelInitializationValue: DeepPartial | false | null | undefined,\r\n structureSetupElements: StructureSetupElementsObj\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _isBody, _viewportIsTarget } = structureSetupElements;\r\n const { _getDefaultInitialization, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isBoolean(body) || isNull(body) ? body : defaultbody;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n _isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_viewportIsTarget\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement, cancelInitialization };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEachAndClear,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n hasOwnProperty,\r\n noop,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n InitializationTargetObject,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false | null | undefined;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const env = getEnvironment();\r\n const { _getDefaultInitialization, _nativeScrollbarsHiding } = env;\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\r\n const {\r\n host: defaultHostInitializationStrategy,\r\n viewport: defaultViewportInitializationStrategy,\r\n padding: defaultPaddingInitializationStrategy,\r\n content: defaultContentInitializationStrategy,\r\n } = _getDefaultInitialization();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const {\r\n host: hostInitializationStrategy,\r\n padding: paddingInitializationStrategy,\r\n viewport: viewportInitializationStrategy,\r\n content: contentInitializationStrategy,\r\n } = targetStructureInitialization;\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const isBody = targetElement === ownerDocument.body;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = isBody\r\n ? _nativeScrollbarsHiding\r\n : !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarsHiding;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n defaultViewportInitializationStrategy,\r\n isBody && !hasOwnProperty(targetStructureInitialization, 'viewport')\r\n ? targetElement\r\n : viewportInitializationStrategy\r\n ),\r\n staticInitializationElement(createNewDiv, defaultViewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n singleElmSupport ? true : potentialViewport !== targetElement\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n defaultHostInitializationStrategy,\r\n hostInitializationStrategy\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultPaddingInitializationStrategy,\r\n paddingInitializationStrategy\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultContentInitializationStrategy,\r\n contentInitializationStrategy\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n const removeHtmlClass = isBody\r\n ? addClass(parent(targetElement), classNameViewportScrollbarHidden)\r\n : noop;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHtmlClass();\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarHidden));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEachAndClear.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\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 attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportScrollbarHidden,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostScrollbarHidden,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst max0 = max.bind(0, 0);\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.h),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\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 structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowEdge, getCurrentOverflowEdgeCache] = createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState: GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars,\r\n viewportStyleObj?\r\n ) => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarsHiding && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarsHiding ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarsOverlaid.x, _nativeScrollbarsSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarsOverlaid.y, _nativeScrollbarsSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\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 hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\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: HideNativeScrollbars = (\r\n viewportOverflowState,\r\n directionIsRTL,\r\n viewportArrange,\r\n viewportStyleObj\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n const [arrangeViewport, undoViewportArrange] = scrollbarsHidingPlugin\r\n ? scrollbarsHidingPlugin._overflowUpdateSegment(\r\n doViewportArrange,\r\n _flexboxGlue,\r\n _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('showNativeOverlaidScrollbars');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n let overflowEdgeCache = getCurrentOverflowEdgeCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarHidden,\r\n dataValueHostScrollbarHidden,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n const overflowAmountScrollSize = {\r\n w: max0(max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n arrangedViewportClientSize.h +\r\n max0(viewportclientSize.h - viewportScrollSize.h) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowEdgeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowEdgeChanged: overflowEdgeChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createOverflowUpdateSegment,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowEdgeChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdateSegment(structureSetupElements, state),\r\n createPaddingUpdateSegment(structureSetupElements, state),\r\n createOverflowUpdateSegment(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowEdgeChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\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 let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'scroll', (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopPropagation(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'animationstart', 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 runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\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 type TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n destroy: () => void,\r\n update: () => void | Parameters\r\n];\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH,\r\n fromRecords?: true\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n !fromRecords && onTrinsicChangedCallback(heightIntrinsic);\r\n return [heightIntrinsic];\r\n }\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n entries: IntersectionObserverEntry[],\r\n fromRecords?: true\r\n ) => {\r\n if (entries && entries.length > 0) {\r\n return triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n (entries) => intersectionObserverCallback(entries),\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance!.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n () => {\r\n if (intersectionObserverInstance) {\r\n return intersectionObserverCallback(intersectionObserverInstance.takeRecords(), true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n off,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [\r\n destroy: () => void,\r\n update: () => void | false | Parameters>\r\n];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n const listener = (event: Event) => {\r\n if (destroyed) {\r\n off(elm, eventNames, listener);\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n };\r\n on(elm, eventNames, listener);\r\n map!.set(elm, [eventNames, () => off(elm, eventNames, listener)]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const debouncedEventContentChange = debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n );\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (\r\n mutations: MutationRecord[],\r\n fromRecords?: true\r\n ): void | Parameters> => {\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 =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] as Parameters>;\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n !fromRecords &&\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n return [targetChangedAttrs, targetStyleChanged] as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!((mutations) =>\r\n observerCallback(mutations)\r\n );\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n debouncedEventContentChange._flush();\r\n\r\n const records = mutationObserver.takeRecords();\r\n return !isEmptyArray(records) && observerCallback(records, true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n closest,\r\n assignDeep,\r\n push,\r\n scrollLeft,\r\n scrollTop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n classNameScrollbar,\r\n classNameViewportArrange,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n destroy: () => void,\r\n updateObservers: () => Partial,\r\n updateObserversOptions: StructureSetupObserversUpdate\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const hasOver = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n const hasVpStyle = _viewportHasClass(classNameViewportArrange, '');\r\n const scrollOffsetX = hasVpStyle && scrollLeft(_viewport);\r\n const scrollOffsetY = hasVpStyle && scrollTop(_viewport);\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n _viewportAddRemoveClass(classNameViewportArrange, '');\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, hasOver);\r\n _viewportAddRemoveClass(classNameViewportArrange, '', hasVpStyle);\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues, fromRecords?: true) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: Partial = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && structureSetupUpdate(updateHints);\r\n return updateHints;\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean, fromRecords?: true) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n const updateHints: Partial = {\r\n _contentMutation: contentSizeChanged,\r\n };\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n !fromRecords && updateFn(updateHints);\r\n }\r\n return updateHints;\r\n };\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ) => {\r\n const updateHints: Partial = { _hostMutation: targetStyleChanged };\r\n if (targetStyleChanged) {\r\n !fromRecords && structureSetupUpdateWithDebouncedAdaptiveUpdateHints(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n return updateHints;\r\n };\r\n\r\n const trinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n }\r\n );\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n trinsicObserver && trinsicObserver[0](); // destroy\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[1](); // update\r\n const trinsicUpdateResult = trinsicObserver && trinsicObserver[1](); // update\r\n\r\n if (hostUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onHostMutation.apply(\r\n 0,\r\n push(hostUpdateResult, true) as [\r\n ...updateResult: typeof hostUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (contentUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onContentMutation.apply(\r\n 0,\r\n push(contentUpdateResult, true) as [\r\n ...updateResult: typeof contentUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (trinsicUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onTrinsicChanged.apply(\r\n 0,\r\n push(trinsicUpdateResult as any[], true) as [\r\n ...updateResult: typeof trinsicUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n\r\n return updateHints;\r\n },\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub, isEmptyObject, keys } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { DeepPartial, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowEdge: XY;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [updateHints: StructureSetupUpdateHints, changedOptions: DeepPartial, force: boolean];\r\n};\r\n\r\nconst initialXYNumber = { x: 0, y: 0 };\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowEdge: initialXYNumber,\r\n _overflowAmount: initialXYNumber,\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const triggerUpdateEvent: (...args: StructureSetupEventMap['u']) => void = (\r\n updateHints,\r\n changedOptions,\r\n force\r\n ) => {\r\n const truthyUpdateHints = keys(updateHints).some((key) => updateHints[key]);\r\n\r\n if (truthyUpdateHints || !isEmptyObject(changedOptions) || force) {\r\n triggerEvent('u', [updateHints, changedOptions, force]);\r\n }\r\n };\r\n const [destroyObservers, updateObservers, updateObserversOptions] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerUpdateEvent(updateStructure(checkOptionsFallback, updateHints), {}, false);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObserversOptions(checkOption);\r\n triggerUpdateEvent(\r\n updateStructure(checkOption, updateObservers(), force),\r\n changedOptions,\r\n !!force\r\n );\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n each,\r\n isEmptyArray,\r\n noop,\r\n on,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\r\n stopPropagation,\r\n style,\r\n} from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n classNamesScrollbarInteraction,\r\n classNamesScrollbarTransitionless,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n DefaultScrollbarsInitialization,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElement {\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _addRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => void;\r\n _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n // _removeClass: (classNames: string) => void;\r\n /*\r\n _addEventListener: () => void;\r\n _removeEventListener: () => void;\r\n */\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst interactionStartEventNames = 'touchstart mouseenter';\r\nconst interactionEndEventNames = 'touchend touchcancel mouseleave';\r\nconst stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>\r\n on(\r\n scrollbar,\r\n 'mousedown',\r\n on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),\r\n { _capture: true }\r\n );\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization } = getEnvironment();\r\n const { scrollbarsSlot: defaultScrollbarSlot } =\r\n _getDefaultInitialization() as DefaultScrollbarsInitialization;\r\n const { _documentElm, _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const scrollbarSlot = _targetIsElm ? null : (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n defaultScrollbarSlot,\r\n scrollbarSlot\r\n );\r\n const scrollbarsAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action((elm || noop)(scrollbarStructure) || scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const scrollbarsHandleStyle = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => {\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n const [elm, styles] = elmStyle(scrollbarStructure);\r\n style(elm, styles);\r\n });\r\n };\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const addRemoveClassHorizontal = scrollbarsAddRemoveClass.bind(0, horizontalScrollbars);\r\n const addRemoveClassVertical = scrollbarsAddRemoveClass.bind(0, verticalScrollbars);\r\n const generateScrollbarDOM = (horizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = horizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;\r\n const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';\r\n const scrollbar = createDiv(\r\n `${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass}`\r\n );\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n push(arrToPush, result);\r\n push(destroyFns, [\r\n removeElements.bind(0, scrollbar),\r\n on(scrollbar, interactionStartEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction, true);\r\n addRemoveClassVertical(classNamesScrollbarInteraction, true);\r\n }),\r\n on(scrollbar, interactionEndEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction);\r\n addRemoveClassVertical(classNamesScrollbarInteraction);\r\n }),\r\n stopRootClickPropagation(scrollbar, _documentElm),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = generateScrollbarDOM.bind(0, true);\r\n const generateVerticalScrollbarStructure = generateScrollbarDOM.bind(0, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n setT(() => {\r\n addRemoveClassHorizontal(classNamesScrollbarTransitionless);\r\n addRemoveClassVertical(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassHorizontal,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassVertical,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, verticalScrollbars),\r\n },\r\n },\r\n appendElements,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElement,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOSOptions,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { OverflowStyle, StyleObject } from 'typings';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nconst { min } = Math;\r\nconst createSelfCancelTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nconst refreshScrollbarHandleLength = (\r\n setStyleFn: ScrollbarsSetupElement['_handleStyle'],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n const handleRatio = min(1, viewportSize / (viewportSize + overflowAmount));\r\n\r\n setStyleFn((structure) => [\r\n structure._handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(handleRatio * 100).toFixed(3)}%`,\r\n },\r\n ]);\r\n};\r\n\r\nconst refreshScrollbarHandlePosition = (\r\n setStyleFn: (styles: StyleObject) => void,\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n /*\r\n //measure the handle length to respect min & max length\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\r\n var handleTrackDiff = trackLength - handleLength;\r\n var handleCSS = {};\r\n var transformOffset;\r\n var translateValue;\r\n\r\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\r\n // because its a bit behind during the small delay when content size updates\r\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\r\n var maxScroll =\r\n (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] -\r\n _viewportElementNative['client' + scrollbarVars._Width_Height]) *\r\n (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\r\n var getScrollRatio = function (base) {\r\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\r\n };\r\n var getHandleOffset = function (scrollRatio) {\r\n var offset = handleTrackDiff * scrollRatio;\r\n offset = isNaN(offset) ? 0 : offset;\r\n offset =\r\n isRTLisHorizontal && !_rtlScrollBehavior.i ? trackLength - handleLength - offset : offset;\r\n offset = MATH.max(0, offset);\r\n return offset;\r\n };\r\n var scrollRatio = getScrollRatio(nativeScroll);\r\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\r\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\r\n var snappedHandleOffset = getHandleOffset(scrollRatio);\r\n\r\n scrollbarVarsInfo._maxScroll = maxScroll;\r\n scrollbarVarsInfo._currentScroll = nativeScroll;\r\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\r\n\r\n if (_supportTransform) {\r\n transformOffset = isRTLisHorizontal\r\n ? -(trackLength - handleLength - handleOffset)\r\n : handleOffset; //in px\r\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\r\n translateValue = isHorizontal\r\n ? strTranslateBrace + transformOffset + 'px, 0)'\r\n : strTranslateBrace + '0, ' + transformOffset + 'px)';\r\n\r\n handleCSS[strTransform] = translateValue;\r\n\r\n //apply or clear up transition\r\n if (_supportTransition)\r\n handleCSS[strTransition] =\r\n transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1\r\n ? getCSSTransitionString(scrollbarVars._handle) +\r\n ', ' +\r\n (strTransform + _strSpace + transitionDuration + 'ms')\r\n : _strEmpty;\r\n } else handleCSS[scrollbarVars._left_top] = handleOffset;\r\n\r\n //only apply css if offset has changed and overflow exists.\r\n if (!nativeOverlayScrollbarsAreActive()) {\r\n scrollbarVars._handle.css(handleCSS);\r\n\r\n //clear up transition\r\n if (_supportTransform && _supportTransition && transition) {\r\n scrollbarVars._handle.one(_strTransitionEndEvent, function () {\r\n if (!_destroyed) scrollbarVars._handle.css(strTransition, _strEmpty);\r\n });\r\n }\r\n }\r\n\r\n scrollbarVarsInfo._handleOffset = handleOffset;\r\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\r\n scrollbarVarsInfo._trackLength = trackLength;\r\n */\r\n};\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup => {\r\n let autoHideIsMove: boolean;\r\n let autoHideIsLeave: boolean;\r\n let autoHideNotNever: boolean;\r\n let mouseInHost: boolean | undefined;\r\n let prevTheme: string | null | undefined;\r\n let globalAutoHideDelay = 0;\r\n\r\n const state = createState({});\r\n const [getState] = state;\r\n const [requestMouseMoveAnimationFrame, cancelMouseMoveAnimationFrame] = createSelfCancelTimeout();\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = createSelfCancelTimeout();\r\n const [scrollTimeout, clearScrollTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideMoveTimeout, clearAutoHideTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideTimeout, clearAutoTimeout] = createSelfCancelTimeout(() => globalAutoHideDelay);\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupState._elements\r\n );\r\n const { _host, _viewport } = structureSetupState._elements;\r\n const { _horizontal, _vertical } = elements;\r\n const { _addRemoveClass: addRemoveClassHorizontal, _handleStyle: styleHorizontal } = _horizontal;\r\n const { _addRemoveClass: addRemoveClassVertical, _handleStyle: styleVertical } = _vertical;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden, true);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden, true);\r\n };\r\n if (globalAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const onHostMouseEnter = () => {\r\n mouseInHost = autoHideIsLeave;\r\n mouseInHost && manageScrollbarsAutoHide(true);\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearScrollTimeout,\r\n clearAutoTimeout,\r\n clearAutoHideTimeout,\r\n cancelScrollAnimationFrame,\r\n cancelMouseMoveAnimationFrame,\r\n destroyElements,\r\n\r\n on(_host, 'mouseover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'mouseenter', onHostMouseEnter),\r\n on(_host, 'mouseleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'mousemove', () => {\r\n autoHideIsMove &&\r\n requestMouseMoveAnimationFrame(() => {\r\n clearScrollTimeout();\r\n manageScrollbarsAutoHide(true);\r\n auotHideMoveTimeout(() => {\r\n autoHideIsMove && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n on(_viewport, 'scroll', () => {\r\n autoHideNotNever &&\r\n requestScrollAnimationFrame(() => {\r\n manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n ];\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force, structureUpdateHints) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n\r\n const [theme, themeChanged] = checkOption('scrollbars.theme');\r\n const [visibility, visibilityChanged] =\r\n checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] =\r\n checkOption('scrollbars.autoHide');\r\n const [autoHideDelay] = checkOption('scrollbars.autoHideDelay');\r\n const [dragScrolling, dragScrollingChanged] = checkOption(\r\n 'scrollbars.dragScrolling'\r\n );\r\n const [touchSupport, touchSupportChanged] = checkOption('scrollbars.touchSupport');\r\n\r\n const updateHandle = _overflowEdgeChanged || _overflowAmountChanged;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged;\r\n\r\n const setScrollbarVisibility = (\r\n overflowStyle: OverflowStyle,\r\n addRemoveClass: (classNames: string, add?: boolean) => void\r\n ) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n addRemoveClass(classNamesScrollbarVisible, isVisible);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (updateVisibility) {\r\n const { _overflowStyle } = currStructureSetupState;\r\n\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, addRemoveClassHorizontal);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, addRemoveClassVertical);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n addRemoveClassHorizontal(classNamesScrollbarCornerless, !hasCorner);\r\n addRemoveClassVertical(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (themeChanged) {\r\n addRemoveClassHorizontal(prevTheme);\r\n addRemoveClassVertical(prevTheme);\r\n\r\n addRemoveClassHorizontal(theme, true);\r\n addRemoveClassVertical(theme, true);\r\n prevTheme = theme;\r\n }\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideNotNever = autoHide !== 'never';\r\n manageScrollbarsAutoHide(!autoHideNotNever, true);\r\n }\r\n if (updateHandle) {\r\n refreshScrollbarHandleLength(styleHorizontal, currStructureSetupState, true);\r\n refreshScrollbarHandleLength(styleVertical, currStructureSetupState);\r\n }\r\n },\r\n scrollbarsSetupState,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n Plugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { DeepPartial, OverflowStyle } from 'typings';\r\nimport {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n DefaultInitialization,\r\n cancelInitialization,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: DeepPartial,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n staticDefaultInitialization: DefaultInitialization;\r\n staticDefaultOptions: Options;\r\n\r\n getDefaultInitialization(): DefaultInitialization;\r\n setDefaultInitialization(newDefaultInitialization: DeepPartial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: DeepPartial): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowEdge: XY;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowEdgeChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: DeepPartial;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, canceled: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: DeepPartial): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const { _getDefaultOptions, _addListener: addEnvListener } = getEnvironment();\r\n const plugins = getPlugins();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: DeepPartial) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState\r\n );\r\n const update = (changedOptions: DeepPartial, force?: boolean) => {\r\n updateStructure(changedOptions, !!force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (canceled?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!canceled]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: DeepPartial) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force: boolean) => {\r\n updateScrollbars(changedOptions, force, updateHints);\r\n });\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n if (cancelInitialization(!targetIsElement && target.cancel, structureState._elements)) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowEdgeChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowEdgeChanged: _overflowEdgeChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","o","_initialValue","u","_equal","_","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","setT","setTimeout","clearT","clearTimeout","rnothtmlwhite","classListAction","className","action","classList","clazz","classes","match","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","maxTimeoutId","prevArguments","latestArguments","clear","g","_timeout","v","_maxDelay","p","_mergeParams","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","clearTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","timeoutId","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","_ref","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostScrollbarHidden","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarHidden","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarAutoHidden","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","showNativeOverlaidScrollbars","updating","elementEvents","attributes","ignoreMutation","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","optionsTemplateTypes","boolean","number","string","object","function","null","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsValidationPluginName","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","contentArrangeCounter","abs","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","env","A","_nativeScrollbarsHiding","T","_nativeScrollbarsOverlaid","D","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","H","_viewportPaddingStyle","L","_scrollbarsHideOffset","M","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","finalViewportOverflowState","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_envWindowZoom","size","dpr","envInstance","updateNativeScrollbarSizeCache","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","_nativeScrollbarsSize","environmentInstance","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","createEnvironment","envDOM","envElm","envChildElm","getNativeScrollbarSizeCache","nativeScrollbarsSize","nativeScrollbarsHiding","nativeScrollbarsOverlaid","defaultInitialization","padding","content","cancel","defaultDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElementStrategy","dynamicInitializationElementValue","cancelInitialization","cancelInitializationValue","structureSetupElements","W","_isBody","X","_viewportIsTarget","Y","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","host","defaultHostInitializationStrategy","defaultViewportInitializationStrategy","defaultPaddingInitializationStrategy","defaultContentInitializationStrategy","targetIsElm","targetStructureInitialization","hostInitializationStrategy","paddingInitializationStrategy","viewportInitializationStrategy","contentInitializationStrategy","targetElement","isTextarea","ownerDocument","isBody","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","filter","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_windowElm","_documentElm","_isTextarea","_targetIsElm","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","J","K","tt","Z","nt","ot","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","removeHtmlClass","createTrinsicUpdateSegment","updateHints","B","ut","_heightIntrinsic","dt","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_nativeScrollbarStyling","ht","_directionIsRTL","ft","_t","gt","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","max0","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdateSegment","lt","V","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowEdge","getCurrentOverflowEdgeCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","vt","bt","_overflowScroll","hostClientSize","isContentBox","subtractXScrollbar","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","nativeScrollbarSize","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","visibleBehaviorX","visibleBehaviorY","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","St","_hostMutation","wt","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmountScrollSize","overflowAmountClientSize","overflowEdge","overflowEdgeChanged","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowEdge","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowEdgeChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_direction","observeDirectionChange","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Et","_attributes","Pt","_styleChangingAttributes","Ht","_eventContentChange","Lt","_nestedTargetSelector","Mt","_ignoreTargetChange","Rt","_ignoreContentChange","debouncedEventContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","records","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","ct","it","updateContentSizeCache","hasOver","hasVpStyle","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroySizeObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","contentUpdateResult","trinsicUpdateResult","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","interactionStartEventNames","interactionEndEventNames","stopRootClickPropagation","scrollbar","documentElm","createScrollbarsSetupElements","scrollbarsSlot","defaultScrollbarSlot","et","rt","scrollbarSlot","evaluatedScrollbarSlot","scrollbarsAddRemoveClass","scrollbarStructures","scrollbarStructure","_scrollbar","scrollbarsHandleStyle","horizontalScrollbars","verticalScrollbars","addRemoveClassHorizontal","addRemoveClassVertical","generateScrollbarDOM","horizontal","scrollbarClassName","arrToPush","transitionlessClass","track","handle","_track","_handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_horizontal","_scrollbarStructures","_clone","_addRemoveClass","_handleStyle","_vertical","min","createSelfCancelTimeout","id","setTFn","clearTFn","refreshScrollbarHandleLength","setStyleFn","isHorizontal","xt","Ct","axis","viewportSize","handleRatio","structure","toFixed","createScrollbarsSetup","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","prevTheme","globalAutoHideDelay","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","clearScrollTimeout","auotHideMoveTimeout","clearAutoHideTimeout","auotHideTimeout","clearAutoTimeout","Ft","Xt","styleHorizontal","styleVertical","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","zt","It","Ot","currStructureSetupState","themeChanged","visibilityChanged","autoHideChanged","updateHandle","updateVisibility","setScrollbarVisibility","addRemoveClass","isVisible","yt","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","F","addEnvListener","plugins","targetIsElement","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","canceled","instance","$t","pluginInstance","sizeChanged","hostMutation","k","N","U","q","G","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","staticDefaultInitialization","staticDefaultOptions","getDefaultInitialization","setDefaultInitialization","getDefaultOptions","setDefaultOptions"],"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 1f0dcb7..97d5c91 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -function t(e,n){if(g(e))for(let t=0;tn(e[t],t,e)));return e}function e(e,n){const o=d(n);if(f(n)||o){let t=o?"":{};if(e){const r=window.getComputedStyle(e,null);t=o?mt(e,r,n):n.reduce(((t,n)=>(t[n]=mt(e,r,n),t)),t)}return t}t(L(n),(t=>xt(e,t,n[t])))}const n=(t,e)=>{const{o:n,u:o,_:r}=t;let i,s=n;const l=(t,e)=>{const n=s,l=t,c=e||(o?!o(n,l):n!==l);return(c||r)&&(s=l,i=n),[s,c,i]};return[e?t=>l(e(s,i),t):l,t=>[s,!!t,i]]},o=Node.ELEMENT_NODE,{toString:r,hasOwnProperty:i}=Object.prototype,s=t=>void 0===t,l=t=>null===t,c=t=>s(t)||l(t)?`${t}`:r.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),a=t=>"number"==typeof t,d=t=>"string"==typeof t,u=t=>"boolean"==typeof t,h=t=>"function"==typeof t,f=t=>Array.isArray(t),p=t=>"object"==typeof t&&!f(t)&&!l(t),g=t=>{const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!(!(f(t)||!h(t)&&n)||e>0&&p(t)&&!(e-1 in t))},w=t=>{if(!t||!p(t)||"object"!==c(t))return!1;let e;const n="constructor",o=t[n],r=o&&o.prototype,l=i.call(t,n),a=r&&i.call(r,"isPrototypeOf");if(o&&!l&&!a)return!1;for(e in t);return s(e)||i.call(t,e)},b=t=>{const e=HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===o)},v=t=>{const e=Element;return!!t&&(e?t instanceof e:t.nodeType===o)},y=(t,e,n)=>t.indexOf(e,n),m=(t,e,n)=>(n||d(e)||!g(e)?t.push(e):Array.prototype.push.apply(t,e),t),x=e=>{const n=Array.from,o=[];return n&&e?n(e):(e instanceof Set?e.forEach((t=>{m(o,t)})):t(e,(t=>{m(o,t)})),o)},$=t=>!!t&&0===t.length,O=(e,n,o)=>{t(e,(t=>t&&t.apply(void 0,n||[]))),!o&&(e.length=0)},S=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),L=t=>t?Object.keys(t):[],C=(e,n,o,r,i,s,c)=>{const a=[n,o,r,i,s,c];return"object"==typeof e&&!l(e)||h(e)||(e={}),t(a,(n=>{t(L(n),(t=>{const o=n[t];if(e===o)return!0;const r=f(o);if(o&&(w(o)||r)){const n=e[t];let i=n;r&&!f(n)?i=[]:r||w(n)||(i={}),e[t]=C(i,o)}else e[t]=o}))})),e},B=t=>{for(const e in t)return!1;return!0},A=(t,e,n,o)=>{if(s(o))return n?n[t]:e;n&&!l(o)&&!1!==o&&(n[t]=o)},E=(t,e,n)=>{if(s(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)},M=(t,e,n,o)=>{if(n){const r=E(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),E(t,e,x(i).join(" ").trim())}},R=(t,e)=>{t&&t.removeAttribute(e)},P=(t,e)=>A("scrollLeft",0,t,e),z=(t,e)=>A("scrollTop",0,t,e),H=Element.prototype,T=(t,e)=>{const n=[],o=e?v(e)?e:null:document;return o?m(n,o.querySelectorAll(t)):n},k=(t,e)=>!!v(t)&&(H.matches||H.msMatchesSelector).call(t,e),D=t=>t?x(t.childNodes):[],_=t=>t?t.parentElement:null,j=(t,e)=>{if(v(t)){const n=H.closest;if(n)return n.call(t,e);do{if(k(t,e))return t;t=_(t)}while(t)}return null},I=(e,n,o)=>{if(o){let r,i=n;e&&(g(o)?(r=document.createDocumentFragment(),t(o,(t=>{t===i&&(i=t.previousSibling),r.appendChild(t)}))):r=o,n&&(i?i!==n&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(r,i||null))}},X=(t,e)=>{I(t,null,e)},N=(t,e)=>{I(t,t&&t.firstChild,e)},V=(t,e)=>{I(_(t),t&&t.nextSibling,e)},F=e=>{if(g(e))t(x(e),(t=>F(t)));else if(e){const t=_(e);t&&t.removeChild(e)}},W=t=>{const e=document.createElement("div");return t&&E(e,"class",t),e},Y=e=>{const n=W();return n.innerHTML=e.trim(),t(D(n),(t=>F(t)))},K=t=>t.charAt(0).toUpperCase()+t.slice(1),Z=["-webkit-","-moz-","-o-","-ms-"],q=["WebKit","Moz","O","MS","webkit","moz","o","ms"],U={},G={},J=e=>{let n=G[e];if(S(G,e))return n;const o=K(e),r=W().style;return t(Z,(t=>{const i=t.replace(/-/g,""),s=[e,t+e,i+o,K(i)+o];return!(n=s.find((t=>void 0!==r[t])))})),G[e]=n||""},Q=e=>{let n=U[e]||window[e];return S(U,e)||(t(q,(t=>(n=n||window[t+K(e)],!n))),U[e]=n),n},tt=Q("MutationObserver"),et=Q("IntersectionObserver"),nt=Q("ResizeObserver"),ot=Q("cancelAnimationFrame"),rt=Q("requestAnimationFrame"),it=window.setTimeout,st=window.clearTimeout,lt=/[^\x20\t\r\n\f]+/g,ct=(t,e,n)=>{const o=t&&t.classList;let r,i=0,s=!1;if(o&&e&&d(e)){const t=e.match(lt)||[];for(s=t.length>0;r=t[i++];)s=!!n(o,r)&&s}return s},at=(t,e)=>{ct(t,e,((t,e)=>t.remove(e)))},dt=(t,e)=>(ct(t,e,((t,e)=>t.add(e))),at.bind(0,t,e)),ut=(e,n,o,r)=>{if(e&&n){let i=!0;return t(o,(t=>{(r?r(e[t]):e[t])!==(r?r(n[t]):n[t])&&(i=!1)})),i}return!1},ht=(t,e)=>ut(t,e,["w","h"]),ft=(t,e)=>ut(t,e,["x","y"]),pt=(t,e)=>ut(t,e,["t","r","b","l"]),gt=(t,e,n)=>ut(t,e,["width","height"],n&&(t=>Math.round(t))),wt=()=>{},bt=(t,e)=>{let n,o,r,i=wt;const{g:s,v:l,p:c}=e||{},d=function(e){i(),st(n),n=o=void 0,i=wt,t.apply(this,e)},u=t=>c&&o?c(o,t):t,f=()=>{i!==wt&&d(u(r)||r)},p=function(){const t=x(arguments),e=h(s)?s():s,c=a(e)&&e>=0;if(c){const s=h(l)?l():l,c=a(s)&&s>=0,p=e>0?it:rt,g=e>0?st:ot,w=u(t)||t,b=d.bind(0,w);i();const v=p(b,e);i=()=>g(v),c&&!n&&(n=it(f,s)),o=r=w}else d(t)};return p.m=f,p},vt={opacity:1,zindex:1},yt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return n==n?n:0},mt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],xt=(t,e,n)=>{try{if(t){const{style:o}=t;s(o[e])?o.setProperty(e,n):o[e]=((t,e)=>!vt[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}}catch(H){}},$t=(t,n,o)=>{const r=n?`${n}-`:"",i=o?`-${o}`:"",s=`${r}top${i}`,l=`${r}right${i}`,c=`${r}bottom${i}`,a=`${r}left${i}`,d=e(t,[s,l,c,a]);return{t:yt(d[s]),r:yt(d[l]),b:yt(d[c]),l:yt(d[a])}},Ot={w:0,h:0},St=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:Ot,Lt=t=>t?{w:t.clientWidth,h:t.clientHeight}:Ot,Ct=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:Ot,Bt=t=>{const n=parseFloat(e(t,"height"))||0,o=parseFloat(e(t,"height"))||0;return{w:o-Math.round(o),h:n-Math.round(n)}},At=t=>t.getBoundingClientRect();let Et;const Mt=t=>t.split(" "),Rt=(e,n,o,r)=>{t(Mt(n),(t=>{e.removeEventListener(t,o,r)}))},Pt=(e,n,o,r)=>{var i;const l=(()=>{if(s(Et)){Et=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){Et=!0}}))}catch(e){}}return Et})(),c=null!=(i=l&&r&&r.S)?i:l,a=r&&r.C||!1,d=r&&r.$||!1,u=[],h=l?{passive:c,capture:a}:a;return t(Mt(n),(t=>{const n=d?r=>{e.removeEventListener(t,n,a),o&&o(r)}:o;m(u,Rt.bind(null,e,t,n,a)),e.addEventListener(t,n,h)})),O.bind(0,u)},zt=t=>t.stopPropagation(),Ht={x:0,y:0},Tt=t=>{const e=t?At(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Ht},kt=(e,n)=>{t(f(n)?n:[n],e)},Dt=e=>{const n=new Map,o=(t,e)=>{if(t){const o=n.get(t);kt((t=>{o&&o[t?"delete":"clear"](t)}),e)}else n.forEach((t=>{t.clear()})),n.clear()},r=(t,e)=>{const r=n.get(t)||new Set;return n.set(t,r),kt((t=>{t&&r.add(t)}),e),o.bind(0,t,e)};return t(L(e),(t=>{r(t,e[t])})),[r,o,(e,o)=>{const r=n.get(e);t(x(r),(t=>{o&&!$(o)?t.apply(0,o):t()}))}]},_t=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&S(t,e)?t[e]:void 0),t):void 0,jt=(t,e,n)=>o=>[_t(t,o),n||void 0!==_t(e,o)],It=t=>{let e=t;return[()=>e,t=>{e=C({},e,t)}]},Xt="os-environment",Nt=`${Xt}-flexbox-glue`,Vt=`${Nt}-max`,Ft="data-overlayscrollbars",Wt=`${Ft}-overflow-x`,Yt=`${Ft}-overflow-y`,Kt="overflowVisible",Zt="scrollbarHidden",qt="os-padding",Ut="os-viewport",Gt=`${Ut}-arrange`,Jt="os-content",Qt=`${Ut}-scrollbar-hidden`,te=`os-overflow-visible`,ee="os-size-observer",ne=`${ee}-appear`,oe=`${ee}-listener`,re=`${oe}-scroll`,ie=`${oe}-item`,se=`${ie}-final`,le="os-trinsic-observer",ce="os-scrollbar",ae=`${ce}-horizontal`,de=`${ce}-vertical`,ue="os-scrollbar-track",he="os-scrollbar-handle",fe=`${ce}-visible`,pe=`${ce}-cornerless`,ge=`${ce}-transitionless`,we=`${ce}-interaction`,be=`${ce}-auto-hidden`,ve=t=>JSON.stringify(t,((t,e)=>{if(h(e))throw new Error;return e})),ye={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},me=(e,n)=>{const o={};return t(L(n).concat(L(e)),(t=>{const r=e[t],i=n[t];if(p(r)&&p(i))C(o[t]={},me(r,i));else if(S(n,t)&&i!==r){let e=!0;if(f(r)||f(i))try{ve(r)===ve(i)&&(e=!1)}catch(U){}e&&(o[t]=i)}})),o},xe={},$e=()=>C({},xe),Oe="__osOptionsValidationPlugin",Se=3333333,Le="scroll",Ce="__osSizeObserverPlugin",Be={[Ce]:{O:(t,n,o)=>{const r=Y(`
`);X(t,r),dt(t,re);const i=r[0],s=i.lastChild,l=i.firstChild,c=null==l?void 0:l.firstChild;let a,d=St(i),u=d,h=!1;const f=()=>{P(l,Se),z(l,Se),P(s,Se),z(s,Se)},p=t=>{a=0,h&&(d=u,n(!0===t))},g=t=>{u=St(i),h=!t||!ht(u,d),t?(zt(t),h&&!a&&(ot(a),a=rt(p))):p(!1===t),f()},w=m([],[Pt(l,Le,g),Pt(s,Le,g)]);return e(c,{width:Se,height:Se}),f(),[o?g.bind(0,!1):f,w]}}};let Ae=0;const{round:Ee,abs:Me}=Math,Re="__osScrollbarsHidingPlugin",Pe={[Re]:{I:t=>{const{A:e,T:n,D:o}=t,r=!(o||e||!n.x&&!n.y)&&document.createElement("style");return r&&(E(r,"id",`${Gt}-${Ae}`),Ae++),r},P:(n,o,r,i,s,l,c)=>[(t,o,l,c)=>{if(n){const{H:n}=s(),{L:a,M:d}=t,{x:u,y:h}=d,{x:f,y:p}=a,g=n[c?"paddingRight":"paddingLeft"],w=n.paddingTop,b=o.w+l.w,v=o.h+l.h,y={w:p&&h?`${p+b-g}px`:"",h:f&&u?`${f+v-w}px`:""};if(i){const{sheet:t}=i;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${E(i,"id")} + .${Gt}::before {}`,0);const n=e[0].style;n.width=y.w,n.height=y.h}}}else e(r,{"--os-vaw":y.w,"--os-vah":y.h})}return n},(i,a,d)=>{if(n){const u=d||l(i),{H:h}=s(),{M:f}=u,{x:p,y:g}=f,w={},b=e=>t(e.split(" "),(t=>{w[t]=h[t]}));p&&b("marginBottom paddingTop paddingBottom"),g&&b("marginLeft marginRight paddingLeft paddingRight");const v=e(r,L(w));return at(r,Gt),o||(w.height=""),e(r,w),[()=>{c(u,a,n,v),e(r,v),dt(r,Gt)},u]}return[wt]}],R:()=>{let t={w:0,h:0},e=0;return(n,o,r)=>{const i={w:window.innerWidth,h:window.innerHeight},s={w:i.w-t.w,h:i.h-t.h};if(0===s.w&&0===s.h)return;const l=Me(s.w),c=Me(s.h),a={w:Me(Ee(i.w/(t.w/100))),h:Me(Ee(i.h/(t.h/100)))},d=(()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e})(),u=l>2&&c>2,h=!((t,e)=>{const n=Me(t),o=Me(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h);if(u&&h&&d!==e&&d>0){const[t,e]=o();C(n.V,t),e&&r()}t=i,e=d}}}};let ze;const He=(t,e,n,o)=>{X(t,e);const r=Lt(e),i=St(e),s=Bt(n);return o&&F(e),{x:i.h-r.h+s.h,y:i.w-r.w+s.w}},Te=(t,n)=>{const o="hidden";e(t,{overflowX:o,overflowY:o,direction:"rtl"}),P(t,0);const r=Tt(t),i=Tt(n);P(t,-999);const s=Tt(n);return{i:r.x===i.x,n:i.x!==s.x}},ke=(t,e)=>{const n=dt(t,Nt),o=At(t),r=At(e),i=gt(r,o,!0),s=dt(t,Vt),l=At(t),c=At(e),a=gt(c,l,!0);return n(),s(),i&&a},De=()=>(ze||(ze=(()=>{const{body:t}=document,o=Y(`
`)[0],r=o.firstChild,[i,,s]=Dt(),[l,c]=n({o:He(t,o,r),u:ft},He.bind(0,t,o,r,!0)),[a]=c(),d=(t=>{let n=!1;const o=dt(t,Qt);try{n="none"===e(t,J("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return o(),n})(o),u={x:0===a.x,y:0===a.y},h={padding:!d,content:!1,cancel:{nativeScrollbarsOverlaid:!0,body:null}},f=C({},ye),p={V:a,T:u,A:d,D:"-1"===e(o,"zIndex"),k:Te(o,r),B:ke(o,r),j:t=>i("_",t),Y:C.bind(0,{},h),q(t){C(h,t)},F:C.bind(0,{},f),G(t){C(f,t)},N:C({},h),U:C({},f)};if(R(o,"style"),F(o),!(d||u.x&&u.y)){let t;window.addEventListener("resize",(()=>{const e=$e()[Re];t=t||e&&e.R(),t&&t(p,l,s.bind(0,"_"))}))}return p})()),ze),_e=(t,e)=>h(t)?t.apply(0,e):t,je=(t,e,n,o)=>_e(o||_e(n,t),t)||e.apply(0,t),Ie=(t,e,n,o)=>{let r=_e(o,t);return(l(r)||s(r))&&(r=_e(n,t)),!0===r||l(r)||s(r)?e.apply(0,t):r},Xe=W.bind(0,""),Ne=t=>{X(_(t),D(t)),F(t)},Ve=t=>{const e=De(),{Y:n,A:o}=e,r=$e()[Re],i=r&&r.I,{host:s,viewport:l,padding:c,content:a}=n(),d=b(t),u=d?{}:t,{host:h,padding:f,viewport:p,content:g}=u,w=d?t:u.target,v=k(w,"textarea"),x=w.ownerDocument,$=w===x.body,C=x.defaultView,B=($||!!nt&&!v)&&o,A=je.bind(0,[w]),P=Ie.bind(0,[w]),z=[A(Xe,l,$&&!S(u,"viewport")?w:p),A(Xe,l),A(Xe)].filter((t=>!!B||t!==w))[0],H=z===w,T={J:w,K:v?A(Xe,s,h):w,Z:z,tt:!H&&P(Xe,c,f),nt:!H&&P(Xe,a,g),ot:!H&&!o&&i&&i(e),st:C,et:x,ct:v,W:$,rt:d,X:H,it:(t,e)=>H?((t,e,n)=>{const o=E(t,Ft)||"";return new Set(o.split(" ")).has(n)})(z,0,e):((t,e)=>ct(t,e,((t,e)=>t.contains(e))))(z,t),lt:(t,e,n)=>H?M(z,Ft,e,n):(n?dt:at)(z,t)},j=L(T).reduce(((t,e)=>{const n=T[e];return m(t,!(!n||_(n))&&n)}),[]),N=t=>t?y(j,t)>-1:null,{J:W,K:Y,tt:K,Z,nt:q,ot:U}=T,G=[],J=v&&N(Y),Q=v?W:D([q,Z,K,Y,W].find((t=>!1===N(t)))),tt=q||Z;return[T,()=>{const t=((t,e)=>(E(t,Ft,e),R.bind(0,t,Ft)))(Y,H?"viewport":"host"),e=dt(K,qt),n=dt(Z,!H&&Ut),r=dt(q,Jt),i=$?dt(_(w),Qt):wt;J&&(V(W,Y),m(G,(()=>{V(Y,W),F(Y)}))),X(tt,Q),X(Y,K),X(K||Y,!H&&Z),X(Z,q),m(G,(()=>{i(),t(),R(Z,Wt),R(Z,Yt),N(q)&&Ne(q),N(Z)&&Ne(Z),N(K)&&Ne(K),e(),n(),r()})),o&&!H&&m(G,at.bind(0,Z,Qt)),U&&(((t,e)=>{I(_(t),t,e)})(Z,U),m(G,F.bind(0,U)))},O.bind(0,G)]},Fe=(t,n)=>{const{nt:o}=t,[r]=n;return t=>{const{B:n}=De(),{ut:i}=r(),{dt:s}=t,l=(o||!n)&&s;return l&&e(o,{height:i?"":"100%"}),{ft:l,_t:l}}},We=(t,o)=>{const[r,i]=o,{K:s,tt:l,Z:c,X:a}=t,[d,u]=n({u:pt,o:$t()},$t.bind(0,s,"padding",""));return(t,n,o)=>{let[s,h]=u(o);const{A:f,B:p}=De(),{ht:g}=r(),{ft:w,_t:b,gt:v}=t,[y,m]=n("paddingAbsolute");(w||h||!p&&b)&&([s,h]=d(o));const x=!a&&(m||v||h);if(x){const t=!y||!l&&!f,n=s.r+s.l,o=s.t+s.b,r={marginRight:t&&!g?-n:0,marginBottom:t?-o:0,marginLeft:t&&g?-n:0,top:t?-s.t:0,right:t?g?-s.r:"auto":0,left:t?g?"auto":-s.l:0,width:t?`calc(100% + ${n}px)`:""},a={paddingTop:t?s.t:0,paddingRight:t?s.r:0,paddingBottom:t?s.b:0,paddingLeft:t?s.l:0};e(l||c,r),e(c,a),i({tt:s,vt:!t,H:l?a:C({},r,a)})}return{wt:x}}},{max:Ye}=Math,Ke=Ye.bind(0,0),Ze="visible",qe="hidden",Ue=42,Ge={u:ht,o:{w:0,h:0}},Je={u:ft,o:{x:qe,y:qe}},Qe=(t,e,n)=>n?dt(t,e):at(t,e),tn=t=>0===t.indexOf(Ze),en=(t,o)=>{const[r,i]=o,{K:s,tt:l,Z:c,ot:a,X:d,lt:u}=t,{V:h,B:f,A:p,T:g}=De(),w=$e()[Re],b=!d&&!p&&(g.x||g.y),[v,y]=n(Ge,Bt.bind(0,c)),[m,x]=n(Ge,Ct.bind(0,c)),[$,O]=n(Ge),[S,L]=n(Ge),[C]=n(Je),B=(t,n)=>{if(e(c,{height:""}),n){const{vt:n,tt:o}=r(),{bt:i,L:l}=t,a=Bt(s),d=Lt(s),u="content-box"===e(c,"boxSizing"),h=n||u?o.b+o.t:0,f=!(g.x&&u);e(c,{height:d.h+a.h+(i.x&&f?l.x:0)-h})}},A=(t,n)=>{const o=p||t?0:Ue,r=(t,r,i)=>{const s=e(c,t),l="scroll"===(n?n[t]:s);return[s,l,l&&!p?r?o:i:0,r&&!!o]},[i,s,l,a]=r("overflowX",g.x,h.x),[d,u,f,w]=r("overflowY",g.y,h.y);return{yt:{x:i,y:d},bt:{x:s,y:u},L:{x:l,y:f},M:{x:a,y:w}}},R=(t,e,n,o)=>{const{L:i,M:s}=t,{x:l,y:c}=s,{x:a,y:d}=i,{H:u}=r(),h=e?"marginLeft":"marginRight",f=e?"paddingLeft":"paddingRight",p=u[h],g=u.marginBottom,w=u[f],b=u.paddingBottom;o.width=`calc(100% + ${d+-1*p}px)`,o[h]=-d+p,o.marginBottom=-a+g,n&&(o[f]=w+(c?d:0),o.paddingBottom=b+(l?a:0))},[P,z]=w?w.P(b,f,c,a,r,A,R):[()=>b,()=>[wt]];return(t,n,o)=>{const{ft:a,St:h,_t:w,wt:b,dt:H,gt:T}=t,{ut:k,ht:D}=r(),[_,j]=n("showNativeOverlaidScrollbars"),[I,X]=n("overflow"),N=_&&g.x&&g.y,V=!d&&!f&&(a||w||h||j||H),F=tn(I.x),W=tn(I.y),Y=F||W;let K,Z=y(o),q=x(o),U=O(o),G=L(o);if(j&&p&&u(Qt,Zt,!N),V&&(K=A(N),B(K,k)),a||b||w||T||j){Y&&u(te,Kt,!1);const[t,e]=z(N,D,K),[n,r]=Z=v(o),[i,s]=q=m(o),l=Lt(c);let a=i,d=l;t(),(s||r||j)&&e&&!N&&P(e,i,n,D)&&(d=Lt(c),a=Ct(c));const h={w:Ke(Ye(i.w,a.w)+n.w),h:Ke(Ye(i.h,a.h)+n.h)},f={w:Ke(d.w+Ke(l.w-i.w)+n.w),h:Ke(d.h+Ke(l.h-i.h)+n.h)};G=S(f),U=$(((t,e)=>{const n=window.devicePixelRatio%1!=0?1:0,o={w:Ke(t.w-e.w),h:Ke(t.h-e.h)};return{w:o.w>n?o.w:0,h:o.h>n?o.h:0}})(h,f),o)}const[J,Q]=G,[tt,et]=U,[nt,ot]=q,[rt,it]=Z,st={x:tt.w>0,y:tt.h>0},lt=F&&W&&(st.x||st.y)||F&&st.x&&!st.y||W&&st.y&&!st.x;if(b||T||it||ot||Q||et||X||j||V){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},n=((t,e,n,o)=>{const r=(t,e)=>{const n=tn(t),o=e&&n&&t.replace(`${Ze}-`,"")||"";return[e&&!n?t:"",tn(o)?"hidden":o]},[i,s]=r(n.x,e.x),[l,c]=r(n.y,e.y);return o.overflowX=s&&l?s:i,o.overflowY=c&&i?c:l,A(t,o)})(N,st,I,t),o=P(n,nt,rt,D);d||R(n,D,o,t),V&&B(n,k),d?(E(s,Wt,t.overflowX),E(s,Yt,t.overflowY)):e(c,t)}M(s,Ft,Kt,lt),Qe(l,te,lt),!d&&Qe(c,te,Y);const[ct,at]=C(A(N).yt);return i({yt:ct,Ct:{x:J.w,y:J.h},xt:{x:tt.w,y:tt.h},$t:st}),{Ot:at,zt:Q,It:et}}},nn=(e,n,o)=>{const r={},i=n||{};return t(L(e).concat(L(i)),(t=>{const n=e[t],s=i[t];r[t]=!!(o||n||s)})),r},on=3333333,rn=t=>"rtl"===e(t,"direction"),sn=t=>t&&(t.height||t.width),ln=(t,e,o)=>{const{At:r=!1,Tt:i=!1}=o||{},s=$e()[Ce],{k:l}=De(),c=Y(`
`)[0],a=c.firstChild,d=rn.bind(0,c),[h]=n({o:void 0,_:!0,u:(t,e)=>!(!t||!sn(t)&&sn(e))}),g=t=>{const n=f(t)&&t.length>0&&p(t[0]),o=!n&&u(t[0]);let i=!1,s=!1,a=!0;if(n){const[e,,n]=h(t.pop().contentRect),o=sn(e),r=sn(n);i=!n||!o,s=!r&&o,a=!i}else o?[,a]=t:s=!0===t;if(r&&a){const e=o?t[0]:rn(c);P(c,e?l.n?-on:l.i?0:on:on),z(c,on)}i||e({ft:!o,Dt:o?t:void 0,Tt:!!s})},w=[];let b,v=!!i&&g;if(nt){const t=new nt(g);t.observe(a),m(w,(()=>{t.disconnect()}))}else if(s){const[t,e]=s.O(a,g,i);v=t,m(w,e)}if(r){b=n({o:!d()},d);const[t]=b;m(w,Pt(c,"scroll",(e=>{const n=t(),[o,r]=n;r&&(at(a,"ltr rtl"),dt(a,o?"rtl":"ltr"),g(n)),zt(e)})))}return v&&(dt(c,ne),m(w,Pt(c,"animationstart",v,{$:!!nt}))),N(t,c),()=>{O(w),F(c)}},cn=(t,e)=>{let o;const r=W(le),i=[],[s]=n({o:!1}),l=(t,n)=>{if(t){const o=s((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,r]=o;if(r)return!n&&e(o),[o]}},c=(t,e)=>{if(t&&t.length>0)return l(t.pop(),e)};if(et)o=new et((t=>c(t)),{root:t}),o.observe(r),m(i,(()=>{o.disconnect()}));else{const t=()=>{const t=St(r);l(t)};m(i,ln(r,t)),t()}return N(t,r),[()=>{O(i),F(r)},()=>{if(o)return c(o.takeRecords(),!0)}]},an=(e,n,o,r)=>{let i=!1;const{Et:s,Pt:l,Ht:c,Lt:a,Mt:u,Rt:h}=r||{},f=bt((()=>{i&&o(!0)}),{g:33,v:99}),[p,g]=((e,n,o)=>{let r,i=!1;const s=s=>{if(o){const l=o.reduce(((t,n)=>{if(n){const o=n[0],r=n[1],i=r&&o&&(s?s(o):T(o,e));i&&i.length&&r&&d(r)&&m(t,[i,r.trim()],!0)}return t}),[]);t(l,(e=>t(e[0],(t=>{const o=e[1],s=r.get(t);if(s){const t=s[0],e=s[1];t===o&&e()}const l=Pt(t,o,(e=>{i?(l(),r.delete(t)):n(e)}));r.set(t,[o,l])}))))}};return o&&(r=new WeakMap,s()),[()=>{i=!0},s]})(e,f,c),w=l||[],b=(s||[]).concat(w),v=(i,s)=>{const l=u||wt,c=h||wt,f=[],p=[];let b=!1,v=!1,x=!1;return t(i,(t=>{const{attributeName:o,target:i,type:s,oldValue:u,addedNodes:h}=t,g="attributes"===s,$="childList"===s,O=e===i,S=g&&d(o)?E(i,o):0,L=0!==S&&u!==S,C=y(w,o)>-1&&L;if(n&&!O){const n=!g,s=g&&C,d=s&&a&&k(i,a),f=(d?!l(i,o,u,S):n||s)&&!c(t,!!d,e,r);m(p,h),v=v||f,x=x||$}!n&&O&&L&&!l(i,o,u,S)&&(m(f,o),b=b||C)})),x&&!$(p)&&g((t=>p.reduce(((e,n)=>(m(e,T(t,n)),k(n,t)?m(e,n):e)),[]))),n?(!s&&v&&o(!1),[!1]):!$(f)||b?(!s&&o(f,b),[f,b]):void 0},x=new tt((t=>v(t)));return x.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:n,childList:n,characterData:n}),i=!0,[()=>{i&&(p(),x.disconnect(),i=!1)},()=>{if(i){f.m();const t=x.takeRecords();return!$(t)&&v(t,!0)}}]},dn=`[${Ft}]`,un=`.${Ut}`,hn=["tabindex"],fn=["wrap","cols","rows"],pn=["id","class","style","open"],gn=(e,o,r)=>{let i,s,l;const[,c]=o,{K:u,Z:p,nt:g,ct:w,X:b,it:x,lt:$}=e,{A:O,B:S}=De(),[B]=n({u:ht,o:{w:0,h:0}},(()=>{const t=x(te,Kt),e=x(Gt,""),n=e&&P(p),o=e&&z(p);$(te,Kt),$(Gt,"");const r=Ct(g),i=Ct(p),s=Bt(p);return $(te,Kt,t),$(Gt,"",e),P(p,n),z(p,o),{w:i.w+r.w+s.w,h:i.h+r.h+s.h}})),A=w?fn:pn.concat(fn),M=bt(r,{g:()=>i,v:()=>s,p(t,e){const[n]=t,[o]=e;return[L(n).concat(L(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),H=e=>{t(e||hn,(t=>{if(y(hn,t)>-1){const e=E(u,t);d(e)?E(p,t,e):R(p,t)}}))},T=(t,e)=>{const[n,o]=t,i={dt:o};return c({ut:n}),!e&&r(i),i},k=({ft:t,Dt:e,Tt:n})=>{const o=!t||n?r:M;let i=!1;if(e){const[t,n]=e;i=n,c({ht:t})}o({ft:t,gt:i})},D=(t,e)=>{const[,n]=B(),o={_t:n};return n&&!e&&(t?r:M)(o),o},_=(t,e,n)=>{const o={St:e};return e?!n&&M(o):b||H(t),o},I=(g||!S)&&cn(u,T),X=!b&&ln(u,k,{Tt:!0,At:!O}),[N,V]=an(u,!1,_,{Pt:pn,Et:pn.concat(hn)}),F=b&&new nt(k.bind(0,{ft:!0}));return F&&F.observe(u),H(),[()=>{l&&l[0](),I&&I[0](),X&&X(),F&&F.disconnect(),N()},()=>{const t={},e=V(),n=l&&l[1](),o=I&&I[1]();return e&&C(t,_.apply(0,m(e,!0))),n&&C(t,D.apply(0,m(n,!0))),o&&C(t,T.apply(0,m(o,!0))),t},t=>{const[e]=t("updating.ignoreMutation"),[n,o]=t("updating.attributes"),[r,c]=t("updating.elementEvents"),[d,u]=t("updating.debounce"),w=t=>h(e)&&e(t);if((c||o)&&(l&&(l[1](),l[0]()),l=an(g||p,!0,D,{Pt:A.concat(n||[]),Et:A.concat(n||[]),Ht:r,Lt:dn,Rt:(t,e)=>{const{target:n,attributeName:o}=t;return!(e||!o)&&((t,e,n)=>{const o=t&&j(t,e),r=t&&((t,e)=>{const n=e?v(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r||o!==t&&r!==t&&j(j(t,n),e)===o)})(n,dn,un)||!!j(n,`.${ce}`)||!!w(t)}})),u)if(M.m(),f(d)){const t=d[0],e=d[1];i=!!a(t)&&t,s=!!a(e)&&e}else a(d)?(i=d,s=!1):(i=!1,s=!1)}]},wn={x:0,y:0},bn={tt:{t:0,r:0,b:0,l:0},vt:!1,H:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Ct:wn,xt:wn,yt:{x:"hidden",y:"hidden"},$t:{x:!1,y:!1},ut:!1,ht:!1},vn="touchstart mouseenter",yn="touchend touchcancel mouseleave",mn=(t,e)=>Pt(t,"mousedown",Pt.bind(0,e,"click",zt,{$:!0,C:!0}),{C:!0}),xn=(n,o)=>{const{Y:r}=De(),{scrollbarsSlot:i}=r(),{et:s,J:l,K:c,Z:a,rt:d}=o,u=d?null:n.scrollbarsSlot,h=Ie([l,c,a],(()=>c),i,u),f=(e,n,o,r)=>{const i=o?dt:at;t(e,(t=>{i((r||wt)(t)||t.jt,n)}))},p=(n,o)=>{t(n,(t=>{const[n,r]=o(t);e(n,r)}))},g=[],w=[],b=[],v=f.bind(0,w),y=f.bind(0,b),x=t=>{const e=t?ae:de,n=t?w:b,o=$(n)?ge:"",r=W(`${ce} ${e} ${o}`),i=W(ue),l=W(he),c={jt:r,Yt:i,qt:l};return X(r,i),X(i,l),m(n,c),m(g,[F.bind(0,r),Pt(r,vn,(()=>{v(we,!0),y(we,!0)})),Pt(r,yn,(()=>{v(we),y(we)})),mn(r,s)]),c},S=x.bind(0,!0),L=x.bind(0,!1);return S(),L(),[{Ft:{Gt:w,Nt:S,Ut:v,Wt:p.bind(0,w)},Xt:{Gt:b,Nt:L,Ut:y,Wt:p.bind(0,b)}},()=>{X(h,w[0].jt),X(h,b[0].jt),it((()=>{v(ge),y(ge)}),300)},O.bind(0,g)]},{min:$n}=Math,On=t=>{let e;const n=t?it:rt,o=t?st:ot;return[r=>{o(e),e=n(r,h(t)?t():t)},()=>o(e)]},Sn=(t,e,n)=>{const{xt:o,Ct:r}=e,i=n?"x":"y",s=r[i],l=o[i],c=$n(1,s/(s+l));t((t=>[t.qt,{[n?"width":"height"]:`${(100*c).toFixed(3)}%`}]))},Ln=new Set,Cn=new WeakMap,Bn=(e,n,o)=>{let r=!1;const{F:i,j:s}=De(),c=$e(),a=b(e),d=a?e:e.target,f=(t=>Cn.get(t))(d);if(f)return f;const p=c[Oe],g=t=>{const e=t||{},n=p&&p.O;return n?n(e,!0):e},w=C({},i(),g(n)),[v,y,m]=Dt(o),[x,$,S]=((e,n)=>{const o=jt(n,{}),r=It(bn),[i,s,l]=Dt(),[c]=r,[a,d,u]=Ve(e),h=((e,n)=>{const{Z:o}=e,{A:r,T:i,B:s}=De(),l=!r&&(i.x||i.y),c=[Fe(e,n),We(e,n),en(e,n)];return(e,n,r)=>{const i=nn(C({ft:!1,wt:!1,gt:!1,dt:!1,zt:!1,It:!1,Ot:!1,St:!1,_t:!1},n),{},r),a=l||!s,d=a&&P(o),u=a&&z(o);let h=i;return t(c,(t=>{h=nn(h,t(h,e,!!r)||{},r)})),P(o,d),z(o,u),h}})(a,r),f=(t,e,n)=>{const o=L(t).some((e=>t[e]));(o||!B(e)||n)&&l("u",[t,e,n])},[p,g,w]=gn(a,r,(t=>{f(h(o,t),{},!1)})),b=c.bind(0);return b.Vt=t=>{i("u",t)},b.kt=d,b.Bt=a,[(t,e)=>{const o=jt(n,t,e);w(o),f(h(o,g(),e),t,!!e)},b,()=>{s(),p(),u()}]})(e,w),[A,E,M]=((t,e,n)=>{let o,r,i,s,l,c=0;const a=It({}),[d]=a,[u,h]=On(),[f,p]=On(),[g,w]=On(100),[b,v]=On(100),[y,m]=On((()=>c)),[x,$,S]=xn(t,n.Bt),{K:L,Z:C}=n.Bt,{Ft:B,Xt:A}=x,{Ut:E,Wt:M}=B,{Ut:R,Wt:P}=A,z=(t,e)=>{if(m(),t)E(be),R(be);else{const t=()=>{E(be,!0),R(be,!0)};c>0&&!e?y(t):t()}},H=()=>{s=r,s&&z(!0)},T=[w,m,v,p,h,S,Pt(L,"mouseover",H,{$:!0}),Pt(L,"mouseenter",H),Pt(L,"mouseleave",(()=>{s=!1,r&&z(!1)})),Pt(L,"mousemove",(()=>{o&&u((()=>{w(),z(!0),b((()=>{o&&z(!1)}))}))})),Pt(C,"scroll",(()=>{i&&f((()=>{z(!0),g((()=>{i&&!s&&z(!1)}))}))}))],k=d.bind(0);return k.Bt=x,k.kt=$,[(t,s,a)=>{const{zt:d,It:u,Ot:h}=a,f=jt(e,t,s),p=n(),[g,w]=f("scrollbars.theme"),[b,v]=f("scrollbars.visibility"),[y,m]=f("scrollbars.autoHide"),[x]=f("scrollbars.autoHideDelay");f("scrollbars.dragScrolling"),f("scrollbars.touchSupport");const $=d||u,O=(t,e)=>{const n="visible"===b||"auto"===b&&"scroll"===t;return e(fe,n),n};if(c=x,h||v){const{yt:t}=p,e=O(t.x,E),n=O(t.y,R),o=e&&n;E(pe,!o),R(pe,!o)}w&&(E(l),R(l),E(g,!0),R(g,!0),l=g),m&&(o="move"===y,r="leave"===y,i="never"!==y,z(!i,!0)),$&&(Sn(M,p,!0),Sn(P,p))},k,O.bind(0,T)]})(e,w,$),R=(t,e)=>{x(t,!!e)},H=s(R.bind(0,{},!0)),T=t=>{(t=>{Cn.delete(t),Ln.delete(t)})(d),H(),M(),S(),r=!0,m("destroyed",[k,!!t]),y()},k={options(t){if(t){const e=me(w,g(t));B(e)||(C(w,e),R(e))}return C({},w)},on:v,off:(t,e)=>{t&&e&&y(t,e)},state(){const{Ct:t,xt:e,yt:n,$t:o,tt:i,vt:s}=$();return C({},{overflowEdge:t,overflowAmount:e,overflowStyle:n,hasOverflow:o,padding:i,paddingAbsolute:s,destroyed:r})},elements(){const{J:t,K:e,tt:n,Z:o,nt:r}=$.Bt;return C({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update:t=>(R({},t),k),destroy:T.bind(0)};return $.Vt(((t,e,n)=>{A(e,n,t)})),t(L(c),(t=>{const e=c[t];h(e)&&e(Bn,k)})),((t,e)=>{const{nativeScrollbarsOverlaid:n,body:o}=t||{},{W:r,X:i}=e,{Y:s,T:c}=De(),{nativeScrollbarsOverlaid:a,body:d}=s().cancel,h=null!=n?n:a,f=u(o)||l(o)?o:d,p=(c.x||c.y)&&h,g=r&&(l(f)?!i:f);return!!p||!!g})(!a&&e.cancel,$.Bt)?(T(!0),k):($.kt(),E.kt(),((t,e)=>{Cn.set(t,e),Ln.add(t)})(d,k),m("initialized",[k]),$.Vt(((t,e,n)=>{const{ft:o,gt:r,dt:i,zt:s,It:l,Ot:c,_t:a,St:d}=t;m("updated",[k,{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowEdgeChanged:s,overflowAmountChanged:l,overflowStyleChanged:c,contentMutation:a,hostMutation:d},changedOptions:e,force:n}])})),k.update(!0))};Bn.plugin=e=>{t(f(e)?e:[e],(e=>{t(L(e),(t=>{xe[t]=e[t]}))}))},Bn.env=()=>{const{V:t,T:e,A:n,k:o,B:r,D:i,N:s,U:l,Y:c,q:a,F:d,G:u}=De();return C({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,staticDefaultInitialization:s,staticDefaultOptions:l,getDefaultInitialization:c,setDefaultInitialization:a,getDefaultOptions:d,setDefaultOptions:u})};export{Bn as OverlayScrollbars,Pe as scrollbarsHidingPlugin,Be as sizeObserverPlugin}; \ No newline at end of file +function t(e,n){if(g(e))for(let t=0;tn(e[t],t,e)));return e}function e(e,n){const o=d(n);if(f(n)||o){let t=o?"":{};if(e){const r=window.getComputedStyle(e,null);t=o?mt(e,r,n):n.reduce(((t,n)=>(t[n]=mt(e,r,n),t)),t)}return t}t(L(n),(t=>xt(e,t,n[t])))}const n=(t,e)=>{const{o:n,u:o,_:r}=t;let i,s=n;const l=(t,e)=>{const n=s,l=t,c=e||(o?!o(n,l):n!==l);return(c||r)&&(s=l,i=n),[s,c,i]};return[e?t=>l(e(s,i),t):l,t=>[s,!!t,i]]},o=Node.ELEMENT_NODE,{toString:r,hasOwnProperty:i}=Object.prototype,s=t=>void 0===t,l=t=>null===t,c=t=>s(t)||l(t)?`${t}`:r.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),a=t=>"number"==typeof t,d=t=>"string"==typeof t,u=t=>"boolean"==typeof t,h=t=>"function"==typeof t,f=t=>Array.isArray(t),p=t=>"object"==typeof t&&!f(t)&&!l(t),g=t=>{const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!(!(f(t)||!h(t)&&n)||e>0&&p(t)&&!(e-1 in t))},w=t=>{if(!t||!p(t)||"object"!==c(t))return!1;let e;const n="constructor",o=t[n],r=o&&o.prototype,l=i.call(t,n),a=r&&i.call(r,"isPrototypeOf");if(o&&!l&&!a)return!1;for(e in t);return s(e)||i.call(t,e)},b=t=>{const e=HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===o)},v=t=>{const e=Element;return!!t&&(e?t instanceof e:t.nodeType===o)},y=(t,e,n)=>t.indexOf(e,n),m=(t,e,n)=>(n||d(e)||!g(e)?t.push(e):Array.prototype.push.apply(t,e),t),x=e=>{const n=Array.from,o=[];return n&&e?n(e):(e instanceof Set?e.forEach((t=>{m(o,t)})):t(e,(t=>{m(o,t)})),o)},$=t=>!!t&&0===t.length,O=(e,n,o)=>{t(e,(t=>t&&t.apply(void 0,n||[]))),!o&&(e.length=0)},S=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),L=t=>t?Object.keys(t):[],C=(e,n,o,r,i,s,c)=>{const a=[n,o,r,i,s,c];return"object"==typeof e&&!l(e)||h(e)||(e={}),t(a,(n=>{t(L(n),(t=>{const o=n[t];if(e===o)return!0;const r=f(o);if(o&&(w(o)||r)){const n=e[t];let i=n;r&&!f(n)?i=[]:r||w(n)||(i={}),e[t]=C(i,o)}else e[t]=o}))})),e},B=t=>{for(const e in t)return!1;return!0},A=(t,e,n,o)=>{if(s(o))return n?n[t]:e;n&&!l(o)&&!1!==o&&(n[t]=o)},E=(t,e,n)=>{if(s(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)},M=(t,e,n,o)=>{if(n){const r=E(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),E(t,e,x(i).join(" ").trim())}},R=(t,e)=>{t&&t.removeAttribute(e)},P=(t,e)=>A("scrollLeft",0,t,e),z=(t,e)=>A("scrollTop",0,t,e),H=Element.prototype,T=(t,e)=>{const n=[],o=e?v(e)?e:null:document;return o?m(n,o.querySelectorAll(t)):n},k=(t,e)=>!!v(t)&&(H.matches||H.msMatchesSelector).call(t,e),D=t=>t?x(t.childNodes):[],_=t=>t?t.parentElement:null,j=(t,e)=>{if(v(t)){const n=H.closest;if(n)return n.call(t,e);do{if(k(t,e))return t;t=_(t)}while(t)}return null},I=(e,n,o)=>{if(o){let r,i=n;e&&(g(o)?(r=document.createDocumentFragment(),t(o,(t=>{t===i&&(i=t.previousSibling),r.appendChild(t)}))):r=o,n&&(i?i!==n&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(r,i||null))}},X=(t,e)=>{I(t,null,e)},N=(t,e)=>{I(t,t&&t.firstChild,e)},V=(t,e)=>{I(_(t),t&&t.nextSibling,e)},F=e=>{if(g(e))t(x(e),(t=>F(t)));else if(e){const t=_(e);t&&t.removeChild(e)}},W=t=>{const e=document.createElement("div");return t&&E(e,"class",t),e},Y=e=>{const n=W();return n.innerHTML=e.trim(),t(D(n),(t=>F(t)))},K=t=>t.charAt(0).toUpperCase()+t.slice(1),Z=["-webkit-","-moz-","-o-","-ms-"],q=["WebKit","Moz","O","MS","webkit","moz","o","ms"],U={},G={},J=e=>{let n=G[e];if(S(G,e))return n;const o=K(e),r=W().style;return t(Z,(t=>{const i=t.replace(/-/g,""),s=[e,t+e,i+o,K(i)+o];return!(n=s.find((t=>void 0!==r[t])))})),G[e]=n||""},Q=e=>{let n=U[e]||window[e];return S(U,e)||(t(q,(t=>(n=n||window[t+K(e)],!n))),U[e]=n),n},tt=Q("MutationObserver"),et=Q("IntersectionObserver"),nt=Q("ResizeObserver"),ot=Q("cancelAnimationFrame"),rt=Q("requestAnimationFrame"),it=window.setTimeout,st=window.clearTimeout,lt=/[^\x20\t\r\n\f]+/g,ct=(t,e,n)=>{const o=t&&t.classList;let r,i=0,s=!1;if(o&&e&&d(e)){const t=e.match(lt)||[];for(s=t.length>0;r=t[i++];)s=!!n(o,r)&&s}return s},at=(t,e)=>{ct(t,e,((t,e)=>t.remove(e)))},dt=(t,e)=>(ct(t,e,((t,e)=>t.add(e))),at.bind(0,t,e)),ut=(e,n,o,r)=>{if(e&&n){let i=!0;return t(o,(t=>{(r?r(e[t]):e[t])!==(r?r(n[t]):n[t])&&(i=!1)})),i}return!1},ht=(t,e)=>ut(t,e,["w","h"]),ft=(t,e)=>ut(t,e,["x","y"]),pt=(t,e)=>ut(t,e,["t","r","b","l"]),gt=(t,e,n)=>ut(t,e,["width","height"],n&&(t=>Math.round(t))),wt=()=>{},bt=(t,e)=>{let n,o,r,i=wt;const{g:s,v:l,p:c}=e||{},d=function(e){i(),st(n),n=o=void 0,i=wt,t.apply(this,e)},u=t=>c&&o?c(o,t):t,f=()=>{i!==wt&&d(u(r)||r)},p=function(){const t=x(arguments),e=h(s)?s():s,c=a(e)&&e>=0;if(c){const s=h(l)?l():l,c=a(s)&&s>=0,p=e>0?it:rt,g=e>0?st:ot,w=u(t)||t,b=d.bind(0,w);i();const v=p(b,e);i=()=>g(v),c&&!n&&(n=it(f,s)),o=r=w}else d(t)};return p.m=f,p},vt={opacity:1,zindex:1},yt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return n==n?n:0},mt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],xt=(t,e,n)=>{try{if(t){const{style:o}=t;s(o[e])?o.setProperty(e,n):o[e]=((t,e)=>!vt[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}}catch(H){}},$t=(t,n,o)=>{const r=n?`${n}-`:"",i=o?`-${o}`:"",s=`${r}top${i}`,l=`${r}right${i}`,c=`${r}bottom${i}`,a=`${r}left${i}`,d=e(t,[s,l,c,a]);return{t:yt(d[s]),r:yt(d[l]),b:yt(d[c]),l:yt(d[a])}},Ot={w:0,h:0},St=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:Ot,Lt=t=>t?{w:t.clientWidth,h:t.clientHeight}:Ot,Ct=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:Ot,Bt=t=>{const n=parseFloat(e(t,"height"))||0,o=parseFloat(e(t,"height"))||0;return{w:o-Math.round(o),h:n-Math.round(n)}},At=t=>t.getBoundingClientRect();let Et;const Mt=t=>t.split(" "),Rt=(e,n,o,r)=>{t(Mt(n),(t=>{e.removeEventListener(t,o,r)}))},Pt=(e,n,o,r)=>{var i;const l=(()=>{if(s(Et)){Et=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){Et=!0}}))}catch(e){}}return Et})(),c=null!=(i=l&&r&&r.S)?i:l,a=r&&r.C||!1,d=r&&r.$||!1,u=[],h=l?{passive:c,capture:a}:a;return t(Mt(n),(t=>{const n=d?r=>{e.removeEventListener(t,n,a),o&&o(r)}:o;m(u,Rt.bind(null,e,t,n,a)),e.addEventListener(t,n,h)})),O.bind(0,u)},zt=t=>t.stopPropagation(),Ht={x:0,y:0},Tt=t=>{const e=t?At(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Ht},kt=(e,n)=>{t(f(n)?n:[n],e)},Dt=e=>{const n=new Map,o=(t,e)=>{if(t){const o=n.get(t);kt((t=>{o&&o[t?"delete":"clear"](t)}),e)}else n.forEach((t=>{t.clear()})),n.clear()},r=(t,e)=>{const r=n.get(t)||new Set;return n.set(t,r),kt((t=>{t&&r.add(t)}),e),o.bind(0,t,e)};return t(L(e),(t=>{r(t,e[t])})),[r,o,(e,o)=>{const r=n.get(e);t(x(r),(t=>{o&&!$(o)?t.apply(0,o):t()}))}]},_t=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&S(t,e)?t[e]:void 0),t):void 0,jt=(t,e,n)=>o=>[_t(t,o),n||void 0!==_t(e,o)],It=t=>{let e=t;return[()=>e,t=>{e=C({},e,t)}]},Xt="os-environment",Nt=`${Xt}-flexbox-glue`,Vt=`${Nt}-max`,Ft="data-overlayscrollbars",Wt=`${Ft}-overflow-x`,Yt=`${Ft}-overflow-y`,Kt="overflowVisible",Zt="scrollbarHidden",qt="os-padding",Ut="os-viewport",Gt=`${Ut}-arrange`,Jt="os-content",Qt=`${Ut}-scrollbar-hidden`,te=`os-overflow-visible`,ee="os-size-observer",ne=`${ee}-appear`,oe=`${ee}-listener`,re=`${oe}-scroll`,ie=`${oe}-item`,se=`${ie}-final`,le="os-trinsic-observer",ce="os-scrollbar",ae=`${ce}-horizontal`,de=`${ce}-vertical`,ue="os-scrollbar-track",he="os-scrollbar-handle",fe=`${ce}-visible`,pe=`${ce}-cornerless`,ge=`${ce}-transitionless`,we=`${ce}-interaction`,be=`${ce}-auto-hidden`,ve=t=>JSON.stringify(t,((t,e)=>{if(h(e))throw new Error;return e})),ye={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},me=(e,n)=>{const o={};return t(L(n).concat(L(e)),(t=>{const r=e[t],i=n[t];if(p(r)&&p(i))C(o[t]={},me(r,i));else if(S(n,t)&&i!==r){let e=!0;if(f(r)||f(i))try{ve(r)===ve(i)&&(e=!1)}catch(U){}e&&(o[t]=i)}})),o},xe={},$e=()=>C({},xe),Oe="__osOptionsValidationPlugin",Se=3333333,Le="scroll",Ce="__osSizeObserverPlugin",Be={[Ce]:{O:(t,n,o)=>{const r=Y(`
`);X(t,r),dt(t,re);const i=r[0],s=i.lastChild,l=i.firstChild,c=null==l?void 0:l.firstChild;let a,d=St(i),u=d,h=!1;const f=()=>{P(l,Se),z(l,Se),P(s,Se),z(s,Se)},p=t=>{a=0,h&&(d=u,n(!0===t))},g=t=>{u=St(i),h=!t||!ht(u,d),t?(zt(t),h&&!a&&(ot(a),a=rt(p))):p(!1===t),f()},w=m([],[Pt(l,Le,g),Pt(s,Le,g)]);return e(c,{width:Se,height:Se}),f(),[o?g.bind(0,!1):f,w]}}};let Ae=0;const{round:Ee,abs:Me}=Math,Re="__osScrollbarsHidingPlugin",Pe={[Re]:{I:t=>{const{A:e,T:n,D:o}=t,r=!(o||e||!n.x&&!n.y)&&document.createElement("style");return r&&(E(r,"id",`${Gt}-${Ae}`),Ae++),r},P:(n,o,r,i,s,l,c)=>[(t,o,l,c)=>{if(n){const{H:n}=s(),{L:a,M:d}=t,{x:u,y:h}=d,{x:f,y:p}=a,g=n[c?"paddingRight":"paddingLeft"],w=n.paddingTop,b=o.w+l.w,v=o.h+l.h,y={w:p&&h?`${p+b-g}px`:"",h:f&&u?`${f+v-w}px`:""};if(i){const{sheet:t}=i;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${E(i,"id")} + .${Gt}::before {}`,0);const n=e[0].style;n.width=y.w,n.height=y.h}}}else e(r,{"--os-vaw":y.w,"--os-vah":y.h})}return n},(i,a,d)=>{if(n){const u=d||l(i),{H:h}=s(),{M:f}=u,{x:p,y:g}=f,w={},b=e=>t(e.split(" "),(t=>{w[t]=h[t]}));p&&b("marginBottom paddingTop paddingBottom"),g&&b("marginLeft marginRight paddingLeft paddingRight");const v=e(r,L(w));return at(r,Gt),o||(w.height=""),e(r,w),[()=>{c(u,a,n,v),e(r,v),dt(r,Gt)},u]}return[wt]}],R:()=>{let t={w:0,h:0},e=0;return(n,o,r)=>{const i={w:window.innerWidth,h:window.innerHeight},s={w:i.w-t.w,h:i.h-t.h};if(0===s.w&&0===s.h)return;const l=Me(s.w),c=Me(s.h),a={w:Me(Ee(i.w/(t.w/100))),h:Me(Ee(i.h/(t.h/100)))},d=(()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e})(),u=l>2&&c>2,h=!((t,e)=>{const n=Me(t),o=Me(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h);if(u&&h&&d!==e&&d>0){const[t,e]=o();C(n.V,t),e&&r()}t=i,e=d}}}};let ze;const He=(t,e,n,o)=>{X(t,e);const r=Lt(e),i=St(e),s=Bt(n);return o&&F(e),{x:i.h-r.h+s.h,y:i.w-r.w+s.w}},Te=(t,n)=>{const o="hidden";e(t,{overflowX:o,overflowY:o,direction:"rtl"}),P(t,0);const r=Tt(t),i=Tt(n);P(t,-999);const s=Tt(n);return{i:r.x===i.x,n:i.x!==s.x}},ke=(t,e)=>{const n=dt(t,Nt),o=At(t),r=At(e),i=gt(r,o,!0),s=dt(t,Vt),l=At(t),c=At(e),a=gt(c,l,!0);return n(),s(),i&&a},De=()=>(ze||(ze=(()=>{const{body:t}=document,o=Y(`
`)[0],r=o.firstChild,[i,,s]=Dt(),[l,c]=n({o:He(t,o,r),u:ft},He.bind(0,t,o,r,!0)),[a]=c(),d=(t=>{let n=!1;const o=dt(t,Qt);try{n="none"===e(t,J("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return o(),n})(o),u={x:0===a.x,y:0===a.y},h={padding:!d,content:!1,cancel:{nativeScrollbarsOverlaid:!0,body:null}},f=C({},ye),p={V:a,T:u,A:d,D:"-1"===e(o,"zIndex"),k:Te(o,r),B:ke(o,r),j:t=>i("_",t),Y:C.bind(0,{},h),q(t){C(h,t)},F:C.bind(0,{},f),G(t){C(f,t)},N:C({},h),U:C({},f)};if(R(o,"style"),F(o),!(d||u.x&&u.y)){let t;window.addEventListener("resize",(()=>{const e=$e()[Re];t=t||e&&e.R(),t&&t(p,l,s.bind(0,"_"))}))}return p})()),ze),_e=(t,e)=>h(t)?t.apply(0,e):t,je=(t,e,n,o)=>_e(o||_e(n,t),t)||e.apply(0,t),Ie=(t,e,n,o)=>{let r=_e(o,t);return(l(r)||s(r))&&(r=_e(n,t)),!0===r||l(r)||s(r)?e.apply(0,t):r},Xe=W.bind(0,""),Ne=t=>{X(_(t),D(t)),F(t)},Ve=t=>{const e=De(),{Y:n,A:o}=e,r=$e()[Re],i=r&&r.I,{host:s,viewport:l,padding:c,content:a}=n(),d=b(t),u=d?{}:t,{host:h,padding:f,viewport:p,content:g}=u,w=d?t:u.target,v=k(w,"textarea"),x=w.ownerDocument,$=w===x.body,C=x.defaultView,B=($||!!nt&&!v)&&o,A=je.bind(0,[w]),P=Ie.bind(0,[w]),z=[A(Xe,l,$&&!S(u,"viewport")?w:p),A(Xe,l),A(Xe)].filter((t=>!!B||t!==w))[0],H=z===w,T={J:w,K:v?A(Xe,s,h):w,Z:z,tt:!H&&P(Xe,c,f),nt:!H&&P(Xe,a,g),ot:!H&&!o&&i&&i(e),st:C,et:x,ct:v,W:$,rt:d,X:H,it:(t,e)=>H?((t,e,n)=>{const o=E(t,Ft)||"";return new Set(o.split(" ")).has(n)})(z,0,e):((t,e)=>ct(t,e,((t,e)=>t.contains(e))))(z,t),lt:(t,e,n)=>H?M(z,Ft,e,n):(n?dt:at)(z,t)},j=L(T).reduce(((t,e)=>{const n=T[e];return m(t,!(!n||_(n))&&n)}),[]),N=t=>t?y(j,t)>-1:null,{J:W,K:Y,tt:K,Z,nt:q,ot:U}=T,G=[],J=v&&N(Y),Q=v?W:D([q,Z,K,Y,W].find((t=>!1===N(t)))),tt=q||Z;return[T,()=>{const t=((t,e)=>(E(t,Ft,e),R.bind(0,t,Ft)))(Y,H?"viewport":"host"),e=dt(K,qt),n=dt(Z,!H&&Ut),r=dt(q,Jt),i=$?dt(_(w),Qt):wt;J&&(V(W,Y),m(G,(()=>{V(Y,W),F(Y)}))),X(tt,Q),X(Y,K),X(K||Y,!H&&Z),X(Z,q),m(G,(()=>{i(),t(),R(Z,Wt),R(Z,Yt),N(q)&&Ne(q),N(Z)&&Ne(Z),N(K)&&Ne(K),e(),n(),r()})),o&&!H&&m(G,at.bind(0,Z,Qt)),U&&(((t,e)=>{I(_(t),t,e)})(Z,U),m(G,F.bind(0,U)))},O.bind(0,G)]},Fe=(t,n)=>{const{nt:o}=t,[r]=n;return t=>{const{B:n}=De(),{ut:i}=r(),{dt:s}=t,l=(o||!n)&&s;return l&&e(o,{height:i?"":"100%"}),{ft:l,_t:l}}},We=(t,o)=>{const[r,i]=o,{K:s,tt:l,Z:c,X:a}=t,[d,u]=n({u:pt,o:$t()},$t.bind(0,s,"padding",""));return(t,n,o)=>{let[s,h]=u(o);const{A:f,B:p}=De(),{ht:g}=r(),{ft:w,_t:b,gt:v}=t,[y,m]=n("paddingAbsolute");(w||h||!p&&b)&&([s,h]=d(o));const x=!a&&(m||v||h);if(x){const t=!y||!l&&!f,n=s.r+s.l,o=s.t+s.b,r={marginRight:t&&!g?-n:0,marginBottom:t?-o:0,marginLeft:t&&g?-n:0,top:t?-s.t:0,right:t?g?-s.r:"auto":0,left:t?g?"auto":-s.l:0,width:t?`calc(100% + ${n}px)`:""},a={paddingTop:t?s.t:0,paddingRight:t?s.r:0,paddingBottom:t?s.b:0,paddingLeft:t?s.l:0};e(l||c,r),e(c,a),i({tt:s,vt:!t,H:l?a:C({},r,a)})}return{wt:x}}},{max:Ye}=Math,Ke=Ye.bind(0,0),Ze="visible",qe="hidden",Ue=42,Ge={u:ht,o:{w:0,h:0}},Je={u:ft,o:{x:qe,y:qe}},Qe=(t,e,n)=>n?dt(t,e):at(t,e),tn=t=>0===t.indexOf(Ze),en=(t,o)=>{const[r,i]=o,{K:s,tt:l,Z:c,ot:a,X:d,lt:u}=t,{V:h,B:f,A:p,T:g}=De(),w=$e()[Re],b=!d&&!p&&(g.x||g.y),[v,y]=n(Ge,Bt.bind(0,c)),[m,x]=n(Ge,Ct.bind(0,c)),[$,O]=n(Ge),[S,L]=n(Ge),[C]=n(Je),B=(t,n)=>{if(e(c,{height:""}),n){const{vt:n,tt:o}=r(),{bt:i,L:l}=t,a=Bt(s),d=Lt(s),u="content-box"===e(c,"boxSizing"),h=n||u?o.b+o.t:0,f=!(g.x&&u);e(c,{height:d.h+a.h+(i.x&&f?l.x:0)-h})}},A=(t,n)=>{const o=p||t?0:Ue,r=(t,r,i)=>{const s=e(c,t),l="scroll"===(n?n[t]:s);return[s,l,l&&!p?r?o:i:0,r&&!!o]},[i,s,l,a]=r("overflowX",g.x,h.x),[d,u,f,w]=r("overflowY",g.y,h.y);return{yt:{x:i,y:d},bt:{x:s,y:u},L:{x:l,y:f},M:{x:a,y:w}}},R=(t,e,n,o)=>{const{L:i,M:s}=t,{x:l,y:c}=s,{x:a,y:d}=i,{H:u}=r(),h=e?"marginLeft":"marginRight",f=e?"paddingLeft":"paddingRight",p=u[h],g=u.marginBottom,w=u[f],b=u.paddingBottom;o.width=`calc(100% + ${d+-1*p}px)`,o[h]=-d+p,o.marginBottom=-a+g,n&&(o[f]=w+(c?d:0),o.paddingBottom=b+(l?a:0))},[P,z]=w?w.P(b,f,c,a,r,A,R):[()=>b,()=>[wt]];return(t,n,o)=>{const{ft:a,St:h,_t:w,wt:b,dt:H,gt:T}=t,{ut:k,ht:D}=r(),[_,j]=n("showNativeOverlaidScrollbars"),[I,X]=n("overflow"),N=_&&g.x&&g.y,V=!d&&!f&&(a||w||h||j||H),F=tn(I.x),W=tn(I.y),Y=F||W;let K,Z=y(o),q=x(o),U=O(o),G=L(o);if(j&&p&&u(Qt,Zt,!N),V&&(K=A(N),B(K,k)),a||b||w||T||j){Y&&u(te,Kt,!1);const[t,e]=z(N,D,K),[n,r]=Z=v(o),[i,s]=q=m(o),l=Lt(c);let a=i,d=l;t(),(s||r||j)&&e&&!N&&P(e,i,n,D)&&(d=Lt(c),a=Ct(c));const h={w:Ke(Ye(i.w,a.w)+n.w),h:Ke(Ye(i.h,a.h)+n.h)},f={w:Ke(d.w+Ke(l.w-i.w)+n.w),h:Ke(d.h+Ke(l.h-i.h)+n.h)};G=S(f),U=$(((t,e)=>{const n=window.devicePixelRatio%1!=0?1:0,o={w:Ke(t.w-e.w),h:Ke(t.h-e.h)};return{w:o.w>n?o.w:0,h:o.h>n?o.h:0}})(h,f),o)}const[J,Q]=G,[tt,et]=U,[nt,ot]=q,[rt,it]=Z,st={x:tt.w>0,y:tt.h>0},lt=F&&W&&(st.x||st.y)||F&&st.x&&!st.y||W&&st.y&&!st.x;if(b||T||it||ot||Q||et||X||j||V){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},n=((t,e,n,o)=>{const r=(t,e)=>{const n=tn(t),o=e&&n&&t.replace(`${Ze}-`,"")||"";return[e&&!n?t:"",tn(o)?"hidden":o]},[i,s]=r(n.x,e.x),[l,c]=r(n.y,e.y);return o.overflowX=s&&l?s:i,o.overflowY=c&&i?c:l,A(t,o)})(N,st,I,t),o=P(n,nt,rt,D);d||R(n,D,o,t),V&&B(n,k),d?(E(s,Wt,t.overflowX),E(s,Yt,t.overflowY)):e(c,t)}M(s,Ft,Kt,lt),Qe(l,te,lt),!d&&Qe(c,te,Y);const[ct,at]=C(A(N).yt);return i({yt:ct,Ct:{x:J.w,y:J.h},xt:{x:tt.w,y:tt.h},$t:st}),{Ot:at,zt:Q,It:et}}},nn=(e,n,o)=>{const r={},i=n||{};return t(L(e).concat(L(i)),(t=>{const n=e[t],s=i[t];r[t]=!!(o||n||s)})),r},on=3333333,rn=t=>"rtl"===e(t,"direction"),sn=t=>t&&(t.height||t.width),ln=(t,e,o)=>{const{At:r=!1,Tt:i=!1}=o||{},s=$e()[Ce],{k:l}=De(),c=Y(`
`)[0],a=c.firstChild,d=rn.bind(0,c),[h]=n({o:void 0,_:!0,u:(t,e)=>!(!t||!sn(t)&&sn(e))}),g=t=>{const n=f(t)&&t.length>0&&p(t[0]),o=!n&&u(t[0]);let i=!1,s=!1,a=!0;if(n){const[e,,n]=h(t.pop().contentRect),o=sn(e),r=sn(n);i=!n||!o,s=!r&&o,a=!i}else o?[,a]=t:s=!0===t;if(r&&a){const e=o?t[0]:rn(c);P(c,e?l.n?-on:l.i?0:on:on),z(c,on)}i||e({ft:!o,Dt:o?t:void 0,Tt:!!s})},w=[];let b,v=!!i&&g;if(nt){const t=new nt(g);t.observe(a),m(w,(()=>{t.disconnect()}))}else if(s){const[t,e]=s.O(a,g,i);v=t,m(w,e)}if(r){b=n({o:!d()},d);const[t]=b;m(w,Pt(c,"scroll",(e=>{const n=t(),[o,r]=n;r&&(at(a,"ltr rtl"),dt(a,o?"rtl":"ltr"),g(n)),zt(e)})))}return v&&(dt(c,ne),m(w,Pt(c,"animationstart",v,{$:!!nt}))),N(t,c),()=>{O(w),F(c)}},cn=(t,e)=>{let o;const r=W(le),i=[],[s]=n({o:!1}),l=(t,n)=>{if(t){const o=s((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,r]=o;if(r)return!n&&e(o),[o]}},c=(t,e)=>{if(t&&t.length>0)return l(t.pop(),e)};if(et)o=new et((t=>c(t)),{root:t}),o.observe(r),m(i,(()=>{o.disconnect()}));else{const t=()=>{const t=St(r);l(t)};m(i,ln(r,t)),t()}return N(t,r),[()=>{O(i),F(r)},()=>{if(o)return c(o.takeRecords(),!0)}]},an=(e,n,o,r)=>{let i=!1;const{Et:s,Pt:l,Ht:c,Lt:a,Mt:u,Rt:h}=r||{},f=bt((()=>{i&&o(!0)}),{g:33,v:99}),[p,g]=((e,n,o)=>{let r,i=!1;const s=s=>{if(o){const l=o.reduce(((t,n)=>{if(n){const o=n[0],r=n[1],i=r&&o&&(s?s(o):T(o,e));i&&i.length&&r&&d(r)&&m(t,[i,r.trim()],!0)}return t}),[]);t(l,(e=>t(e[0],(t=>{const o=e[1],s=r.get(t);if(s){const t=s[0],e=s[1];t===o&&e()}const l=e=>{i?(Rt(t,o,l),r.delete(t)):n(e)};Pt(t,o,l),r.set(t,[o,()=>Rt(t,o,l)])}))))}};return o&&(r=new WeakMap,s()),[()=>{i=!0},s]})(e,f,c),w=l||[],b=(s||[]).concat(w),v=(i,s)=>{const l=u||wt,c=h||wt,f=[],p=[];let b=!1,v=!1,x=!1;return t(i,(t=>{const{attributeName:o,target:i,type:s,oldValue:u,addedNodes:h}=t,g="attributes"===s,$="childList"===s,O=e===i,S=g&&d(o)?E(i,o):0,L=0!==S&&u!==S,C=y(w,o)>-1&&L;if(n&&!O){const n=!g,s=g&&C,d=s&&a&&k(i,a),f=(d?!l(i,o,u,S):n||s)&&!c(t,!!d,e,r);m(p,h),v=v||f,x=x||$}!n&&O&&L&&!l(i,o,u,S)&&(m(f,o),b=b||C)})),x&&!$(p)&&g((t=>p.reduce(((e,n)=>(m(e,T(t,n)),k(n,t)?m(e,n):e)),[]))),n?(!s&&v&&o(!1),[!1]):!$(f)||b?(!s&&o(f,b),[f,b]):void 0},x=new tt((t=>v(t)));return x.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:n,childList:n,characterData:n}),i=!0,[()=>{i&&(p(),x.disconnect(),i=!1)},()=>{if(i){f.m();const t=x.takeRecords();return!$(t)&&v(t,!0)}}]},dn=`[${Ft}]`,un=`.${Ut}`,hn=["tabindex"],fn=["wrap","cols","rows"],pn=["id","class","style","open"],gn=(e,o,r)=>{let i,s,l;const[,c]=o,{K:u,Z:p,nt:g,ct:w,X:b,it:x,lt:$}=e,{A:O,B:S}=De(),[B]=n({u:ht,o:{w:0,h:0}},(()=>{const t=x(te,Kt),e=x(Gt,""),n=e&&P(p),o=e&&z(p);$(te,Kt),$(Gt,"");const r=Ct(g),i=Ct(p),s=Bt(p);return $(te,Kt,t),$(Gt,"",e),P(p,n),z(p,o),{w:i.w+r.w+s.w,h:i.h+r.h+s.h}})),A=w?fn:pn.concat(fn),M=bt(r,{g:()=>i,v:()=>s,p(t,e){const[n]=t,[o]=e;return[L(n).concat(L(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),H=e=>{t(e||hn,(t=>{if(y(hn,t)>-1){const e=E(u,t);d(e)?E(p,t,e):R(p,t)}}))},T=(t,e)=>{const[n,o]=t,i={dt:o};return c({ut:n}),!e&&r(i),i},k=({ft:t,Dt:e,Tt:n})=>{const o=!t||n?r:M;let i=!1;if(e){const[t,n]=e;i=n,c({ht:t})}o({ft:t,gt:i})},D=(t,e)=>{const[,n]=B(),o={_t:n};return n&&!e&&(t?r:M)(o),o},_=(t,e,n)=>{const o={St:e};return e?!n&&M(o):b||H(t),o},I=(g||!S)&&cn(u,T),X=!b&&ln(u,k,{Tt:!0,At:!O}),[N,V]=an(u,!1,_,{Pt:pn,Et:pn.concat(hn)}),F=b&&new nt(k.bind(0,{ft:!0}));return F&&F.observe(u),H(),[()=>{l&&l[0](),I&&I[0](),X&&X(),F&&F.disconnect(),N()},()=>{const t={},e=V(),n=l&&l[1](),o=I&&I[1]();return e&&C(t,_.apply(0,m(e,!0))),n&&C(t,D.apply(0,m(n,!0))),o&&C(t,T.apply(0,m(o,!0))),t},t=>{const[e]=t("updating.ignoreMutation"),[n,o]=t("updating.attributes"),[r,c]=t("updating.elementEvents"),[d,u]=t("updating.debounce"),w=t=>h(e)&&e(t);if((c||o)&&(l&&(l[1](),l[0]()),l=an(g||p,!0,D,{Pt:A.concat(n||[]),Et:A.concat(n||[]),Ht:r,Lt:dn,Rt:(t,e)=>{const{target:n,attributeName:o}=t;return!(e||!o)&&((t,e,n)=>{const o=t&&j(t,e),r=t&&((t,e)=>{const n=e?v(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r||o!==t&&r!==t&&j(j(t,n),e)===o)})(n,dn,un)||!!j(n,`.${ce}`)||!!w(t)}})),u)if(M.m(),f(d)){const t=d[0],e=d[1];i=!!a(t)&&t,s=!!a(e)&&e}else a(d)?(i=d,s=!1):(i=!1,s=!1)}]},wn={x:0,y:0},bn={tt:{t:0,r:0,b:0,l:0},vt:!1,H:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Ct:wn,xt:wn,yt:{x:"hidden",y:"hidden"},$t:{x:!1,y:!1},ut:!1,ht:!1},vn="touchstart mouseenter",yn="touchend touchcancel mouseleave",mn=(t,e)=>Pt(t,"mousedown",Pt.bind(0,e,"click",zt,{$:!0,C:!0}),{C:!0}),xn=(n,o)=>{const{Y:r}=De(),{scrollbarsSlot:i}=r(),{et:s,J:l,K:c,Z:a,rt:d}=o,u=d?null:n.scrollbarsSlot,h=Ie([l,c,a],(()=>c),i,u),f=(e,n,o,r)=>{const i=o?dt:at;t(e,(t=>{i((r||wt)(t)||t.jt,n)}))},p=(n,o)=>{t(n,(t=>{const[n,r]=o(t);e(n,r)}))},g=[],w=[],b=[],v=f.bind(0,w),y=f.bind(0,b),x=t=>{const e=t?ae:de,n=t?w:b,o=$(n)?ge:"",r=W(`${ce} ${e} ${o}`),i=W(ue),l=W(he),c={jt:r,Yt:i,qt:l};return X(r,i),X(i,l),m(n,c),m(g,[F.bind(0,r),Pt(r,vn,(()=>{v(we,!0),y(we,!0)})),Pt(r,yn,(()=>{v(we),y(we)})),mn(r,s)]),c},S=x.bind(0,!0),L=x.bind(0,!1);return S(),L(),[{Ft:{Gt:w,Nt:S,Ut:v,Wt:p.bind(0,w)},Xt:{Gt:b,Nt:L,Ut:y,Wt:p.bind(0,b)}},()=>{X(h,w[0].jt),X(h,b[0].jt),it((()=>{v(ge),y(ge)}),300)},O.bind(0,g)]},{min:$n}=Math,On=t=>{let e;const n=t?it:rt,o=t?st:ot;return[r=>{o(e),e=n(r,h(t)?t():t)},()=>o(e)]},Sn=(t,e,n)=>{const{xt:o,Ct:r}=e,i=n?"x":"y",s=r[i],l=o[i],c=$n(1,s/(s+l));t((t=>[t.qt,{[n?"width":"height"]:`${(100*c).toFixed(3)}%`}]))},Ln=new Set,Cn=new WeakMap,Bn=(e,n,o)=>{let r=!1;const{F:i,j:s}=De(),c=$e(),a=b(e),d=a?e:e.target,f=(t=>Cn.get(t))(d);if(f)return f;const p=c[Oe],g=t=>{const e=t||{},n=p&&p.O;return n?n(e,!0):e},w=C({},i(),g(n)),[v,y,m]=Dt(o),[x,$,S]=((e,n)=>{const o=jt(n,{}),r=It(bn),[i,s,l]=Dt(),[c]=r,[a,d,u]=Ve(e),h=((e,n)=>{const{Z:o}=e,{A:r,T:i,B:s}=De(),l=!r&&(i.x||i.y),c=[Fe(e,n),We(e,n),en(e,n)];return(e,n,r)=>{const i=nn(C({ft:!1,wt:!1,gt:!1,dt:!1,zt:!1,It:!1,Ot:!1,St:!1,_t:!1},n),{},r),a=l||!s,d=a&&P(o),u=a&&z(o);let h=i;return t(c,(t=>{h=nn(h,t(h,e,!!r)||{},r)})),P(o,d),z(o,u),h}})(a,r),f=(t,e,n)=>{const o=L(t).some((e=>t[e]));(o||!B(e)||n)&&l("u",[t,e,n])},[p,g,w]=gn(a,r,(t=>{f(h(o,t),{},!1)})),b=c.bind(0);return b.Vt=t=>{i("u",t)},b.kt=d,b.Bt=a,[(t,e)=>{const o=jt(n,t,e);w(o),f(h(o,g(),e),t,!!e)},b,()=>{s(),p(),u()}]})(e,w),[A,E,M]=((t,e,n)=>{let o,r,i,s,l,c=0;const a=It({}),[d]=a,[u,h]=On(),[f,p]=On(),[g,w]=On(100),[b,v]=On(100),[y,m]=On((()=>c)),[x,$,S]=xn(t,n.Bt),{K:L,Z:C}=n.Bt,{Ft:B,Xt:A}=x,{Ut:E,Wt:M}=B,{Ut:R,Wt:P}=A,z=(t,e)=>{if(m(),t)E(be),R(be);else{const t=()=>{E(be,!0),R(be,!0)};c>0&&!e?y(t):t()}},H=()=>{s=r,s&&z(!0)},T=[w,m,v,p,h,S,Pt(L,"mouseover",H,{$:!0}),Pt(L,"mouseenter",H),Pt(L,"mouseleave",(()=>{s=!1,r&&z(!1)})),Pt(L,"mousemove",(()=>{o&&u((()=>{w(),z(!0),b((()=>{o&&z(!1)}))}))})),Pt(C,"scroll",(()=>{i&&f((()=>{z(!0),g((()=>{i&&!s&&z(!1)}))}))}))],k=d.bind(0);return k.Bt=x,k.kt=$,[(t,s,a)=>{const{zt:d,It:u,Ot:h}=a,f=jt(e,t,s),p=n(),[g,w]=f("scrollbars.theme"),[b,v]=f("scrollbars.visibility"),[y,m]=f("scrollbars.autoHide"),[x]=f("scrollbars.autoHideDelay");f("scrollbars.dragScrolling"),f("scrollbars.touchSupport");const $=d||u,O=(t,e)=>{const n="visible"===b||"auto"===b&&"scroll"===t;return e(fe,n),n};if(c=x,h||v){const{yt:t}=p,e=O(t.x,E),n=O(t.y,R),o=e&&n;E(pe,!o),R(pe,!o)}w&&(E(l),R(l),E(g,!0),R(g,!0),l=g),m&&(o="move"===y,r="leave"===y,i="never"!==y,z(!i,!0)),$&&(Sn(M,p,!0),Sn(P,p))},k,O.bind(0,T)]})(e,w,$),R=(t,e)=>{x(t,!!e)},H=s(R.bind(0,{},!0)),T=t=>{(t=>{Cn.delete(t),Ln.delete(t)})(d),H(),M(),S(),r=!0,m("destroyed",[k,!!t]),y()},k={options(t){if(t){const e=me(w,g(t));B(e)||(C(w,e),R(e))}return C({},w)},on:v,off:(t,e)=>{t&&e&&y(t,e)},state(){const{Ct:t,xt:e,yt:n,$t:o,tt:i,vt:s}=$();return C({},{overflowEdge:t,overflowAmount:e,overflowStyle:n,hasOverflow:o,padding:i,paddingAbsolute:s,destroyed:r})},elements(){const{J:t,K:e,tt:n,Z:o,nt:r}=$.Bt;return C({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update:t=>(R({},t),k),destroy:T.bind(0)};return $.Vt(((t,e,n)=>{A(e,n,t)})),t(L(c),(t=>{const e=c[t];h(e)&&e(Bn,k)})),((t,e)=>{const{nativeScrollbarsOverlaid:n,body:o}=t||{},{W:r,X:i}=e,{Y:s,T:c}=De(),{nativeScrollbarsOverlaid:a,body:d}=s().cancel,h=null!=n?n:a,f=u(o)||l(o)?o:d,p=(c.x||c.y)&&h,g=r&&(l(f)?!i:f);return!!p||!!g})(!a&&e.cancel,$.Bt)?(T(!0),k):($.kt(),E.kt(),((t,e)=>{Cn.set(t,e),Ln.add(t)})(d,k),m("initialized",[k]),$.Vt(((t,e,n)=>{const{ft:o,gt:r,dt:i,zt:s,It:l,Ot:c,_t:a,St:d}=t;m("updated",[k,{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowEdgeChanged:s,overflowAmountChanged:l,overflowStyleChanged:c,contentMutation:a,hostMutation:d},changedOptions:e,force:n}])})),k.update(!0))};Bn.plugin=e=>{t(f(e)?e:[e],(e=>{t(L(e),(t=>{xe[t]=e[t]}))}))},Bn.env=()=>{const{V:t,T:e,A:n,k:o,B:r,D:i,N:s,U:l,Y:c,q:a,F:d,G:u}=De();return C({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,staticDefaultInitialization:s,staticDefaultOptions:l,getDefaultInitialization:c,setDefaultInitialization:a,getDefaultOptions:d,setDefaultOptions:u})};export{Bn as OverlayScrollbars,Pe as scrollbarsHidingPlugin,Be as sizeObserverPlugin}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 57e1666..917419b 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -1877,15 +1877,18 @@ u(); } } - var f = qr(e, i, (function(r) { + var f = function listener(r) { if (t) { - f(); + Fr(e, i, listener); n.delete(e); } else { a(r); } - })); - n.set(e, [ i, f ]); + }; + qr(e, i, f); + n.set(e, [ i, function() { + return Fr(e, i, f); + } ]); })); })); } diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index b6cf5bb..7dac995 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/utils/array.ts","../src/support/dom/style.ts","../src/support/cache.ts","../src/support/utils/types.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/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/plugins/plugins.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/plugins/optionsValidationPlugin/validation.ts","../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | false | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | false | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | false | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | false | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n 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: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\n\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: CreateCache = (\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache => {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\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 const isArrayLike = (obj: any): obj is ArrayLike => {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const 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 const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\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};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: 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 const 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 { from } from 'support/utils/array';\r\nimport { isNull, isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): T;\r\n (elm: HTMLElement | false | null | undefined, value: T | false | null): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T | false | null): T | void;\r\n};\r\n\r\nconst getSetProp = (\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string | false | null\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && !isNull(value) && value !== false && (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 const attr = ((\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}) as Attr;\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n if (value) {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n }\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(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 | false | null | undefined, 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 const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\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 const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\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 const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Node | Element | Node | false | null | undefined;\r\ntype OutputElementType = Node | Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween, closest };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | 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 = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): 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 = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor =\r\n jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\nexport const setT = window.setTimeout as (handler: TimerHandler, timeout?: number) => number;\r\nexport const clearT = window.clearTimeout as (id?: number) => void;\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\ntype ClassContainingElement = Node | Element | false | null | undefined;\r\ntype ClassName = string | false | null | undefined;\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: ClassContainingElement,\r\n className: ClassName,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n const classList = elm && (elm as Element).classList;\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (classList && className && 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(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: ClassContainingElement, className: ClassName): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\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: ClassContainingElement, className: ClassName): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\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 * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (elm: ClassContainingElement, className: ClassName): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\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: ClassName, classNameB: ClassName) => {\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","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF, setT, clearT } from 'support/compatibility/apis';\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear: () => void = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (clear !== noop) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | 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 | false | 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 fractional- 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 fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\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 | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEachAndClear } 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() {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) ?? doSupportPassiveEvents;\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 = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) 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 runEachAndClear.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { 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","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from, isEmptyArray } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name]\r\n ) => void;\r\n type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: RemoveEvent = (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void => {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n\r\n const addEvent: AddEvent = (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): (() => void) => {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n };\r\n\r\n const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n args?: EventMap[Name]\r\n ): void => {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [AddEvent, RemoveEvent, TriggerEvent];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { DeepPartial } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: DeepPartial,\r\n force: boolean,\r\n ...args: T\r\n) => void;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup<\r\n DynamicState,\r\n StaticState extends Record = Record,\r\n A extends any[] = []\r\n> = [update: SetupUpdate
, state: (() => DynamicState) & StaticState, destroy: () => void];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: DeepPartial,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\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 dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostScrollbarHidden = 'scrollbarHidden';\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 classNameViewportScrollbarHidden = `${classNameViewport}-scrollbar-hidden`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\nexport const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { DeepPartial, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type ScrollbarVisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type ScrollbarAutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n showNativeOverlaidScrollbars: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n theme: string | null;\r\n visibility: ScrollbarVisibilityBehavior;\r\n autoHide: ScrollbarAutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n showNativeOverlaidScrollbars: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n theme: 'os-theme-dark',\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, DeepPartial } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n DeepPartial, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\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 template The template according to which the options object shall be validated.\r\n * @param options The options object which 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 template: OptionsTemplate,\r\n options: DeepPartial,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: DeepPartial = {};\r\n const optionsCopy: DeepPartial = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = 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 validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\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 * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: DeepPartial,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n Options,\r\n OverflowBehavior,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { DeepPartial } from 'typings';\r\nimport type { Plugin } from 'plugins';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n showNativeOverlaidScrollbars: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n theme: [oTypes.string, oTypes.null], // string || null\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => DeepPartial;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type SizeObserverPluginInstance = {\r\n _: (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean\r\n ) => [appearCallback: () => any, offFns: (() => any)[]];\r\n};\r\n\r\nconst scrollAmount = 3333333;\r\nconst scrollEventName = 'scroll';\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const sizeObserverPlugin: Plugin = {\r\n [sizeObserverPluginName]: {\r\n _: (listenerElement, onSizeChangedCallback, observeAppearChange) => {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallback(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopPropagation(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]\r\n );\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import {\r\n keys,\r\n attr,\r\n WH,\r\n style,\r\n addClass,\r\n removeClass,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n UpdateCache,\r\n XY,\r\n} from 'support';\r\nimport { classNameViewportArrange } from 'classnames';\r\nimport type { StyleObject } from 'typings';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type {\r\n ViewportOverflowState,\r\n GetViewportOverflowState,\r\n HideNativeScrollbars,\r\n} from 'setups/structureSetup/updateSegments/overflowUpdateSegment';\r\nimport type { InternalEnvironment } from 'environment';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type ArrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n) => boolean;\r\n\r\nexport type UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nexport type UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n) => UndoViewportArrangeResult;\r\n\r\nexport type ScrollbarsHidingPluginInstance = {\r\n _createUniqueViewportArrangeElement(env: InternalEnvironment): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: boolean,\r\n flexboxGlue: boolean,\r\n viewport: HTMLElement,\r\n viewportArrange: HTMLStyleElement | false | null | undefined,\r\n getState: () => StructureSetupState,\r\n getViewportOverflowState: GetViewportOverflowState,\r\n hideNativeScrollbars: HideNativeScrollbars\r\n ): [ArrangeViewport, UndoArrangeViewport];\r\n _envWindowZoom(): (\r\n envInstance: InternalEnvironment,\r\n updateNativeScrollbarSizeCache: UpdateCache>,\r\n triggerEvent: () => void\r\n ) => void;\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst { round, abs } = Math;\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\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n flexboxGlue,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport: ArrangeViewport = (\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n directionIsRTL\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\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 viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (viewportArrange) {\r\n const { sheet } = viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange: UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n viewportOverflowState?\r\n ) => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(viewport, classNameViewportArrange);\r\n\r\n if (!flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(viewport, prevStyle);\r\n addClass(viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return [arrangeViewport, undoViewportArrange];\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n\r\n return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {\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) {\r\n return;\r\n }\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 && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent();\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { DeepPartial } from 'typings';\r\nimport { DefaultInitialization } from 'initialization';\r\nimport { getPlugins, ScrollbarsHidingPluginInstance, scrollbarsHidingPluginName } from 'plugins';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _staticDefaultInitialization: DefaultInitialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): DefaultInitialization;\r\n _setDefaultInitialization(newInitialization: DeepPartial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: DeepPartial): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n clear && removeElements(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarHidden);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = 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 const revertFbxGlueMax = 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 revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache(\r\n {\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n getNativeScrollbarSize.bind(0, body, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const defaultInitialization = {\r\n padding: !nativeScrollbarsHiding,\r\n content: false,\r\n cancel: {\r\n nativeScrollbarsOverlaid: true,\r\n body: null,\r\n },\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getDefaultInitialization: assignDeep.bind(\r\n 0,\r\n {} as DefaultInitialization,\r\n defaultInitialization\r\n ),\r\n _setDefaultInitialization(newInitializationStrategy) {\r\n assignDeep(defaultInitialization, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _staticDefaultInitialization: assignDeep({}, defaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let resizeFn: undefined | ReturnType;\r\n window.addEventListener('resize', () => {\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n\r\n resizeFn = resizeFn || (scrollbarsHidingPlugin && scrollbarsHidingPlugin._envWindowZoom());\r\n resizeFn && resizeFn(env, updateNativeScrollbarSizeCache, triggerEvent.bind(0, '_'));\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isBoolean, isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n DefaultStructureInitialization,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n DefaultScrollbarsInitialization,\r\n} from 'setups/scrollbarsSetup';\r\nimport { getEnvironment } from 'environment';\r\nimport { DeepPartial } from 'typings';\r\nimport { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type CancelInitialization = {\r\n cancel: {\r\n nativeScrollbarsOverlaid: boolean | undefined;\r\n body: boolean | null | undefined;\r\n };\r\n};\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization &\r\n ScrollbarsInitialization &\r\n DeepPartial;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type DefaultInitialization = DefaultStructureInitialization &\r\n DefaultScrollbarsInitialization &\r\n CancelInitialization;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type DefaultInitializtationElement = Exclude;\r\n\r\nexport type FallbackInitializtationElement<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackStaticInitializationElement: FallbackInitializtationElement,\r\n defaultStaticInitializationElementStrategy?: DefaultInitializtationElement,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(defaultStaticInitializationElementStrategy, args),\r\n args\r\n ) || fallbackStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackDynamicInitializationElement: FallbackInitializtationElement,\r\n defaultDynamicInitializationElementStrategy?: DefaultInitializtationElement,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n defaultDynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? fallbackDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nconst cancelInitialization = (\r\n cancelInitializationValue: DeepPartial | false | null | undefined,\r\n structureSetupElements: StructureSetupElementsObj\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _isBody, _viewportIsTarget } = structureSetupElements;\r\n const { _getDefaultInitialization, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isBoolean(body) || isNull(body) ? body : defaultbody;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n _isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_viewportIsTarget\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement, cancelInitialization };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEachAndClear,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n hasOwnProperty,\r\n noop,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n InitializationTargetObject,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false | null | undefined;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const env = getEnvironment();\r\n const { _getDefaultInitialization, _nativeScrollbarsHiding } = env;\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\r\n const {\r\n host: defaultHostInitializationStrategy,\r\n viewport: defaultViewportInitializationStrategy,\r\n padding: defaultPaddingInitializationStrategy,\r\n content: defaultContentInitializationStrategy,\r\n } = _getDefaultInitialization();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const {\r\n host: hostInitializationStrategy,\r\n padding: paddingInitializationStrategy,\r\n viewport: viewportInitializationStrategy,\r\n content: contentInitializationStrategy,\r\n } = targetStructureInitialization;\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const isBody = targetElement === ownerDocument.body;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = isBody\r\n ? _nativeScrollbarsHiding\r\n : !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarsHiding;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n defaultViewportInitializationStrategy,\r\n isBody && !hasOwnProperty(targetStructureInitialization, 'viewport')\r\n ? targetElement\r\n : viewportInitializationStrategy\r\n ),\r\n staticInitializationElement(createNewDiv, defaultViewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n singleElmSupport ? true : potentialViewport !== targetElement\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n defaultHostInitializationStrategy,\r\n hostInitializationStrategy\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultPaddingInitializationStrategy,\r\n paddingInitializationStrategy\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultContentInitializationStrategy,\r\n contentInitializationStrategy\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n const removeHtmlClass = isBody\r\n ? addClass(parent(targetElement), classNameViewportScrollbarHidden)\r\n : noop;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHtmlClass();\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarHidden));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEachAndClear.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\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 attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportScrollbarHidden,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostScrollbarHidden,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst max0 = max.bind(0, 0);\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.h),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\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 structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowEdge, getCurrentOverflowEdgeCache] = createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState: GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars,\r\n viewportStyleObj?\r\n ) => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarsHiding && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarsHiding ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarsOverlaid.x, _nativeScrollbarsSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarsOverlaid.y, _nativeScrollbarsSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\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 hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\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: HideNativeScrollbars = (\r\n viewportOverflowState,\r\n directionIsRTL,\r\n viewportArrange,\r\n viewportStyleObj\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n const [arrangeViewport, undoViewportArrange] = scrollbarsHidingPlugin\r\n ? scrollbarsHidingPlugin._overflowUpdateSegment(\r\n doViewportArrange,\r\n _flexboxGlue,\r\n _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('showNativeOverlaidScrollbars');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n let overflowEdgeCache = getCurrentOverflowEdgeCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarHidden,\r\n dataValueHostScrollbarHidden,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n const overflowAmountScrollSize = {\r\n w: max0(max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n arrangedViewportClientSize.h +\r\n max0(viewportclientSize.h - viewportScrollSize.h) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowEdgeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowEdgeChanged: overflowEdgeChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createOverflowUpdateSegment,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowEdgeChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdateSegment(structureSetupElements, state),\r\n createPaddingUpdateSegment(structureSetupElements, state),\r\n createOverflowUpdateSegment(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowEdgeChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\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 let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'scroll', (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopPropagation(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'animationstart', 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 runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\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 type TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n destroy: () => void,\r\n update: () => void | Parameters\r\n];\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH,\r\n fromRecords?: true\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n !fromRecords && onTrinsicChangedCallback(heightIntrinsic);\r\n return [heightIntrinsic];\r\n }\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n entries: IntersectionObserverEntry[],\r\n fromRecords?: true\r\n ) => {\r\n if (entries && entries.length > 0) {\r\n return triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n (entries) => intersectionObserverCallback(entries),\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance!.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n () => {\r\n if (intersectionObserverInstance) {\r\n return intersectionObserverCallback(intersectionObserverInstance.takeRecords(), true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [\r\n destroy: () => void,\r\n update: () => void | false | Parameters>\r\n];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const debouncedEventContentChange = debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n );\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (\r\n mutations: MutationRecord[],\r\n fromRecords?: true\r\n ): void | Parameters> => {\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 =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] as Parameters>;\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n !fromRecords &&\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n return [targetChangedAttrs, targetStyleChanged] as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!((mutations) =>\r\n observerCallback(mutations)\r\n );\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n debouncedEventContentChange._flush();\r\n\r\n const records = mutationObserver.takeRecords();\r\n return !isEmptyArray(records) && observerCallback(records, true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n closest,\r\n assignDeep,\r\n push,\r\n scrollLeft,\r\n scrollTop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n classNameScrollbar,\r\n classNameViewportArrange,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n destroy: () => void,\r\n updateObservers: () => Partial,\r\n updateObserversOptions: StructureSetupObserversUpdate\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const hasOver = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n const hasVpStyle = _viewportHasClass(classNameViewportArrange, '');\r\n const scrollOffsetX = hasVpStyle && scrollLeft(_viewport);\r\n const scrollOffsetY = hasVpStyle && scrollTop(_viewport);\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n _viewportAddRemoveClass(classNameViewportArrange, '');\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, hasOver);\r\n _viewportAddRemoveClass(classNameViewportArrange, '', hasVpStyle);\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues, fromRecords?: true) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: Partial = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && structureSetupUpdate(updateHints);\r\n return updateHints;\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean, fromRecords?: true) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n const updateHints: Partial = {\r\n _contentMutation: contentSizeChanged,\r\n };\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n !fromRecords && updateFn(updateHints);\r\n }\r\n return updateHints;\r\n };\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ) => {\r\n const updateHints: Partial = { _hostMutation: targetStyleChanged };\r\n if (targetStyleChanged) {\r\n !fromRecords && structureSetupUpdateWithDebouncedAdaptiveUpdateHints(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n return updateHints;\r\n };\r\n\r\n const trinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n }\r\n );\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n trinsicObserver && trinsicObserver[0](); // destroy\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[1](); // update\r\n const trinsicUpdateResult = trinsicObserver && trinsicObserver[1](); // update\r\n\r\n if (hostUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onHostMutation.apply(\r\n 0,\r\n push(hostUpdateResult, true) as [\r\n ...updateResult: typeof hostUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (contentUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onContentMutation.apply(\r\n 0,\r\n push(contentUpdateResult, true) as [\r\n ...updateResult: typeof contentUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (trinsicUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onTrinsicChanged.apply(\r\n 0,\r\n push(trinsicUpdateResult as any[], true) as [\r\n ...updateResult: typeof trinsicUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n\r\n return updateHints;\r\n },\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub, isEmptyObject, keys } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { DeepPartial, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowEdge: XY;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [updateHints: StructureSetupUpdateHints, changedOptions: DeepPartial, force: boolean];\r\n};\r\n\r\nconst initialXYNumber = { x: 0, y: 0 };\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowEdge: initialXYNumber,\r\n _overflowAmount: initialXYNumber,\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const triggerUpdateEvent: (...args: StructureSetupEventMap['u']) => void = (\r\n updateHints,\r\n changedOptions,\r\n force\r\n ) => {\r\n const truthyUpdateHints = keys(updateHints).some((key) => updateHints[key]);\r\n\r\n if (truthyUpdateHints || !isEmptyObject(changedOptions) || force) {\r\n triggerEvent('u', [updateHints, changedOptions, force]);\r\n }\r\n };\r\n const [destroyObservers, updateObservers, updateObserversOptions] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerUpdateEvent(updateStructure(checkOptionsFallback, updateHints), {}, false);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObserversOptions(checkOption);\r\n triggerUpdateEvent(\r\n updateStructure(checkOption, updateObservers(), force),\r\n changedOptions,\r\n !!force\r\n );\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n each,\r\n isEmptyArray,\r\n noop,\r\n on,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\r\n stopPropagation,\r\n style,\r\n} from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n classNamesScrollbarInteraction,\r\n classNamesScrollbarTransitionless,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n DefaultScrollbarsInitialization,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElement {\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _addRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => void;\r\n _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n // _removeClass: (classNames: string) => void;\r\n /*\r\n _addEventListener: () => void;\r\n _removeEventListener: () => void;\r\n */\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst interactionStartEventNames = 'touchstart mouseenter';\r\nconst interactionEndEventNames = 'touchend touchcancel mouseleave';\r\nconst stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>\r\n on(\r\n scrollbar,\r\n 'mousedown',\r\n on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),\r\n { _capture: true }\r\n );\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization } = getEnvironment();\r\n const { scrollbarsSlot: defaultScrollbarSlot } =\r\n _getDefaultInitialization() as DefaultScrollbarsInitialization;\r\n const { _documentElm, _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const scrollbarSlot = _targetIsElm ? null : (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n defaultScrollbarSlot,\r\n scrollbarSlot\r\n );\r\n const scrollbarsAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action((elm || noop)(scrollbarStructure) || scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const scrollbarsHandleStyle = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => {\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n const [elm, styles] = elmStyle(scrollbarStructure);\r\n style(elm, styles);\r\n });\r\n };\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const addRemoveClassHorizontal = scrollbarsAddRemoveClass.bind(0, horizontalScrollbars);\r\n const addRemoveClassVertical = scrollbarsAddRemoveClass.bind(0, verticalScrollbars);\r\n const generateScrollbarDOM = (horizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = horizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;\r\n const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';\r\n const scrollbar = createDiv(\r\n `${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass}`\r\n );\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n push(arrToPush, result);\r\n push(destroyFns, [\r\n removeElements.bind(0, scrollbar),\r\n on(scrollbar, interactionStartEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction, true);\r\n addRemoveClassVertical(classNamesScrollbarInteraction, true);\r\n }),\r\n on(scrollbar, interactionEndEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction);\r\n addRemoveClassVertical(classNamesScrollbarInteraction);\r\n }),\r\n stopRootClickPropagation(scrollbar, _documentElm),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = generateScrollbarDOM.bind(0, true);\r\n const generateVerticalScrollbarStructure = generateScrollbarDOM.bind(0, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n setT(() => {\r\n addRemoveClassHorizontal(classNamesScrollbarTransitionless);\r\n addRemoveClassVertical(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassHorizontal,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassVertical,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, verticalScrollbars),\r\n },\r\n },\r\n appendElements,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElement,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOSOptions,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { OverflowStyle, StyleObject } from 'typings';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nconst { min } = Math;\r\nconst createSelfCancelTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nconst refreshScrollbarHandleLength = (\r\n setStyleFn: ScrollbarsSetupElement['_handleStyle'],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n const handleRatio = min(1, viewportSize / (viewportSize + overflowAmount));\r\n\r\n setStyleFn((structure) => [\r\n structure._handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(handleRatio * 100).toFixed(3)}%`,\r\n },\r\n ]);\r\n};\r\n\r\nconst refreshScrollbarHandlePosition = (\r\n setStyleFn: (styles: StyleObject) => void,\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n /*\r\n //measure the handle length to respect min & max length\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\r\n var handleTrackDiff = trackLength - handleLength;\r\n var handleCSS = {};\r\n var transformOffset;\r\n var translateValue;\r\n\r\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\r\n // because its a bit behind during the small delay when content size updates\r\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\r\n var maxScroll =\r\n (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] -\r\n _viewportElementNative['client' + scrollbarVars._Width_Height]) *\r\n (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\r\n var getScrollRatio = function (base) {\r\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\r\n };\r\n var getHandleOffset = function (scrollRatio) {\r\n var offset = handleTrackDiff * scrollRatio;\r\n offset = isNaN(offset) ? 0 : offset;\r\n offset =\r\n isRTLisHorizontal && !_rtlScrollBehavior.i ? trackLength - handleLength - offset : offset;\r\n offset = MATH.max(0, offset);\r\n return offset;\r\n };\r\n var scrollRatio = getScrollRatio(nativeScroll);\r\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\r\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\r\n var snappedHandleOffset = getHandleOffset(scrollRatio);\r\n\r\n scrollbarVarsInfo._maxScroll = maxScroll;\r\n scrollbarVarsInfo._currentScroll = nativeScroll;\r\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\r\n\r\n if (_supportTransform) {\r\n transformOffset = isRTLisHorizontal\r\n ? -(trackLength - handleLength - handleOffset)\r\n : handleOffset; //in px\r\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\r\n translateValue = isHorizontal\r\n ? strTranslateBrace + transformOffset + 'px, 0)'\r\n : strTranslateBrace + '0, ' + transformOffset + 'px)';\r\n\r\n handleCSS[strTransform] = translateValue;\r\n\r\n //apply or clear up transition\r\n if (_supportTransition)\r\n handleCSS[strTransition] =\r\n transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1\r\n ? getCSSTransitionString(scrollbarVars._handle) +\r\n ', ' +\r\n (strTransform + _strSpace + transitionDuration + 'ms')\r\n : _strEmpty;\r\n } else handleCSS[scrollbarVars._left_top] = handleOffset;\r\n\r\n //only apply css if offset has changed and overflow exists.\r\n if (!nativeOverlayScrollbarsAreActive()) {\r\n scrollbarVars._handle.css(handleCSS);\r\n\r\n //clear up transition\r\n if (_supportTransform && _supportTransition && transition) {\r\n scrollbarVars._handle.one(_strTransitionEndEvent, function () {\r\n if (!_destroyed) scrollbarVars._handle.css(strTransition, _strEmpty);\r\n });\r\n }\r\n }\r\n\r\n scrollbarVarsInfo._handleOffset = handleOffset;\r\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\r\n scrollbarVarsInfo._trackLength = trackLength;\r\n */\r\n};\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup => {\r\n let autoHideIsMove: boolean;\r\n let autoHideIsLeave: boolean;\r\n let autoHideNotNever: boolean;\r\n let mouseInHost: boolean | undefined;\r\n let prevTheme: string | null | undefined;\r\n let globalAutoHideDelay = 0;\r\n\r\n const state = createState({});\r\n const [getState] = state;\r\n const [requestMouseMoveAnimationFrame, cancelMouseMoveAnimationFrame] = createSelfCancelTimeout();\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = createSelfCancelTimeout();\r\n const [scrollTimeout, clearScrollTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideMoveTimeout, clearAutoHideTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideTimeout, clearAutoTimeout] = createSelfCancelTimeout(() => globalAutoHideDelay);\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupState._elements\r\n );\r\n const { _host, _viewport } = structureSetupState._elements;\r\n const { _horizontal, _vertical } = elements;\r\n const { _addRemoveClass: addRemoveClassHorizontal, _handleStyle: styleHorizontal } = _horizontal;\r\n const { _addRemoveClass: addRemoveClassVertical, _handleStyle: styleVertical } = _vertical;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden, true);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden, true);\r\n };\r\n if (globalAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const onHostMouseEnter = () => {\r\n mouseInHost = autoHideIsLeave;\r\n mouseInHost && manageScrollbarsAutoHide(true);\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearScrollTimeout,\r\n clearAutoTimeout,\r\n clearAutoHideTimeout,\r\n cancelScrollAnimationFrame,\r\n cancelMouseMoveAnimationFrame,\r\n destroyElements,\r\n\r\n on(_host, 'mouseover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'mouseenter', onHostMouseEnter),\r\n on(_host, 'mouseleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'mousemove', () => {\r\n autoHideIsMove &&\r\n requestMouseMoveAnimationFrame(() => {\r\n clearScrollTimeout();\r\n manageScrollbarsAutoHide(true);\r\n auotHideMoveTimeout(() => {\r\n autoHideIsMove && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n on(_viewport, 'scroll', () => {\r\n autoHideNotNever &&\r\n requestScrollAnimationFrame(() => {\r\n manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n ];\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force, structureUpdateHints) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n\r\n const [theme, themeChanged] = checkOption('scrollbars.theme');\r\n const [visibility, visibilityChanged] =\r\n checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] =\r\n checkOption('scrollbars.autoHide');\r\n const [autoHideDelay] = checkOption('scrollbars.autoHideDelay');\r\n const [dragScrolling, dragScrollingChanged] = checkOption(\r\n 'scrollbars.dragScrolling'\r\n );\r\n const [touchSupport, touchSupportChanged] = checkOption('scrollbars.touchSupport');\r\n\r\n const updateHandle = _overflowEdgeChanged || _overflowAmountChanged;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged;\r\n\r\n const setScrollbarVisibility = (\r\n overflowStyle: OverflowStyle,\r\n addRemoveClass: (classNames: string, add?: boolean) => void\r\n ) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n addRemoveClass(classNamesScrollbarVisible, isVisible);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (updateVisibility) {\r\n const { _overflowStyle } = currStructureSetupState;\r\n\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, addRemoveClassHorizontal);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, addRemoveClassVertical);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n addRemoveClassHorizontal(classNamesScrollbarCornerless, !hasCorner);\r\n addRemoveClassVertical(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (themeChanged) {\r\n addRemoveClassHorizontal(prevTheme);\r\n addRemoveClassVertical(prevTheme);\r\n\r\n addRemoveClassHorizontal(theme, true);\r\n addRemoveClassVertical(theme, true);\r\n prevTheme = theme;\r\n }\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideNotNever = autoHide !== 'never';\r\n manageScrollbarsAutoHide(!autoHideNotNever, true);\r\n }\r\n if (updateHandle) {\r\n refreshScrollbarHandleLength(styleHorizontal, currStructureSetupState, true);\r\n refreshScrollbarHandleLength(styleVertical, currStructureSetupState);\r\n }\r\n },\r\n scrollbarsSetupState,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n Plugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { DeepPartial, OverflowStyle } from 'typings';\r\nimport {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n DefaultInitialization,\r\n cancelInitialization,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: DeepPartial,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n staticDefaultInitialization: DefaultInitialization;\r\n staticDefaultOptions: Options;\r\n\r\n getDefaultInitialization(): DefaultInitialization;\r\n setDefaultInitialization(newDefaultInitialization: DeepPartial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: DeepPartial): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowEdge: XY;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowEdgeChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: DeepPartial;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, canceled: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: DeepPartial): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const { _getDefaultOptions, _addListener: addEnvListener } = getEnvironment();\r\n const plugins = getPlugins();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: DeepPartial) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState\r\n );\r\n const update = (changedOptions: DeepPartial, force?: boolean) => {\r\n updateStructure(changedOptions, !!force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (canceled?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!canceled]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: DeepPartial) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force: boolean) => {\r\n updateScrollbars(changedOptions, force, updateHints);\r\n });\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n if (cancelInitialization(!targetIsElement && target.cancel, structureState._elements)) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowEdgeChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowEdgeChanged: _overflowEdgeChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","setT","setTimeout","clearT","clearTimeout","rnothtmlwhite","classListAction","className","action","classList","clazz","classes","match","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","maxTimeoutId","prevArguments","latestArguments","clear","_timeout","_maxDelay","_mergeParams","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","clearTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","timeoutId","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","_ref","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostScrollbarHidden","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarHidden","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarAutoHidden","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","showNativeOverlaidScrollbars","updating","elementEvents","attributes","ignoreMutation","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","_validateRecursive","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","_validateOptions","_optionsValidationPlu","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","_sizeObserverPlugin","contentArrangeCounter","abs","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","env","_nativeScrollbarsHiding","_nativeScrollbarsOverlaid","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","_getState","_viewportPaddingStyle","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","finalViewportOverflowState","_getState2","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_envWindowZoom","size","dpr","envInstance","updateNativeScrollbarSizeCache","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","_updateNativeScrollba","scrollbarSize","scrollbarSizeChanged","_nativeScrollbarsSize","_scrollbarsHidingPlug","environmentInstance","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","nativeScrollbarsOverlaid","defaultInitialization","padding","content","cancel","defaultDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElementStrategy","dynamicInitializationElementValue","cancelInitialization","cancelInitializationValue","structureSetupElements","_isBody","_viewportIsTarget","_getEnvironment","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getDefaultInitializa","defaultHostInitializationStrategy","host","defaultViewportInitializationStrategy","defaultPaddingInitializationStrategy","defaultContentInitializationStrategy","targetIsElm","targetStructureInitialization","hostInitializationStrategy","paddingInitializationStrategy","viewportInitializationStrategy","contentInitializationStrategy","targetElement","isTextarea","ownerDocument","isBody","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_windowElm","_documentElm","_isTextarea","_targetIsElm","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","removeHtmlClass","createTrinsicUpdateSegment","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_nativeScrollbarStyling","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","max0","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdateSegment","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowEdge","_createCache4","getCurrentOverflowEdgeCache","updateOverflowStyleCache","_createCache5","fixFlexboxGlue","heightIntrinsic","_overflowScroll","hostClientSize","isContentBox","subtractXScrollbar","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","nativeScrollbarSize","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","_getStatePerAxis","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","_getStatePerAxis2","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","_setAxisOverflowStyle","visibleBehaviorX","_setAxisOverflowStyle2","visibleBehaviorY","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","_hostMutation","_getState3","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmountScrollSize","overflowAmountClientSize","_overflowEdgeCache","overflowEdge","overflowEdgeChanged","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowEdge","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowEdgeChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_ref$_direction","_direction","observeDirectionChange","_ref$_appear","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","_sizeObserverPlugin$_","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","debouncedEventContentChange","_createEventContentCh","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","records","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","hasOver","hasVpStyle","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","contentUpdateResult","trinsicUpdateResult","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","_createStructureSetup2","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","interactionStartEventNames","interactionEndEventNames","stopRootClickPropagation","scrollbar","documentElm","createScrollbarsSetupElements","defaultScrollbarSlot","scrollbarsSlot","scrollbarSlot","evaluatedScrollbarSlot","scrollbarsAddRemoveClass","scrollbarStructures","scrollbarStructure","_scrollbar","scrollbarsHandleStyle","_elmStyle","horizontalScrollbars","verticalScrollbars","addRemoveClassHorizontal","addRemoveClassVertical","generateScrollbarDOM","horizontal","scrollbarClassName","arrToPush","transitionlessClass","track","handle","_track","_handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_horizontal","_scrollbarStructures","_clone","_addRemoveClass","_handleStyle","_vertical","min","createSelfCancelTimeout","id","setTFn","clearTFn","refreshScrollbarHandleLength","setStyleFn","isHorizontal","axis","viewportSize","handleRatio","structure","toFixed","createScrollbarsSetup","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","prevTheme","globalAutoHideDelay","_createSelfCancelTime","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","_createSelfCancelTime2","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","_createSelfCancelTime3","clearScrollTimeout","auotHideMoveTimeout","_createSelfCancelTime4","clearAutoHideTimeout","_createSelfCancelTime5","auotHideTimeout","clearAutoTimeout","_createScrollbarsSetu","styleHorizontal","styleVertical","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","currStructureSetupState","themeChanged","visibilityChanged","autoHideChanged","updateHandle","updateVisibility","setScrollbarVisibility","addRemoveClass","isVisible","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","targetIsElement","instanceTarget","potentialInstance","optionsValidationPlugin","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","canceled","instance","_structureState","pluginInstance","sizeChanged","hostMutation","_getEnvironment2","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","staticDefaultInitialization","staticDefaultOptions","getDefaultInitialization","setDefaultInitialization","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/array.ts","../src/support/dom/style.ts","../src/support/cache.ts","../src/support/utils/types.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/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/plugins/plugins.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/plugins/optionsValidationPlugin/validation.ts","../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | false | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | false | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | false | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | false | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n 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: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\n\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: CreateCache = (\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache => {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\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 const isArrayLike = (obj: any): obj is ArrayLike => {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const 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 const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\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};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: 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 const 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 { from } from 'support/utils/array';\r\nimport { isNull, isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): T;\r\n (elm: HTMLElement | false | null | undefined, value: T | false | null): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T | false | null): T | void;\r\n};\r\n\r\nconst getSetProp = (\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string | false | null\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && !isNull(value) && value !== false && (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 const attr = ((\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}) as Attr;\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n if (value) {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n }\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(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 | false | null | undefined, 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 const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\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 const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\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 const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Node | Element | Node | false | null | undefined;\r\ntype OutputElementType = Node | Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween, closest };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | 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 = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): 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 = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor =\r\n jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\nexport const setT = window.setTimeout as (handler: TimerHandler, timeout?: number) => number;\r\nexport const clearT = window.clearTimeout as (id?: number) => void;\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\ntype ClassContainingElement = Node | Element | false | null | undefined;\r\ntype ClassName = string | false | null | undefined;\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: ClassContainingElement,\r\n className: ClassName,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n const classList = elm && (elm as Element).classList;\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (classList && className && 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(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: ClassContainingElement, className: ClassName): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\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: ClassContainingElement, className: ClassName): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\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 * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (elm: ClassContainingElement, className: ClassName): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\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: ClassName, classNameB: ClassName) => {\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","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF, setT, clearT } from 'support/compatibility/apis';\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear: () => void = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (clear !== noop) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | 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 | false | 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 fractional- 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 fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\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 | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEachAndClear } 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() {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) ?? doSupportPassiveEvents;\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 = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) 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 runEachAndClear.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { 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","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from, isEmptyArray } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name]\r\n ) => void;\r\n type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: RemoveEvent = (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void => {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n\r\n const addEvent: AddEvent = (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): (() => void) => {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n };\r\n\r\n const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n args?: EventMap[Name]\r\n ): void => {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [AddEvent, RemoveEvent, TriggerEvent];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { DeepPartial } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: DeepPartial,\r\n force: boolean,\r\n ...args: T\r\n) => void;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup<\r\n DynamicState,\r\n StaticState extends Record = Record,\r\n A extends any[] = []\r\n> = [update: SetupUpdate
, state: (() => DynamicState) & StaticState, destroy: () => void];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: DeepPartial,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\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 dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostScrollbarHidden = 'scrollbarHidden';\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 classNameViewportScrollbarHidden = `${classNameViewport}-scrollbar-hidden`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\nexport const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { DeepPartial, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type ScrollbarVisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type ScrollbarAutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n showNativeOverlaidScrollbars: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n theme: string | null;\r\n visibility: ScrollbarVisibilityBehavior;\r\n autoHide: ScrollbarAutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n showNativeOverlaidScrollbars: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n theme: 'os-theme-dark',\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, DeepPartial } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n DeepPartial, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\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 template The template according to which the options object shall be validated.\r\n * @param options The options object which 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 template: OptionsTemplate,\r\n options: DeepPartial,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: DeepPartial = {};\r\n const optionsCopy: DeepPartial = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = 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 validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\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 * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: DeepPartial,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n Options,\r\n OverflowBehavior,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { DeepPartial } from 'typings';\r\nimport type { Plugin } from 'plugins';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n showNativeOverlaidScrollbars: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n theme: [oTypes.string, oTypes.null], // string || null\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => DeepPartial;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type SizeObserverPluginInstance = {\r\n _: (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean\r\n ) => [appearCallback: () => any, offFns: (() => any)[]];\r\n};\r\n\r\nconst scrollAmount = 3333333;\r\nconst scrollEventName = 'scroll';\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const sizeObserverPlugin: Plugin = {\r\n [sizeObserverPluginName]: {\r\n _: (listenerElement, onSizeChangedCallback, observeAppearChange) => {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallback(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopPropagation(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]\r\n );\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import {\r\n keys,\r\n attr,\r\n WH,\r\n style,\r\n addClass,\r\n removeClass,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n UpdateCache,\r\n XY,\r\n} from 'support';\r\nimport { classNameViewportArrange } from 'classnames';\r\nimport type { StyleObject } from 'typings';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type {\r\n ViewportOverflowState,\r\n GetViewportOverflowState,\r\n HideNativeScrollbars,\r\n} from 'setups/structureSetup/updateSegments/overflowUpdateSegment';\r\nimport type { InternalEnvironment } from 'environment';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type ArrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n) => boolean;\r\n\r\nexport type UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nexport type UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n) => UndoViewportArrangeResult;\r\n\r\nexport type ScrollbarsHidingPluginInstance = {\r\n _createUniqueViewportArrangeElement(env: InternalEnvironment): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: boolean,\r\n flexboxGlue: boolean,\r\n viewport: HTMLElement,\r\n viewportArrange: HTMLStyleElement | false | null | undefined,\r\n getState: () => StructureSetupState,\r\n getViewportOverflowState: GetViewportOverflowState,\r\n hideNativeScrollbars: HideNativeScrollbars\r\n ): [ArrangeViewport, UndoArrangeViewport];\r\n _envWindowZoom(): (\r\n envInstance: InternalEnvironment,\r\n updateNativeScrollbarSizeCache: UpdateCache>,\r\n triggerEvent: () => void\r\n ) => void;\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst { round, abs } = Math;\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\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n flexboxGlue,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport: ArrangeViewport = (\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n directionIsRTL\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\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 viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (viewportArrange) {\r\n const { sheet } = viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange: UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n viewportOverflowState?\r\n ) => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(viewport, classNameViewportArrange);\r\n\r\n if (!flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(viewport, prevStyle);\r\n addClass(viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return [arrangeViewport, undoViewportArrange];\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n\r\n return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {\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) {\r\n return;\r\n }\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 && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent();\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { DeepPartial } from 'typings';\r\nimport { DefaultInitialization } from 'initialization';\r\nimport { getPlugins, ScrollbarsHidingPluginInstance, scrollbarsHidingPluginName } from 'plugins';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _staticDefaultInitialization: DefaultInitialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): DefaultInitialization;\r\n _setDefaultInitialization(newInitialization: DeepPartial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: DeepPartial): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n clear && removeElements(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarHidden);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = 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 const revertFbxGlueMax = 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 revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache(\r\n {\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n getNativeScrollbarSize.bind(0, body, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const defaultInitialization = {\r\n padding: !nativeScrollbarsHiding,\r\n content: false,\r\n cancel: {\r\n nativeScrollbarsOverlaid: true,\r\n body: null,\r\n },\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getDefaultInitialization: assignDeep.bind(\r\n 0,\r\n {} as DefaultInitialization,\r\n defaultInitialization\r\n ),\r\n _setDefaultInitialization(newInitializationStrategy) {\r\n assignDeep(defaultInitialization, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _staticDefaultInitialization: assignDeep({}, defaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let resizeFn: undefined | ReturnType;\r\n window.addEventListener('resize', () => {\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n\r\n resizeFn = resizeFn || (scrollbarsHidingPlugin && scrollbarsHidingPlugin._envWindowZoom());\r\n resizeFn && resizeFn(env, updateNativeScrollbarSizeCache, triggerEvent.bind(0, '_'));\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isBoolean, isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n DefaultStructureInitialization,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n DefaultScrollbarsInitialization,\r\n} from 'setups/scrollbarsSetup';\r\nimport { getEnvironment } from 'environment';\r\nimport { DeepPartial } from 'typings';\r\nimport { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type CancelInitialization = {\r\n cancel: {\r\n nativeScrollbarsOverlaid: boolean | undefined;\r\n body: boolean | null | undefined;\r\n };\r\n};\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization &\r\n ScrollbarsInitialization &\r\n DeepPartial;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type DefaultInitialization = DefaultStructureInitialization &\r\n DefaultScrollbarsInitialization &\r\n CancelInitialization;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type DefaultInitializtationElement = Exclude;\r\n\r\nexport type FallbackInitializtationElement<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackStaticInitializationElement: FallbackInitializtationElement,\r\n defaultStaticInitializationElementStrategy?: DefaultInitializtationElement,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(defaultStaticInitializationElementStrategy, args),\r\n args\r\n ) || fallbackStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackDynamicInitializationElement: FallbackInitializtationElement,\r\n defaultDynamicInitializationElementStrategy?: DefaultInitializtationElement,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n defaultDynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? fallbackDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nconst cancelInitialization = (\r\n cancelInitializationValue: DeepPartial | false | null | undefined,\r\n structureSetupElements: StructureSetupElementsObj\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _isBody, _viewportIsTarget } = structureSetupElements;\r\n const { _getDefaultInitialization, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isBoolean(body) || isNull(body) ? body : defaultbody;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n _isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_viewportIsTarget\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement, cancelInitialization };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEachAndClear,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n hasOwnProperty,\r\n noop,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n InitializationTargetObject,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false | null | undefined;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const env = getEnvironment();\r\n const { _getDefaultInitialization, _nativeScrollbarsHiding } = env;\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\r\n const {\r\n host: defaultHostInitializationStrategy,\r\n viewport: defaultViewportInitializationStrategy,\r\n padding: defaultPaddingInitializationStrategy,\r\n content: defaultContentInitializationStrategy,\r\n } = _getDefaultInitialization();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const {\r\n host: hostInitializationStrategy,\r\n padding: paddingInitializationStrategy,\r\n viewport: viewportInitializationStrategy,\r\n content: contentInitializationStrategy,\r\n } = targetStructureInitialization;\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const isBody = targetElement === ownerDocument.body;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = isBody\r\n ? _nativeScrollbarsHiding\r\n : !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarsHiding;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n defaultViewportInitializationStrategy,\r\n isBody && !hasOwnProperty(targetStructureInitialization, 'viewport')\r\n ? targetElement\r\n : viewportInitializationStrategy\r\n ),\r\n staticInitializationElement(createNewDiv, defaultViewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n singleElmSupport ? true : potentialViewport !== targetElement\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n defaultHostInitializationStrategy,\r\n hostInitializationStrategy\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultPaddingInitializationStrategy,\r\n paddingInitializationStrategy\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultContentInitializationStrategy,\r\n contentInitializationStrategy\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n const removeHtmlClass = isBody\r\n ? addClass(parent(targetElement), classNameViewportScrollbarHidden)\r\n : noop;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHtmlClass();\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarHidden));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEachAndClear.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\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 attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportScrollbarHidden,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostScrollbarHidden,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst max0 = max.bind(0, 0);\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.h),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\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 structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowEdge, getCurrentOverflowEdgeCache] = createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState: GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars,\r\n viewportStyleObj?\r\n ) => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarsHiding && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarsHiding ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarsOverlaid.x, _nativeScrollbarsSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarsOverlaid.y, _nativeScrollbarsSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\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 hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\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: HideNativeScrollbars = (\r\n viewportOverflowState,\r\n directionIsRTL,\r\n viewportArrange,\r\n viewportStyleObj\r\n ) => {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n const [arrangeViewport, undoViewportArrange] = scrollbarsHidingPlugin\r\n ? scrollbarsHidingPlugin._overflowUpdateSegment(\r\n doViewportArrange,\r\n _flexboxGlue,\r\n _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('showNativeOverlaidScrollbars');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n let overflowEdgeCache = getCurrentOverflowEdgeCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarHidden,\r\n dataValueHostScrollbarHidden,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n const overflowAmountScrollSize = {\r\n w: max0(max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n arrangedViewportClientSize.h +\r\n max0(viewportclientSize.h - viewportScrollSize.h) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowEdgeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowEdgeChanged: overflowEdgeChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createOverflowUpdateSegment,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowEdgeChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdateSegment(structureSetupElements, state),\r\n createPaddingUpdateSegment(structureSetupElements, state),\r\n createOverflowUpdateSegment(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowEdgeChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\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 let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'scroll', (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopPropagation(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'animationstart', 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 runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\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 type TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n destroy: () => void,\r\n update: () => void | Parameters\r\n];\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH,\r\n fromRecords?: true\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n !fromRecords && onTrinsicChangedCallback(heightIntrinsic);\r\n return [heightIntrinsic];\r\n }\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n entries: IntersectionObserverEntry[],\r\n fromRecords?: true\r\n ) => {\r\n if (entries && entries.length > 0) {\r\n return triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n (entries) => intersectionObserverCallback(entries),\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance!.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n () => {\r\n if (intersectionObserverInstance) {\r\n return intersectionObserverCallback(intersectionObserverInstance.takeRecords(), true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n off,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [\r\n destroy: () => void,\r\n update: () => void | false | Parameters>\r\n];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n const listener = (event: Event) => {\r\n if (destroyed) {\r\n off(elm, eventNames, listener);\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n };\r\n on(elm, eventNames, listener);\r\n map!.set(elm, [eventNames, () => off(elm, eventNames, listener)]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const debouncedEventContentChange = debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n );\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (\r\n mutations: MutationRecord[],\r\n fromRecords?: true\r\n ): void | Parameters> => {\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 =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] as Parameters>;\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n !fromRecords &&\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n return [targetChangedAttrs, targetStyleChanged] as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!((mutations) =>\r\n observerCallback(mutations)\r\n );\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n debouncedEventContentChange._flush();\r\n\r\n const records = mutationObserver.takeRecords();\r\n return !isEmptyArray(records) && observerCallback(records, true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n closest,\r\n assignDeep,\r\n push,\r\n scrollLeft,\r\n scrollTop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n classNameScrollbar,\r\n classNameViewportArrange,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n destroy: () => void,\r\n updateObservers: () => Partial,\r\n updateObserversOptions: StructureSetupObserversUpdate\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const hasOver = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n const hasVpStyle = _viewportHasClass(classNameViewportArrange, '');\r\n const scrollOffsetX = hasVpStyle && scrollLeft(_viewport);\r\n const scrollOffsetY = hasVpStyle && scrollTop(_viewport);\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n _viewportAddRemoveClass(classNameViewportArrange, '');\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, hasOver);\r\n _viewportAddRemoveClass(classNameViewportArrange, '', hasVpStyle);\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues, fromRecords?: true) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: Partial = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && structureSetupUpdate(updateHints);\r\n return updateHints;\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean, fromRecords?: true) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n const updateHints: Partial = {\r\n _contentMutation: contentSizeChanged,\r\n };\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n !fromRecords && updateFn(updateHints);\r\n }\r\n return updateHints;\r\n };\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ) => {\r\n const updateHints: Partial = { _hostMutation: targetStyleChanged };\r\n if (targetStyleChanged) {\r\n !fromRecords && structureSetupUpdateWithDebouncedAdaptiveUpdateHints(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n return updateHints;\r\n };\r\n\r\n const trinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n }\r\n );\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n trinsicObserver && trinsicObserver[0](); // destroy\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[1](); // update\r\n const trinsicUpdateResult = trinsicObserver && trinsicObserver[1](); // update\r\n\r\n if (hostUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onHostMutation.apply(\r\n 0,\r\n push(hostUpdateResult, true) as [\r\n ...updateResult: typeof hostUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (contentUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onContentMutation.apply(\r\n 0,\r\n push(contentUpdateResult, true) as [\r\n ...updateResult: typeof contentUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (trinsicUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onTrinsicChanged.apply(\r\n 0,\r\n push(trinsicUpdateResult as any[], true) as [\r\n ...updateResult: typeof trinsicUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n\r\n return updateHints;\r\n },\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub, isEmptyObject, keys } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { DeepPartial, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowEdge: XY;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [updateHints: StructureSetupUpdateHints, changedOptions: DeepPartial, force: boolean];\r\n};\r\n\r\nconst initialXYNumber = { x: 0, y: 0 };\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowEdge: initialXYNumber,\r\n _overflowAmount: initialXYNumber,\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const triggerUpdateEvent: (...args: StructureSetupEventMap['u']) => void = (\r\n updateHints,\r\n changedOptions,\r\n force\r\n ) => {\r\n const truthyUpdateHints = keys(updateHints).some((key) => updateHints[key]);\r\n\r\n if (truthyUpdateHints || !isEmptyObject(changedOptions) || force) {\r\n triggerEvent('u', [updateHints, changedOptions, force]);\r\n }\r\n };\r\n const [destroyObservers, updateObservers, updateObserversOptions] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerUpdateEvent(updateStructure(checkOptionsFallback, updateHints), {}, false);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObserversOptions(checkOption);\r\n triggerUpdateEvent(\r\n updateStructure(checkOption, updateObservers(), force),\r\n changedOptions,\r\n !!force\r\n );\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n each,\r\n isEmptyArray,\r\n noop,\r\n on,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\r\n stopPropagation,\r\n style,\r\n} from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n classNamesScrollbarInteraction,\r\n classNamesScrollbarTransitionless,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n DefaultScrollbarsInitialization,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElement {\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _addRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => void;\r\n _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n // _removeClass: (classNames: string) => void;\r\n /*\r\n _addEventListener: () => void;\r\n _removeEventListener: () => void;\r\n */\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst interactionStartEventNames = 'touchstart mouseenter';\r\nconst interactionEndEventNames = 'touchend touchcancel mouseleave';\r\nconst stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>\r\n on(\r\n scrollbar,\r\n 'mousedown',\r\n on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),\r\n { _capture: true }\r\n );\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization } = getEnvironment();\r\n const { scrollbarsSlot: defaultScrollbarSlot } =\r\n _getDefaultInitialization() as DefaultScrollbarsInitialization;\r\n const { _documentElm, _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const scrollbarSlot = _targetIsElm ? null : (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n defaultScrollbarSlot,\r\n scrollbarSlot\r\n );\r\n const scrollbarsAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action((elm || noop)(scrollbarStructure) || scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const scrollbarsHandleStyle = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => {\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n const [elm, styles] = elmStyle(scrollbarStructure);\r\n style(elm, styles);\r\n });\r\n };\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const addRemoveClassHorizontal = scrollbarsAddRemoveClass.bind(0, horizontalScrollbars);\r\n const addRemoveClassVertical = scrollbarsAddRemoveClass.bind(0, verticalScrollbars);\r\n const generateScrollbarDOM = (horizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = horizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;\r\n const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';\r\n const scrollbar = createDiv(\r\n `${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass}`\r\n );\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n push(arrToPush, result);\r\n push(destroyFns, [\r\n removeElements.bind(0, scrollbar),\r\n on(scrollbar, interactionStartEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction, true);\r\n addRemoveClassVertical(classNamesScrollbarInteraction, true);\r\n }),\r\n on(scrollbar, interactionEndEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction);\r\n addRemoveClassVertical(classNamesScrollbarInteraction);\r\n }),\r\n stopRootClickPropagation(scrollbar, _documentElm),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = generateScrollbarDOM.bind(0, true);\r\n const generateVerticalScrollbarStructure = generateScrollbarDOM.bind(0, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n setT(() => {\r\n addRemoveClassHorizontal(classNamesScrollbarTransitionless);\r\n addRemoveClassVertical(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassHorizontal,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassVertical,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, verticalScrollbars),\r\n },\r\n },\r\n appendElements,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElement,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOSOptions,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { OverflowStyle, StyleObject } from 'typings';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nconst { min } = Math;\r\nconst createSelfCancelTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nconst refreshScrollbarHandleLength = (\r\n setStyleFn: ScrollbarsSetupElement['_handleStyle'],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n const handleRatio = min(1, viewportSize / (viewportSize + overflowAmount));\r\n\r\n setStyleFn((structure) => [\r\n structure._handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(handleRatio * 100).toFixed(3)}%`,\r\n },\r\n ]);\r\n};\r\n\r\nconst refreshScrollbarHandlePosition = (\r\n setStyleFn: (styles: StyleObject) => void,\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n /*\r\n //measure the handle length to respect min & max length\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\r\n var handleTrackDiff = trackLength - handleLength;\r\n var handleCSS = {};\r\n var transformOffset;\r\n var translateValue;\r\n\r\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\r\n // because its a bit behind during the small delay when content size updates\r\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\r\n var maxScroll =\r\n (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] -\r\n _viewportElementNative['client' + scrollbarVars._Width_Height]) *\r\n (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\r\n var getScrollRatio = function (base) {\r\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\r\n };\r\n var getHandleOffset = function (scrollRatio) {\r\n var offset = handleTrackDiff * scrollRatio;\r\n offset = isNaN(offset) ? 0 : offset;\r\n offset =\r\n isRTLisHorizontal && !_rtlScrollBehavior.i ? trackLength - handleLength - offset : offset;\r\n offset = MATH.max(0, offset);\r\n return offset;\r\n };\r\n var scrollRatio = getScrollRatio(nativeScroll);\r\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\r\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\r\n var snappedHandleOffset = getHandleOffset(scrollRatio);\r\n\r\n scrollbarVarsInfo._maxScroll = maxScroll;\r\n scrollbarVarsInfo._currentScroll = nativeScroll;\r\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\r\n\r\n if (_supportTransform) {\r\n transformOffset = isRTLisHorizontal\r\n ? -(trackLength - handleLength - handleOffset)\r\n : handleOffset; //in px\r\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\r\n translateValue = isHorizontal\r\n ? strTranslateBrace + transformOffset + 'px, 0)'\r\n : strTranslateBrace + '0, ' + transformOffset + 'px)';\r\n\r\n handleCSS[strTransform] = translateValue;\r\n\r\n //apply or clear up transition\r\n if (_supportTransition)\r\n handleCSS[strTransition] =\r\n transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1\r\n ? getCSSTransitionString(scrollbarVars._handle) +\r\n ', ' +\r\n (strTransform + _strSpace + transitionDuration + 'ms')\r\n : _strEmpty;\r\n } else handleCSS[scrollbarVars._left_top] = handleOffset;\r\n\r\n //only apply css if offset has changed and overflow exists.\r\n if (!nativeOverlayScrollbarsAreActive()) {\r\n scrollbarVars._handle.css(handleCSS);\r\n\r\n //clear up transition\r\n if (_supportTransform && _supportTransition && transition) {\r\n scrollbarVars._handle.one(_strTransitionEndEvent, function () {\r\n if (!_destroyed) scrollbarVars._handle.css(strTransition, _strEmpty);\r\n });\r\n }\r\n }\r\n\r\n scrollbarVarsInfo._handleOffset = handleOffset;\r\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\r\n scrollbarVarsInfo._trackLength = trackLength;\r\n */\r\n};\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup => {\r\n let autoHideIsMove: boolean;\r\n let autoHideIsLeave: boolean;\r\n let autoHideNotNever: boolean;\r\n let mouseInHost: boolean | undefined;\r\n let prevTheme: string | null | undefined;\r\n let globalAutoHideDelay = 0;\r\n\r\n const state = createState({});\r\n const [getState] = state;\r\n const [requestMouseMoveAnimationFrame, cancelMouseMoveAnimationFrame] = createSelfCancelTimeout();\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = createSelfCancelTimeout();\r\n const [scrollTimeout, clearScrollTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideMoveTimeout, clearAutoHideTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideTimeout, clearAutoTimeout] = createSelfCancelTimeout(() => globalAutoHideDelay);\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupState._elements\r\n );\r\n const { _host, _viewport } = structureSetupState._elements;\r\n const { _horizontal, _vertical } = elements;\r\n const { _addRemoveClass: addRemoveClassHorizontal, _handleStyle: styleHorizontal } = _horizontal;\r\n const { _addRemoveClass: addRemoveClassVertical, _handleStyle: styleVertical } = _vertical;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden, true);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden, true);\r\n };\r\n if (globalAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const onHostMouseEnter = () => {\r\n mouseInHost = autoHideIsLeave;\r\n mouseInHost && manageScrollbarsAutoHide(true);\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearScrollTimeout,\r\n clearAutoTimeout,\r\n clearAutoHideTimeout,\r\n cancelScrollAnimationFrame,\r\n cancelMouseMoveAnimationFrame,\r\n destroyElements,\r\n\r\n on(_host, 'mouseover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'mouseenter', onHostMouseEnter),\r\n on(_host, 'mouseleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'mousemove', () => {\r\n autoHideIsMove &&\r\n requestMouseMoveAnimationFrame(() => {\r\n clearScrollTimeout();\r\n manageScrollbarsAutoHide(true);\r\n auotHideMoveTimeout(() => {\r\n autoHideIsMove && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n on(_viewport, 'scroll', () => {\r\n autoHideNotNever &&\r\n requestScrollAnimationFrame(() => {\r\n manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n ];\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force, structureUpdateHints) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n\r\n const [theme, themeChanged] = checkOption('scrollbars.theme');\r\n const [visibility, visibilityChanged] =\r\n checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] =\r\n checkOption('scrollbars.autoHide');\r\n const [autoHideDelay] = checkOption('scrollbars.autoHideDelay');\r\n const [dragScrolling, dragScrollingChanged] = checkOption(\r\n 'scrollbars.dragScrolling'\r\n );\r\n const [touchSupport, touchSupportChanged] = checkOption('scrollbars.touchSupport');\r\n\r\n const updateHandle = _overflowEdgeChanged || _overflowAmountChanged;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged;\r\n\r\n const setScrollbarVisibility = (\r\n overflowStyle: OverflowStyle,\r\n addRemoveClass: (classNames: string, add?: boolean) => void\r\n ) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n addRemoveClass(classNamesScrollbarVisible, isVisible);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (updateVisibility) {\r\n const { _overflowStyle } = currStructureSetupState;\r\n\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, addRemoveClassHorizontal);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, addRemoveClassVertical);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n addRemoveClassHorizontal(classNamesScrollbarCornerless, !hasCorner);\r\n addRemoveClassVertical(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (themeChanged) {\r\n addRemoveClassHorizontal(prevTheme);\r\n addRemoveClassVertical(prevTheme);\r\n\r\n addRemoveClassHorizontal(theme, true);\r\n addRemoveClassVertical(theme, true);\r\n prevTheme = theme;\r\n }\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideNotNever = autoHide !== 'never';\r\n manageScrollbarsAutoHide(!autoHideNotNever, true);\r\n }\r\n if (updateHandle) {\r\n refreshScrollbarHandleLength(styleHorizontal, currStructureSetupState, true);\r\n refreshScrollbarHandleLength(styleVertical, currStructureSetupState);\r\n }\r\n },\r\n scrollbarsSetupState,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n Plugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { DeepPartial, OverflowStyle } from 'typings';\r\nimport {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n DefaultInitialization,\r\n cancelInitialization,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: DeepPartial,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n staticDefaultInitialization: DefaultInitialization;\r\n staticDefaultOptions: Options;\r\n\r\n getDefaultInitialization(): DefaultInitialization;\r\n setDefaultInitialization(newDefaultInitialization: DeepPartial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: DeepPartial): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowEdge: XY;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowEdgeChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: DeepPartial;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, canceled: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: DeepPartial): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const { _getDefaultOptions, _addListener: addEnvListener } = getEnvironment();\r\n const plugins = getPlugins();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: DeepPartial) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState\r\n );\r\n const update = (changedOptions: DeepPartial, force?: boolean) => {\r\n updateStructure(changedOptions, !!force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (canceled?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!canceled]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: DeepPartial) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force: boolean) => {\r\n updateScrollbars(changedOptions, force, updateHints);\r\n });\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n if (cancelInitialization(!targetIsElement && target.cancel, structureState._elements)) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowEdgeChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowEdgeChanged: _overflowEdgeChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","setT","setTimeout","clearT","clearTimeout","rnothtmlwhite","classListAction","className","action","classList","clazz","classes","match","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","maxTimeoutId","prevArguments","latestArguments","clear","_timeout","_maxDelay","_mergeParams","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","clearTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","timeoutId","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","_ref","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostScrollbarHidden","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarHidden","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarAutoHidden","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","showNativeOverlaidScrollbars","updating","elementEvents","attributes","ignoreMutation","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","_validateRecursive","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","_validateOptions","_optionsValidationPlu","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","_sizeObserverPlugin","contentArrangeCounter","abs","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","env","_nativeScrollbarsHiding","_nativeScrollbarsOverlaid","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","_getState","_viewportPaddingStyle","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","finalViewportOverflowState","_getState2","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_envWindowZoom","size","dpr","envInstance","updateNativeScrollbarSizeCache","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","_updateNativeScrollba","scrollbarSize","scrollbarSizeChanged","_nativeScrollbarsSize","_scrollbarsHidingPlug","environmentInstance","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","nativeScrollbarsOverlaid","defaultInitialization","padding","content","cancel","defaultDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElementStrategy","dynamicInitializationElementValue","cancelInitialization","cancelInitializationValue","structureSetupElements","_isBody","_viewportIsTarget","_getEnvironment","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getDefaultInitializa","defaultHostInitializationStrategy","host","defaultViewportInitializationStrategy","defaultPaddingInitializationStrategy","defaultContentInitializationStrategy","targetIsElm","targetStructureInitialization","hostInitializationStrategy","paddingInitializationStrategy","viewportInitializationStrategy","contentInitializationStrategy","targetElement","isTextarea","ownerDocument","isBody","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_windowElm","_documentElm","_isTextarea","_targetIsElm","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","removeHtmlClass","createTrinsicUpdateSegment","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_nativeScrollbarStyling","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","max0","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdateSegment","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowEdge","_createCache4","getCurrentOverflowEdgeCache","updateOverflowStyleCache","_createCache5","fixFlexboxGlue","heightIntrinsic","_overflowScroll","hostClientSize","isContentBox","subtractXScrollbar","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","nativeScrollbarSize","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","_getStatePerAxis","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","_getStatePerAxis2","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","_setAxisOverflowStyle","visibleBehaviorX","_setAxisOverflowStyle2","visibleBehaviorY","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","_hostMutation","_getState3","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmountScrollSize","overflowAmountClientSize","_overflowEdgeCache","overflowEdge","overflowEdgeChanged","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowEdge","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowEdgeChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_ref$_direction","_direction","observeDirectionChange","_ref$_appear","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","_sizeObserverPlugin$_","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","debouncedEventContentChange","_createEventContentCh","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","records","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","hasOver","hasVpStyle","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","contentUpdateResult","trinsicUpdateResult","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","_createStructureSetup2","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","interactionStartEventNames","interactionEndEventNames","stopRootClickPropagation","scrollbar","documentElm","createScrollbarsSetupElements","defaultScrollbarSlot","scrollbarsSlot","scrollbarSlot","evaluatedScrollbarSlot","scrollbarsAddRemoveClass","scrollbarStructures","scrollbarStructure","_scrollbar","scrollbarsHandleStyle","_elmStyle","horizontalScrollbars","verticalScrollbars","addRemoveClassHorizontal","addRemoveClassVertical","generateScrollbarDOM","horizontal","scrollbarClassName","arrToPush","transitionlessClass","track","handle","_track","_handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_horizontal","_scrollbarStructures","_clone","_addRemoveClass","_handleStyle","_vertical","min","createSelfCancelTimeout","id","setTFn","clearTFn","refreshScrollbarHandleLength","setStyleFn","isHorizontal","axis","viewportSize","handleRatio","structure","toFixed","createScrollbarsSetup","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","prevTheme","globalAutoHideDelay","_createSelfCancelTime","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","_createSelfCancelTime2","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","_createSelfCancelTime3","clearScrollTimeout","auotHideMoveTimeout","_createSelfCancelTime4","clearAutoHideTimeout","_createSelfCancelTime5","auotHideTimeout","clearAutoTimeout","_createScrollbarsSetu","styleHorizontal","styleVertical","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","currStructureSetupState","themeChanged","visibilityChanged","autoHideChanged","updateHandle","updateVisibility","setScrollbarVisibility","addRemoveClass","isVisible","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","targetIsElement","instanceTarget","potentialInstance","optionsValidationPlugin","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","canceled","instance","_structureState","pluginInstance","sizeChanged","hostMutation","_getEnvironment2","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","staticDefaultInitialization","staticDefaultOptions","getDefaultInitialization","setDefaultInitialization","getDefaultOptions","setDefaultOptions"],"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 e2af466..733710a 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars={})}(this,(function(n){"use strict";function r(n,t){if(b(n))for(var e=0;e-1&&r%1==0;return!(!(g(n)||!p(n)&&t)||r>0&&w(n)&&!(r-1 in n))},y=function(n){if(!n||!w(n)||"object"!==d(n))return!1;var r,t="constructor",e=n[t],i=e&&e.prototype,o=a.call(n,t),u=i&&a.call(i,"isPrototypeOf");if(e&&!o&&!u)return!1;for(r in n);return f(r)||a.call(n,r)},m=function(n){var r=HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===o)},x=function(n){var r=Element;return!!n&&(r?n instanceof r:n.nodeType===o)},O=function(n,r,t){return n.indexOf(r,t)},S=function(n,r,t){return t||v(r)||!b(r)?n.push(r):Array.prototype.push.apply(n,r),n},L=function(n){var t=Array.from,e=[];return t&&n?t(n):(n instanceof Set?n.forEach((function(n){S(e,n)})):r(n,(function(n){S(e,n)})),e)},P=function(n){return!!n&&0===n.length},C=function(n,t,e){r(n,(function(n){return n&&n.apply(void 0,t||[])})),!e&&(n.length=0)},D=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},M=function(n){return n?Object.keys(n):[]},R=function n(t,e,i,o,u,c,a){var f=[e,i,o,u,c,a];return"object"==typeof t&&!l(t)||p(t)||(t={}),r(f,(function(e){r(M(e),(function(r){var i=e[r];if(t===i)return!0;var o=g(i);if(i&&(y(i)||o)){var u=t[r],c=u;o&&!g(u)?c=[]:o||y(u)||(c={}),t[r]=n(c,i)}else t[r]=i}))})),t},E=function(n){for(var r in n)return!1;return!0},A=function(n,r,t,e){if(f(e))return t?t[n]:r;t&&!l(e)&&!1!==e&&(t[n]=e)},z=function(n,r,t){if(f(t))return n?n.getAttribute(r):null;n&&n.setAttribute(r,t)},H=function(n,r,t,e){if(t){var i=z(n,r)||"",o=new Set(i.split(" "));o[e?"add":"delete"](t),z(n,r,L(o).join(" ").trim())}},B=function(n,r,t){var e=z(n,r)||"";return new Set(e.split(" ")).has(t)},F=function(n,r){n&&n.removeAttribute(r)},j=function(n,r){return A("scrollLeft",0,n,r)},k=function(n,r){return A("scrollTop",0,n,r)},T=Element.prototype,_=function(n,r){var t=[],e=r?x(r)?r:null:document;return e?S(t,e.querySelectorAll(n)):t},I=function(n,r){return!!x(n)&&(T.matches||T.msMatchesSelector).call(n,r)},N=function(n){return n?L(n.childNodes):[]},X=function(n){return n?n.parentElement:null},V=function(n,r){if(x(n)){var t=T.closest;if(t)return t.call(n,r);do{if(I(n,r))return n;n=X(n)}while(n)}return null},W=function(n,r,t){var e=n&&V(n,r),i=n&&function(n,r){var t=r?x(r)?r:null:document;return t?t.querySelector(n):null}(t,e);return!(!e||!i||e!==n&&i!==n&&V(V(n,t),r)===e)},Y=function(n,t,e){if(e){var i,o=t;n&&(b(e)?(i=document.createDocumentFragment(),r(e,(function(n){n===o&&(o=n.previousSibling),i.appendChild(n)}))):i=e,t&&(o?o!==t&&(o=o.nextSibling):o=n.firstChild),n.insertBefore(i,o||null))}},q=function(n,r){Y(n,null,r)},K=function(n,r){Y(n,n&&n.firstChild,r)},$=function(n,r){Y(X(n),n,r)},U=function(n,r){Y(X(n),n&&n.nextSibling,r)},Z=function n(t){if(b(t))r(L(t),(function(r){return n(r)}));else if(t){var e=X(t);e&&e.removeChild(t)}},G=function(n){var r=document.createElement("div");return n&&z(r,"class",n),r},J=function(n){var t=G();return t.innerHTML=n.trim(),r(N(t),(function(n){return Z(n)}))},Q=function(n){return n.charAt(0).toUpperCase()+n.slice(1)},nn=["-webkit-","-moz-","-o-","-ms-"],rn=["WebKit","Moz","O","MS","webkit","moz","o","ms"],tn={},en={},on=function(n){var t=tn[n]||window[n];return D(tn,n)||(r(rn,(function(r){return!(t=t||window[r+Q(n)])})),tn[n]=t),t},un=on("MutationObserver"),cn=on("IntersectionObserver"),an=on("ResizeObserver"),fn=on("cancelAnimationFrame"),ln=on("requestAnimationFrame"),dn=window.setTimeout,sn=window.clearTimeout,vn=/[^\x20\t\r\n\f]+/g,hn=function(n,r,t){var e,i=n&&n.classList,o=0,u=!1;if(i&&r&&v(r)){var c=r.match(vn)||[];for(u=c.length>0;e=c[o++];)u=!!t(i,e)&&u}return u},pn=function(n,r){hn(n,r,(function(n,r){return n.remove(r)}))},gn=function(n,r){return hn(n,r,(function(n,r){return n.add(r)})),pn.bind(0,n,r)},wn=function(n,t,e,i){if(n&&t){var o=!0;return r(e,(function(r){(i?i(n[r]):n[r])!==(i?i(t[r]):t[r])&&(o=!1)})),o}return!1},bn=function(n,r){return wn(n,r,["w","h"])},yn=function(n,r){return wn(n,r,["x","y"])},mn=function(n,r){return wn(n,r,["t","r","b","l"])},xn=function(n,r,t){return wn(n,r,["width","height"],t&&function(n){return Math.round(n)})},On=function(){},Sn=function(n,r){var t,e,i,o=On,u=r||{},c=u.p,a=u._,f=u.m,l=function(r){o(),sn(t),t=e=void 0,o=On,n.apply(this,r)},d=function(n){return f&&e?f(e,n):n},v=function(){o!==On&&l(d(i)||i)},h=function(){var n=L(arguments),r=p(c)?c():c,u=s(r)&&r>=0;if(u){var f=p(a)?a():a,h=s(f)&&f>=0,g=r>0?dn:ln,w=r>0?sn:fn,b=d(n),y=b||n,m=l.bind(0,y);o();var x=g(m,r);o=function(){return w(x)},h&&!t&&(t=dn(v,f)),e=i=y}else l(n)};return h.S=v,h},Ln={opacity:1,zindex:1},Pn=function(n,r){var t=r?parseFloat(n):parseInt(n,10);return t==t?t:0},Cn=function(n,r,t){return null!=r?r[t]||r.getPropertyValue(t):n.style[t]},Dn=function(n,r,t){try{if(n){var e=n.style;f(e[r])?e.setProperty(r,t):e[r]=function(n,r){return!Ln[n.toLowerCase()]&&s(r)?r+"px":r}(r,t)}}catch(c){}},Mn=function(n,r,e){var i=r?r+"-":"",o=e?"-"+e:"",u=i+"top"+o,c=i+"right"+o,a=i+"bottom"+o,f=i+"left"+o,l=t(n,[u,c,a,f]);return{t:Pn(l[u]),r:Pn(l[c]),b:Pn(l[a]),l:Pn(l[f])}},Rn={w:0,h:0},En=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:Rn},An=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:Rn},zn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:Rn},Hn=function(n){var r=parseFloat(t(n,"height"))||0,e=parseFloat(t(n,"height"))||0;return{w:e-Math.round(e),h:r-Math.round(r)}},Bn=function(n){return n.getBoundingClientRect()},Fn=function(){if(f(e)){e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(n){}}return e},jn=function(n){return n.split(" ")},kn=function(n,t,e,i){r(jn(t),(function(r){n.removeEventListener(r,e,i)}))},Tn=function(n,t,e,i){var o,u=Fn(),c=null!=(o=u&&i&&i.C)?o:u,a=i&&i.O||!1,f=i&&i.A||!1,l=[],d=u?{passive:c,capture:a}:a;return r(jn(t),(function(r){var t=f?function(i){n.removeEventListener(r,t,a),e&&e(i)}:e;S(l,kn.bind(null,n,r,t,a)),n.addEventListener(r,t,d)})),C.bind(0,l)},_n=function(n){return n.stopPropagation()},In={x:0,y:0},Nn=function(n){var r=n?Bn(n):0;return r?{x:r.left+window.pageYOffset,y:r.top+window.pageXOffset}:In},Xn=function(n,t){r(g(t)?t:[t],n)},Vn=function(n){var t=new Map,e=function(n,r){if(n){var e=t.get(n);Xn((function(n){e&&e[n?"delete":"clear"](n)}),r)}else t.forEach((function(n){n.clear()})),t.clear()},i=function(n,r){var i=t.get(n)||new Set;return t.set(n,i),Xn((function(n){n&&i.add(n)}),r),e.bind(0,n,r)};return r(M(n),(function(r){i(r,n[r])})),[i,e,function(n,e){var i=t.get(n);r(L(i),(function(n){e&&!P(e)?n.apply(0,e):n()}))}]},Wn=function(n,r){return n?r.split(".").reduce((function(n,r){return n&&D(n,r)?n[r]:void 0}),n):void 0},Yn=function(n,r,t){return function(e){return[Wn(n,e),t||void 0!==Wn(r,e)]}},qn=function(n){var r=n;return[function(){return r},function(n){r=R({},r,n)}]},Kn="os-environment",$n=Kn+"-flexbox-glue",Un=$n+"-max",Zn="data-overlayscrollbars",Gn=Zn+"-overflow-x",Jn=Zn+"-overflow-y",Qn="overflowVisible",nr="scrollbarHidden",rr="os-padding",tr="os-viewport",er=tr+"-arrange",ir="os-content",or=tr+"-scrollbar-hidden",ur="os-overflow-visible",cr="os-size-observer",ar=cr+"-appear",fr=cr+"-listener",lr=fr+"-scroll",dr=fr+"-item",sr=dr+"-final",vr="os-trinsic-observer",hr="os-scrollbar",pr=hr+"-horizontal",gr=hr+"-vertical",wr="os-scrollbar-track",br="os-scrollbar-handle",yr=hr+"-visible",mr=hr+"-cornerless",xr=hr+"-transitionless",Or=hr+"-interaction",Sr=hr+"-auto-hidden",Lr=function(n){return JSON.stringify(n,(function(n,r){if(p(r))throw new Error;return r}))},Pr={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},Cr=function n(t,e){var i={};return r(M(e).concat(M(t)),(function(r){var o=t[r],u=e[r];if(w(o)&&w(u))R(i[r]={},n(o,u));else if(D(e,r)&&u!==o){var c=!0;if(g(o)||g(u))try{Lr(o)===Lr(u)&&(c=!1)}catch(l){}c&&(i[r]=u)}})),i},Dr={},Mr=function(){return R({},Dr)},Rr={exports:{}};!function(n){function r(){return n.exports=r=Object.assign?Object.assign.bind():function(n){for(var r=1;r
');q(n,i),gn(n,lr);var o,u=i[0],c=u.lastChild,a=u.firstChild,f=null==a?void 0:a.firstChild,l=En(u),d=l,s=!1,v=function(){j(a,Br),k(a,Br),j(c,Br),k(c,Br)},h=function(n){o=0,s&&(l=d,r(!0===n))},p=function(n){d=En(u),s=!n||!bn(d,l),n?(_n(n),s&&!o&&(fn(o),o=ln(h))):h(!1===n),v()},g=S([],[Tn(a,Fr,p),Tn(c,Fr,p)]);return t(f,{width:Br,height:Br}),v(),[e?p.bind(0,!1):v,g]}},Er),Tr=0,_r=Math.round,Ir=Math.abs,Nr="__osScrollbarsHidingPlugin",Xr=((Ar={})[Nr]={T:function(n){var r=n.D,t=n.L,e=!(n.I||r||!t.x&&!t.y)&&document.createElement("style");return e&&(z(e,"id",er+"-"+Tr),Tr++),e},M:function(n,e,i,o,u,c,a){return[function(r,e,c,a){if(n){var f=u().H,l=r.R,d=r.V,s=d.x,v=d.y,h=l.x,p=l.y,g=f[a?"paddingRight":"paddingLeft"],w=f.paddingTop,b=e.w+c.w,y=e.h+c.h,m={w:p&&v?p+b-g+"px":"",h:h&&s?h+y-w+"px":""};if(o){var x=o.sheet;if(x){var O=x.cssRules;if(O){O.length||x.insertRule("#"+z(o,"id")+" + ."+er+"::before {}",0);var S=O[0].style;S.width=m.w,S.height=m.h}}}else t(i,{"--os-vaw":m.w,"--os-vah":m.h})}return n},function(o,f,l){if(n){var d=l||c(o),s=u().H,v=d.V,h=v.x,p=v.y,g={},w=function(n){return r(n.split(" "),(function(n){g[n]=s[n]}))};h&&w("marginBottom paddingTop paddingBottom"),p&&w("marginLeft marginRight paddingLeft paddingRight");var b=t(i,M(g));return pn(i,er),e||(g.height=""),t(i,g),[function(){a(d,f,n,b),t(i,b),gn(i,er)},d]}return[On]}]},j:function(){var n={w:0,h:0},r=0;return function(t,e,i){var o={w:window.innerWidth,h:window.innerHeight},u={w:o.w-n.w,h:o.h-n.h};if(0!==u.w||0!==u.h){var c=Ir(u.w),a=Ir(u.h),f={w:Ir(_r(o.w/(n.w/100))),h:Ir(_r(o.h/(n.h/100)))},l=function(){var n=window.screen.deviceXDPI||0,r=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/r}(),d=c>2&&a>2,s=!function(n,r){var t=Ir(n),e=Ir(r);return!(t===e||t+1===e||t-1===e)}(f.w,f.h);if(d&&s&&l!==r&&l>0){var v=e(),h=v[0],p=v[1];R(t.k,h),p&&i()}n=o,r=l}}}},Ar),Vr=function(n,r,t,e){q(n,r);var i=An(r),o=En(r),u=Hn(t);return e&&Z(r),{x:o.h-i.h+u.h,y:o.w-i.w+u.w}},Wr=function(n,r){var e="hidden";t(n,{overflowX:e,overflowY:e,direction:"rtl"}),j(n,0);var i=Nn(n),o=Nn(r);j(n,-999);var u=Nn(r);return{i:i.x===o.x,n:o.x!==u.x}},Yr=function(n,r){var t=gn(n,$n),e=Bn(n),i=Bn(r),o=xn(i,e,!0),u=gn(n,Un),c=Bn(n),a=Bn(r),f=xn(a,c,!0);return t(),u(),o&&f},qr=function(){return zr||(zr=function(){var n,e=document.body,o=J('
')[0],c=o.firstChild,a=Vn(),f=a[0],l=a[2],d=i({o:Vr(e,o,c),u:yn},Vr.bind(0,e,o,c,!0)),s=d[0],v=(0,d[1])()[0],h=function(n){var e=!1,i=gn(n,or);try{e="none"===t(n,function(n){var t=en[n];if(D(en,n))return t;var e=Q(n),i=G().style;return r(nn,(function(r){var o=r.replace(/-/g,""),u=[n,r+n,o+e,Q(o)+e];return!(t=u.find((function(n){return void 0!==i[n]})))})),en[n]=t||""}("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(u){}return i(),e}(o),p={x:0===v.x,y:0===v.y},g={padding:!h,content:!1,cancel:{nativeScrollbarsOverlaid:!0,body:null}},w=R({},Pr),b={k:v,L:p,D:h,I:"-1"===t(o,"zIndex"),B:Wr(o,c),F:Yr(o,c),q:function(n){return f("_",n)},U:R.bind(0,{},g),N:function(n){R(g,n)},Y:R.bind(0,{},w),W:function(n){R(w,n)},G:R({},g),X:R({},w)};return F(o,"style"),Z(o),h||p.x&&p.y||window.addEventListener("resize",(function(){var r=Mr()[Nr];(n=n||r&&r.j())&&n(b,s,l.bind(0,"_"))})),b}()),zr},Kr=function(n,r){return p(n)?n.apply(0,r):n},$r=function(n,r,t,e){return Kr(e||Kr(t,n),n)||r.apply(0,n)},Ur=function(n,r,t,e){var i=Kr(e,n);return(l(i)||f(i))&&(i=Kr(t,n)),!0===i||l(i)||f(i)?r.apply(0,n):i},Zr=function(n,r){var t=n||{},e=t.nativeScrollbarsOverlaid,i=t.body,o=r.Z,u=r.$,c=qr(),a=c.U,f=c.L,d=a().cancel,s=d.nativeScrollbarsOverlaid,v=d.body,p=null!=e?e:s,g=h(i)||l(i)?i:v,w=(f.x||f.y)&&p,b=o&&(l(g)?!u:g);return!!w||!!b},Gr=G.bind(0,""),Jr=function(n){q(X(n),N(n)),Z(n)},Qr=function(n,r){return z(n,Zn,r),F.bind(0,n,Zn)},nt=function(n){var r=qr(),t=r.U,e=r.D,i=Mr()[Nr],o=i&&i.T,u=t(),c=u.host,a=u.viewport,f=u.padding,l=u.content,d=m(n),s=d?{}:n,v=s.host,h=s.padding,p=s.viewport,g=s.content,w=d?n:s.target,b=I(w,"textarea"),y=w.ownerDocument,x=w===y.body,L=y.defaultView,P=(x||!!an&&!b)&&e,R=$r.bind(0,[w]),E=Ur.bind(0,[w]),A=[R(Gr,a,x&&!D(s,"viewport")?w:p),R(Gr,a),R(Gr)].filter((function(n){return!!P||n!==w}))[0],z=A===w,j={J:w,K:b?R(Gr,c,v):w,rr:A,ar:!z&&E(Gr,f,h),er:!z&&E(Gr,l,g),nr:!z&&!e&&o&&o(r),tr:L,ir:y,vr:b,Z:x,ur:d,$:z,lr:function(n,r){return z?B(A,Zn,r):function(n,r){return hn(n,r,(function(n,r){return n.contains(r)}))}(A,n)},cr:function(n,r,t){return z?H(A,Zn,r,t):(t?gn:pn)(A,n)}},k=M(j).reduce((function(n,r){var t=j[r];return S(n,!(!t||X(t))&&t)}),[]),T=function(n){return n?O(k,n)>-1:null},_=j.J,V=j.K,W=j.ar,Y=j.rr,K=j.er,G=j.nr,J=[],Q=b&&T(V),nn=b?_:N([K,Y,W,V,_].find((function(n){return!1===T(n)}))),rn=K||Y;return[j,function(){var n=Qr(V,z?"viewport":"host"),r=gn(W,rr),t=gn(Y,!z&&tr),i=gn(K,ir),o=x?gn(X(w),or):On;Q&&(U(_,V),S(J,(function(){U(V,_),Z(V)}))),q(rn,nn),q(V,W),q(W||V,!z&&Y),q(Y,K),S(J,(function(){o(),n(),F(Y,Gn),F(Y,Jn),T(K)&&Jr(K),T(Y)&&Jr(Y),T(W)&&Jr(W),r(),t(),i()})),e&&!z&&S(J,pn.bind(0,Y,or)),G&&($(Y,G),S(J,Z.bind(0,G)))},C.bind(0,J)]},rt=function(n,r){var e=n.er,i=r[0];return function(n){var r=qr().F,o=i().sr,u=n.dr,c=(e||!r)&&u;return c&&t(e,{height:o?"":"100%"}),{gr:c,hr:c}}},tt=function(n,r){var e=r[0],o=r[1],u=n.K,c=n.ar,a=n.rr,f=n.$,l=i({u:mn,o:Mn()},Mn.bind(0,u,"padding","")),d=l[0],s=l[1];return function(n,r,i){var u=s(i),l=u[0],v=u[1],h=qr(),p=h.D,g=h.F,w=e().pr,b=n.gr,y=n.hr,m=n._r,x=r("paddingAbsolute"),O=x[0],S=x[1];if(b||v||!g&&y){var L=d(i);l=L[0],v=L[1]}var P=!f&&(S||m||v);if(P){var C=!O||!c&&!p,D=l.r+l.l,M=l.t+l.b,E={marginRight:C&&!w?-D:0,marginBottom:C?-M:0,marginLeft:C&&w?-D:0,top:C?-l.t:0,right:C?w?-l.r:"auto":0,left:C?w?"auto":-l.l:0,width:C?"calc(100% + "+D+"px)":""},A={paddingTop:C?l.t:0,paddingRight:C?l.r:0,paddingBottom:C?l.b:0,paddingLeft:C?l.l:0};t(c||a,E),t(a,A),o({ar:l,wr:!C,H:c?A:R({},E,A)})}return{br:P}}},et=Math.max,it=et.bind(0,0),ot="visible",ut="hidden",ct=42,at={u:bn,o:{w:0,h:0}},ft={u:yn,o:{x:ut,y:ut}},lt=function(n,r,t){return t?gn(n,r):pn(n,r)},dt=function(n){return 0===n.indexOf(ot)},st=function(n,r){var e=r[0],o=r[1],u=n.K,c=n.ar,a=n.rr,f=n.nr,l=n.$,d=n.cr,s=qr(),v=s.k,h=s.F,p=s.D,g=s.L,w=Mr()[Nr],b=!l&&!p&&(g.x||g.y),y=i(at,Hn.bind(0,a)),m=y[0],x=y[1],O=i(at,zn.bind(0,a)),S=O[0],L=O[1],P=i(at),C=P[0],D=P[1],M=i(at),R=M[0],E=M[1],A=i(ft)[0],B=function(n,r){if(t(a,{height:""}),r){var i=e(),o=i.wr,c=i.ar,f=n.mr,l=n.R,d=Hn(u),s=An(u),v="content-box"===t(a,"boxSizing"),h=o||v?c.b+c.t:0,p=!(g.x&&v);t(a,{height:s.h+d.h+(f.x&&p?l.x:0)-h})}},F=function(n,r){var e=p||n?0:ct,i=function(n,i,o){var u=t(a,n),c="scroll"===(r?r[n]:u);return[u,c,c&&!p?i?e:o:0,i&&!!e]},o=i("overflowX",g.x,v.x),u=o[0],c=o[1],f=o[2],l=o[3],d=i("overflowY",g.y,v.y);return{yr:{x:u,y:d[0]},mr:{x:c,y:d[1]},R:{x:f,y:d[2]},V:{x:l,y:d[3]}}},j=function(n,r,t,i){var o=n.R,u=n.V,c=u.x,a=u.y,f=o.x,l=o.y,d=e().H,s=r?"marginLeft":"marginRight",v=r?"paddingLeft":"paddingRight",h=d[s],p=d.marginBottom,g=d[v],w=d.paddingBottom;i.width="calc(100% + "+(l+-1*h)+"px)",i[s]=-l+h,i.marginBottom=-f+p,t&&(i[v]=g+(a?l:0),i.paddingBottom=w+(c?f:0))},k=w?w.M(b,h,a,f,e,F,j):[function(){return b},function(){return[On]}],T=k[0],_=k[1];return function(n,r,i){var f,s=n.gr,v=n.Sr,w=n.hr,b=n.br,y=n.dr,O=n._r,P=e(),M=P.sr,k=P.pr,I=r("showNativeOverlaidScrollbars"),N=I[0],X=I[1],V=r("overflow"),W=V[0],Y=V[1],q=N&&g.x&&g.y,K=!l&&!h&&(s||w||v||X||y),$=dt(W.x),U=dt(W.y),Z=$||U,G=x(i),J=L(i),Q=D(i),nn=E(i);if(X&&p&&d(or,nr,!q),K&&(f=F(q),B(f,M)),s||b||w||O||X){Z&&d(ur,Qn,!1);var rn=_(q,k,f),tn=rn[0],en=rn[1],on=G=m(i),un=on[0],cn=on[1],an=J=S(i),fn=an[0],ln=an[1],dn=An(a),sn=fn,vn=dn;tn(),(ln||cn||X)&&en&&!q&&T(en,fn,un,k)&&(vn=An(a),sn=zn(a));var hn={w:it(et(fn.w,sn.w)+un.w),h:it(et(fn.h,sn.h)+un.h)},pn={w:it(vn.w+it(dn.w-fn.w)+un.w),h:it(vn.h+it(dn.h-fn.h)+un.h)};nn=R(pn),Q=C(function(n,r){var t=window.devicePixelRatio%1!=0?1:0,e={w:it(n.w-r.w),h:it(n.h-r.h)};return{w:e.w>t?e.w:0,h:e.h>t?e.h:0}}(hn,pn),i)}var gn=nn,wn=gn[0],bn=gn[1],yn=Q,mn=yn[0],xn=yn[1],On=J,Sn=On[0],Ln=On[1],Pn=G,Cn=Pn[0],Dn=Pn[1],Mn={x:mn.w>0,y:mn.h>0},Rn=$&&U&&(Mn.x||Mn.y)||$&&Mn.x&&!Mn.y||U&&Mn.y&&!Mn.x;if(b||O||Dn||Ln||bn||xn||Y||X||K){var En={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Hn=function(n,r,t,e){var i=function(n,r){var t=dt(n),e=r&&t&&n.replace(ot+"-","")||"";return[r&&!t?n:"",dt(e)?"hidden":e]},o=i(t.x,r.x),u=o[0],c=o[1],a=i(t.y,r.y),f=a[0],l=a[1];return e.overflowX=c&&f?c:u,e.overflowY=l&&u?l:f,F(n,e)}(q,Mn,W,En),Bn=T(Hn,Sn,Cn,k);l||j(Hn,k,Bn,En),K&&B(Hn,M),l?(z(u,Gn,En.overflowX),z(u,Jn,En.overflowY)):t(a,En)}H(u,Zn,Qn,Rn),lt(c,ur,Rn),!l&<(a,ur,Z);var Fn=A(F(q).yr),jn=Fn[0],kn=Fn[1];return o({yr:jn,Cr:{x:wn.w,y:wn.h},Or:{x:mn.w,y:mn.h},Er:Mn}),{zr:kn,Ar:bn,Pr:xn}}},vt=function(n,t,e){var i={},o=t||{};return r(M(n).concat(M(o)),(function(r){var t=n[r],u=o[r];i[r]=!!(e||t||u)})),i},ht=3333333,pt=function(n){return"rtl"===t(n,"direction")},gt=function(n){return n&&(n.height||n.width)},wt=function(n,r,t){var e=t||{},o=e.Tr,u=void 0!==o&&o,c=e.Dr,a=void 0!==c&&c,f=Mr()[jr],l=qr().B,d=J('
')[0],s=d.firstChild,v=pt.bind(0,d),p=i({o:void 0,g:!0,u:function(n,r){return!(!n||!gt(n)&>(r))}}),b=p[0],y=function(n){var t=g(n)&&n.length>0&&w(n[0]),e=!t&&h(n[0]),i=!1,o=!1,c=!0;if(t){var a=b(n.pop().contentRect),f=a[0],s=a[2],v=gt(f);o=!gt(s)&&v,c=!(i=!s||!v)}else e?c=n[1]:o=!0===n;if(u&&c){var p=e?n[0]:pt(d);j(d,p?l.n?-ht:l.i?0:ht:ht),k(d,ht)}i||r({gr:!e,Lr:e?n:void 0,Dr:!!o})},m=[],x=!!a&&y;if(an){var O=new an(y);O.observe(s),S(m,(function(){O.disconnect()}))}else if(f){var L=f.P(s,y,a),P=L[0],D=L[1];x=P,S(m,D)}if(u){var M=i({o:!v()},v)[0];S(m,Tn(d,"scroll",(function(n){var r=M(),t=r[0];r[1]&&(pn(s,"ltr rtl"),gn(s,t?"rtl":"ltr"),y(r)),_n(n)})))}return x&&(gn(d,ar),S(m,Tn(d,"animationstart",x,{A:!!an}))),K(n,d),function(){C(m),Z(d)}},bt=function(n,r){var t,e=G(vr),o=[],u=i({o:!1})[0],c=function(n,t){if(n){var e=u(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));if(e[1])return!t&&r(e),[e]}},a=function(n,r){if(n&&n.length>0)return c(n.pop(),r)};if(cn)(t=new cn((function(n){return a(n)}),{root:n})).observe(e),S(o,(function(){t.disconnect()}));else{var f=function(){var n=En(e);c(n)};S(o,wt(e,f)),f()}return K(n,e),[function(){C(o),Z(e)},function(){if(t)return a(t.takeRecords(),!0)}]},yt=function(n,t,e,i){var o=!1,u=i||{},c=u.Ir,a=u.Mr,f=u.Hr,l=u.Rr,d=u.Vr,s=u.jr,h=Sn((function(){o&&e(!0)}),{p:33,_:99}),p=function(n,t,e){var i,o=!1,u=function(u){if(e){var c=e.reduce((function(r,t){if(t){var e=t[0],i=t[1],o=i&&e&&(u?u(e):_(e,n));o&&o.length&&i&&v(i)&&S(r,[o,i.trim()],!0)}return r}),[]);r(c,(function(n){return r(n[0],(function(r){var e=n[1],u=i.get(r);if(u){var c=u[0],a=u[1];c===e&&a()}var f=Tn(r,e,(function(n){o?(f(),i.delete(r)):t(n)}));i.set(r,[e,f])}))}))}};return e&&(i=new WeakMap,u()),[function(){o=!0},u]}(n,h,f),g=p[0],w=p[1],b=a||[],y=(c||[]).concat(b),m=function(o,u){var c=d||On,a=s||On,f=[],h=[],p=!1,g=!1,y=!1;return r(o,(function(r){var e=r.attributeName,o=r.target,u=r.type,d=r.oldValue,s=r.addedNodes,w="attributes"===u,m="childList"===u,x=n===o,L=w&&v(e)?z(o,e):0,P=0!==L&&d!==L,C=O(b,e)>-1&&P;if(t&&!x){var D=!w,M=w&&C,R=M&&l&&I(o,l),E=(R?!c(o,e,d,L):D||M)&&!a(r,!!R,n,i);S(h,s),g=g||E,y=y||m}!t&&x&&P&&!c(o,e,d,L)&&(S(f,e),p=p||C)})),y&&!P(h)&&w((function(n){return h.reduce((function(r,t){return S(r,_(n,t)),I(t,n)?S(r,t):r}),[])})),t?(!u&&g&&e(!1),[!1]):!P(f)||p?(!u&&e(f,p),[f,p]):void 0},x=new un((function(n){return m(n)}));return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(g(),x.disconnect(),o=!1)},function(){if(o){h.S();var n=x.takeRecords();return!P(n)&&m(n,!0)}}]},mt="["+Zn+"]",xt="."+tr,Ot=["tabindex"],St=["wrap","cols","rows"],Lt=["id","class","style","open"],Pt=function(n,t,e){var o,u,c,a=t[1],f=n.K,l=n.rr,d=n.er,h=n.vr,w=n.$,b=n.lr,y=n.cr,m=qr(),x=m.D,L=m.F,P=i({u:bn,o:{w:0,h:0}},(function(){var n=b(ur,Qn),r=b(er,""),t=r&&j(l),e=r&&k(l);y(ur,Qn),y(er,"");var i=zn(d),o=zn(l),u=Hn(l);return y(ur,Qn,n),y(er,"",r),j(l,t),k(l,e),{w:o.w+i.w+u.w,h:o.h+i.h+u.h}})),C=P[0],D=h?St:Lt.concat(St),E=Sn(e,{p:function(){return o},_:function(){return u},m:function(n,r){var t=n[0],e=r[0];return[M(t).concat(M(e)).reduce((function(n,r){return n[r]=t[r]||e[r],n}),{})]}}),A=function(n){r(n||Ot,(function(n){if(O(Ot,n)>-1){var r=z(f,n);v(r)?z(l,n,r):F(l,n)}}))},H=function(n,r){var t=n[0],i={dr:n[1]};return a({sr:t}),!r&&e(i),i},B=function(n){var r=n.gr,t=n.Lr,i=n.Dr,o=!r||i?e:E,u=!1;if(t){var c=t[0];u=t[1],a({pr:c})}o({gr:r,_r:u})},T=function(n,r){var t=C()[1],i={hr:t};return t&&!r&&(n?e:E)(i),i},_=function(n,r,t){var e={Sr:r};return r?!t&&E(e):w||A(n),e},I=(d||!L)&&bt(f,H),N=!w&&wt(f,B,{Dr:!0,Tr:!x}),X=yt(f,!1,_,{Mr:Lt,Ir:Lt.concat(Ot)}),Y=X[0],q=X[1],K=w&&new an(B.bind(0,{gr:!0}));return K&&K.observe(f),A(),[function(){c&&c[0](),I&&I[0](),N&&N(),K&&K.disconnect(),Y()},function(){var n={},r=q(),t=c&&c[1](),e=I&&I[1]();return r&&R(n,_.apply(0,S(r,!0))),t&&R(n,T.apply(0,S(t,!0))),e&&R(n,H.apply(0,S(e,!0))),n},function(n){var r=n("updating.ignoreMutation")[0],t=n("updating.attributes"),e=t[0],i=t[1],a=n("updating.elementEvents"),f=a[0],v=a[1],h=n("updating.debounce"),w=h[0],b=h[1],y=function(n){return p(r)&&r(n)};if((v||i)&&(c&&(c[1](),c[0]()),c=yt(d||l,!0,T,{Mr:D.concat(e||[]),Ir:D.concat(e||[]),Hr:f,Rr:mt,jr:function(n,r){var t=n.target,e=n.attributeName;return!(r||!e)&&W(t,mt,xt)||!!V(t,"."+hr)||!!y(n)}})),b)if(E.S(),g(w)){var m=w[0],x=w[1];o=!!s(m)&&m,u=!!s(x)&&x}else s(w)?(o=w,u=!1):(o=!1,u=!1)}]},Ct={x:0,y:0},Dt={ar:{t:0,r:0,b:0,l:0},wr:!1,H:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Cr:Ct,Or:Ct,yr:{x:"hidden",y:"hidden"},Er:{x:!1,y:!1},sr:!1,pr:!1},Mt=function(n,t){var e=Yn(t,{}),i=qn(Dt),o=Vn(),u=o[0],c=o[1],a=o[2],f=i[0],l=nt(n),d=l[0],s=l[1],v=l[2],h=function(n,t){var e=n.rr,i=qr(),o=i.D,u=i.L,c=i.F,a=!o&&(u.x||u.y),f=[rt(n,t),tt(n,t),st(n,t)];return function(n,t,i){var o=vt(R({gr:!1,br:!1,_r:!1,dr:!1,Ar:!1,Pr:!1,zr:!1,Sr:!1,hr:!1},t),{},i),u=a||!c,l=u&&j(e),d=u&&k(e),s=o;return r(f,(function(r){s=vt(s,r(s,n,!!i)||{},i)})),j(e,l),k(e,d),s}}(d,i),p=function(n,r,t){var e=M(n).some((function(r){return n[r]}));(e||!E(r)||t)&&a("u",[n,r,t])},g=Pt(d,i,(function(n){p(h(e,n),{},!1)})),w=g[0],b=g[1],y=g[2],m=f.bind(0);return m.kr=function(n){u("u",n)},m.Br=s,m.Fr=d,[function(n,r){var e=Yn(t,n,r);y(e),p(h(e,b(),r),n,!!r)},m,function(){c(),w(),v()}]},Rt="touchstart mouseenter",Et="touchend touchcancel mouseleave",At=function(n,r){return Tn(n,"mousedown",Tn.bind(0,r,"click",_n,{A:!0,O:!0}),{O:!0})},zt=function(n,e){var i=(0,qr().U)().scrollbarsSlot,o=e.ir,u=e.J,c=e.K,a=e.rr,f=e.ur?null:n.scrollbarsSlot,l=Ur([u,c,a],(function(){return c}),i,f),d=function(n,t,e,i){var o=e?gn:pn;r(n,(function(n){o((i||On)(n)||n.qr,t)}))},s=function(n,e){r(n,(function(n){var r=e(n);t(r[0],r[1])}))},v=[],h=[],p=[],g=d.bind(0,h),w=d.bind(0,p),b=function(n){var r=n?pr:gr,t=n?h:p,e=P(t)?xr:"",i=G(hr+" "+r+" "+e),u=G(wr),c=G(br),a={qr:i,Ur:u,Nr:c};return q(i,u),q(u,c),S(t,a),S(v,[Z.bind(0,i),Tn(i,Rt,(function(){g(Or,!0),w(Or,!0)})),Tn(i,Et,(function(){g(Or),w(Or)})),At(i,o)]),a},y=b.bind(0,!0),m=b.bind(0,!1);return y(),m(),[{Yr:{Wr:h,Gr:y,Xr:g,Zr:s.bind(0,h)},$r:{Wr:p,Gr:m,Xr:w,Zr:s.bind(0,p)}},function(){q(l,h[0].qr),q(l,p[0].qr),dn((function(){g(xr),w(xr)}),300)},C.bind(0,v)]},Ht=Math.min,Bt=function(n){var r,t=n?dn:ln,e=n?sn:fn;return[function(i){e(r),r=t(i,p(n)?n():n)},function(){return e(r)}]},Ft=function(n,r,t){var e=r.Or,i=r.Cr,o=t?"x":"y",u=i[o],c=e[o],a=Ht(1,u/(u+c));n((function(n){var r;return[n.Nr,(r={},r[t?"width":"height"]=(100*a).toFixed(3)+"%",r)]}))},jt=function(n,r,t){var e,i,o,u,c,a=0,f=qn({})[0],l=Bt(),d=l[0],s=l[1],v=Bt(),h=v[0],p=v[1],g=Bt(100),w=g[0],b=g[1],y=Bt(100),m=y[0],x=y[1],O=Bt((function(){return a})),S=O[0],L=O[1],P=zt(n,t.Fr),D=P[0],M=P[1],R=P[2],E=t.Fr,A=E.K,z=E.rr,H=D.Yr,B=D.$r,F=H.Xr,j=H.Zr,k=B.Xr,T=B.Zr,_=function(n,r){if(L(),n)F(Sr),k(Sr);else{var t=function(){F(Sr,!0),k(Sr,!0)};a>0&&!r?S(t):t()}},I=function(){(u=i)&&_(!0)},N=[b,L,x,p,s,R,Tn(A,"mouseover",I,{A:!0}),Tn(A,"mouseenter",I),Tn(A,"mouseleave",(function(){u=!1,i&&_(!1)})),Tn(A,"mousemove",(function(){e&&d((function(){b(),_(!0),m((function(){e&&_(!1)}))}))})),Tn(z,"scroll",(function(){o&&h((function(){_(!0),w((function(){o&&!u&&_(!1)}))}))}))],X=f.bind(0);return X.Fr=D,X.Br=M,[function(n,u,f){var l=f.Ar,d=f.Pr,s=f.zr,v=Yn(r,n,u),h=t(),p=v("scrollbars.theme"),g=p[0],w=p[1],b=v("scrollbars.visibility"),y=b[0],m=b[1],x=v("scrollbars.autoHide"),O=x[0],S=x[1],L=v("scrollbars.autoHideDelay")[0];v("scrollbars.dragScrolling"),v("scrollbars.touchSupport");var P=l||d,C=function(n,r){var t="visible"===y||"auto"===y&&"scroll"===n;return r(yr,t),t};if(a=L,s||m){var D=h.yr,M=C(D.x,F),R=C(D.y,k),E=M&&R;F(mr,!E),k(mr,!E)}w&&(F(c),k(c),F(g,!0),k(g,!0),c=g),S&&(e="move"===O,i="leave"===O,_(!(o="never"!==O),!0)),P&&(Ft(j,h,!0),Ft(T,h))},X,C.bind(0,N)]},kt=new Set,Tt=new WeakMap,_t=function n(t,e,i){var o=!1,u=qr(),c=u.Y,a=u.q,f=Mr(),l=m(t),d=l?t:t.target,s=function(n){return Tt.get(n)}(d);if(s)return s;var v=f[Hr],h=function(n){var r=n||{},t=v&&v.P;return t?t(r,!0):r},g=R({},c(),h(e)),w=Vn(i),b=w[0],y=w[1],x=w[2],O=Mt(t,g),S=O[0],L=O[1],P=O[2],C=jt(t,g,L),D=C[0],A=C[1],z=C[2],H=function(n,r){S(n,!!r)},B=a(H.bind(0,{},!0)),F=function(n){!function(n){Tt.delete(n),kt.delete(n)}(d),B(),z(),P(),o=!0,x("destroyed",[j,!!n]),y()},j={options:function(n){if(n){var r=Cr(g,h(n));E(r)||(R(g,r),H(r))}return R({},g)},on:b,off:function(n,r){n&&r&&y(n,r)},state:function(){var n=L(),r=n.Cr,t=n.Or,e=n.yr,i=n.Er,u=n.ar,c=n.wr;return R({},{overflowEdge:r,overflowAmount:t,overflowStyle:e,hasOverflow:i,padding:u,paddingAbsolute:c,destroyed:o})},elements:function(){var n=L.Fr,r=n.J,t=n.K,e=n.ar,i=n.rr,o=n.er;return R({},{target:r,host:t,padding:e||i,viewport:i,content:o||i})},update:function(n){return H({},n),j},destroy:F.bind(0)};return L.kr((function(n,r,t){D(r,t,n)})),r(M(f),(function(r){var t=f[r];p(t)&&t(n,j)})),Zr(!l&&t.cancel,L.Fr)?(F(!0),j):(L.Br(),A.Br(),function(n,r){Tt.set(n,r),kt.add(n)}(d,j),x("initialized",[j]),L.kr((function(n,r,t){var e=n.gr,i=n._r,o=n.dr,u=n.Ar,c=n.Pr,a=n.zr,f=n.hr,l=n.Sr;x("updated",[j,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowEdgeChanged:u,overflowAmountChanged:c,overflowStyleChanged:a,contentMutation:f,hostMutation:l},changedOptions:r,force:t}])})),j.update(!0))};_t.plugin=function(n){r(g(n)?n:[n],(function(n){r(M(n),(function(r){Dr[r]=n[r]}))}))},_t.env=function(){var n=qr(),r=n.k,t=n.L,e=n.D,i=n.B,o=n.F,u=n.I,c=n.G,a=n.X,f=n.U,l=n.N,d=n.Y,s=n.W;return R({},{scrollbarsSize:r,scrollbarsOverlaid:t,scrollbarsHiding:e,rtlScrollBehavior:i,flexboxGlue:o,cssCustomProperties:u,staticDefaultInitialization:c,staticDefaultOptions:a,getDefaultInitialization:f,setDefaultInitialization:l,getDefaultOptions:d,setDefaultOptions:s})},n.OverlayScrollbars=_t,n.scrollbarsHidingPlugin=Xr,n.sizeObserverPlugin=kr,Object.defineProperty(n,"v",{value:!0})})); \ No newline at end of file +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars={})}(this,(function(n){"use strict";function r(n,t){if(b(n))for(var e=0;e-1&&r%1==0;return!(!(g(n)||!p(n)&&t)||r>0&&w(n)&&!(r-1 in n))},y=function(n){if(!n||!w(n)||"object"!==d(n))return!1;var r,t="constructor",e=n[t],i=e&&e.prototype,o=a.call(n,t),u=i&&a.call(i,"isPrototypeOf");if(e&&!o&&!u)return!1;for(r in n);return f(r)||a.call(n,r)},m=function(n){var r=HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===o)},x=function(n){var r=Element;return!!n&&(r?n instanceof r:n.nodeType===o)},O=function(n,r,t){return n.indexOf(r,t)},S=function(n,r,t){return t||v(r)||!b(r)?n.push(r):Array.prototype.push.apply(n,r),n},L=function(n){var t=Array.from,e=[];return t&&n?t(n):(n instanceof Set?n.forEach((function(n){S(e,n)})):r(n,(function(n){S(e,n)})),e)},P=function(n){return!!n&&0===n.length},C=function(n,t,e){r(n,(function(n){return n&&n.apply(void 0,t||[])})),!e&&(n.length=0)},D=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},M=function(n){return n?Object.keys(n):[]},R=function n(t,e,i,o,u,c,a){var f=[e,i,o,u,c,a];return"object"==typeof t&&!l(t)||p(t)||(t={}),r(f,(function(e){r(M(e),(function(r){var i=e[r];if(t===i)return!0;var o=g(i);if(i&&(y(i)||o)){var u=t[r],c=u;o&&!g(u)?c=[]:o||y(u)||(c={}),t[r]=n(c,i)}else t[r]=i}))})),t},E=function(n){for(var r in n)return!1;return!0},A=function(n,r,t,e){if(f(e))return t?t[n]:r;t&&!l(e)&&!1!==e&&(t[n]=e)},z=function(n,r,t){if(f(t))return n?n.getAttribute(r):null;n&&n.setAttribute(r,t)},H=function(n,r,t,e){if(t){var i=z(n,r)||"",o=new Set(i.split(" "));o[e?"add":"delete"](t),z(n,r,L(o).join(" ").trim())}},B=function(n,r,t){var e=z(n,r)||"";return new Set(e.split(" ")).has(t)},F=function(n,r){n&&n.removeAttribute(r)},j=function(n,r){return A("scrollLeft",0,n,r)},k=function(n,r){return A("scrollTop",0,n,r)},T=Element.prototype,_=function(n,r){var t=[],e=r?x(r)?r:null:document;return e?S(t,e.querySelectorAll(n)):t},I=function(n,r){return!!x(n)&&(T.matches||T.msMatchesSelector).call(n,r)},N=function(n){return n?L(n.childNodes):[]},X=function(n){return n?n.parentElement:null},V=function(n,r){if(x(n)){var t=T.closest;if(t)return t.call(n,r);do{if(I(n,r))return n;n=X(n)}while(n)}return null},W=function(n,r,t){var e=n&&V(n,r),i=n&&function(n,r){var t=r?x(r)?r:null:document;return t?t.querySelector(n):null}(t,e);return!(!e||!i||e!==n&&i!==n&&V(V(n,t),r)===e)},Y=function(n,t,e){if(e){var i,o=t;n&&(b(e)?(i=document.createDocumentFragment(),r(e,(function(n){n===o&&(o=n.previousSibling),i.appendChild(n)}))):i=e,t&&(o?o!==t&&(o=o.nextSibling):o=n.firstChild),n.insertBefore(i,o||null))}},q=function(n,r){Y(n,null,r)},K=function(n,r){Y(n,n&&n.firstChild,r)},$=function(n,r){Y(X(n),n,r)},U=function(n,r){Y(X(n),n&&n.nextSibling,r)},Z=function n(t){if(b(t))r(L(t),(function(r){return n(r)}));else if(t){var e=X(t);e&&e.removeChild(t)}},G=function(n){var r=document.createElement("div");return n&&z(r,"class",n),r},J=function(n){var t=G();return t.innerHTML=n.trim(),r(N(t),(function(n){return Z(n)}))},Q=function(n){return n.charAt(0).toUpperCase()+n.slice(1)},nn=["-webkit-","-moz-","-o-","-ms-"],rn=["WebKit","Moz","O","MS","webkit","moz","o","ms"],tn={},en={},on=function(n){var t=tn[n]||window[n];return D(tn,n)||(r(rn,(function(r){return!(t=t||window[r+Q(n)])})),tn[n]=t),t},un=on("MutationObserver"),cn=on("IntersectionObserver"),an=on("ResizeObserver"),fn=on("cancelAnimationFrame"),ln=on("requestAnimationFrame"),dn=window.setTimeout,sn=window.clearTimeout,vn=/[^\x20\t\r\n\f]+/g,hn=function(n,r,t){var e,i=n&&n.classList,o=0,u=!1;if(i&&r&&v(r)){var c=r.match(vn)||[];for(u=c.length>0;e=c[o++];)u=!!t(i,e)&&u}return u},pn=function(n,r){hn(n,r,(function(n,r){return n.remove(r)}))},gn=function(n,r){return hn(n,r,(function(n,r){return n.add(r)})),pn.bind(0,n,r)},wn=function(n,t,e,i){if(n&&t){var o=!0;return r(e,(function(r){(i?i(n[r]):n[r])!==(i?i(t[r]):t[r])&&(o=!1)})),o}return!1},bn=function(n,r){return wn(n,r,["w","h"])},yn=function(n,r){return wn(n,r,["x","y"])},mn=function(n,r){return wn(n,r,["t","r","b","l"])},xn=function(n,r,t){return wn(n,r,["width","height"],t&&function(n){return Math.round(n)})},On=function(){},Sn=function(n,r){var t,e,i,o=On,u=r||{},c=u.p,a=u._,f=u.m,l=function(r){o(),sn(t),t=e=void 0,o=On,n.apply(this,r)},d=function(n){return f&&e?f(e,n):n},v=function(){o!==On&&l(d(i)||i)},h=function(){var n=L(arguments),r=p(c)?c():c,u=s(r)&&r>=0;if(u){var f=p(a)?a():a,h=s(f)&&f>=0,g=r>0?dn:ln,w=r>0?sn:fn,b=d(n),y=b||n,m=l.bind(0,y);o();var x=g(m,r);o=function(){return w(x)},h&&!t&&(t=dn(v,f)),e=i=y}else l(n)};return h.S=v,h},Ln={opacity:1,zindex:1},Pn=function(n,r){var t=r?parseFloat(n):parseInt(n,10);return t==t?t:0},Cn=function(n,r,t){return null!=r?r[t]||r.getPropertyValue(t):n.style[t]},Dn=function(n,r,t){try{if(n){var e=n.style;f(e[r])?e.setProperty(r,t):e[r]=function(n,r){return!Ln[n.toLowerCase()]&&s(r)?r+"px":r}(r,t)}}catch(c){}},Mn=function(n,r,e){var i=r?r+"-":"",o=e?"-"+e:"",u=i+"top"+o,c=i+"right"+o,a=i+"bottom"+o,f=i+"left"+o,l=t(n,[u,c,a,f]);return{t:Pn(l[u]),r:Pn(l[c]),b:Pn(l[a]),l:Pn(l[f])}},Rn={w:0,h:0},En=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:Rn},An=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:Rn},zn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:Rn},Hn=function(n){var r=parseFloat(t(n,"height"))||0,e=parseFloat(t(n,"height"))||0;return{w:e-Math.round(e),h:r-Math.round(r)}},Bn=function(n){return n.getBoundingClientRect()},Fn=function(){if(f(e)){e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(n){}}return e},jn=function(n){return n.split(" ")},kn=function(n,t,e,i){r(jn(t),(function(r){n.removeEventListener(r,e,i)}))},Tn=function(n,t,e,i){var o,u=Fn(),c=null!=(o=u&&i&&i.C)?o:u,a=i&&i.O||!1,f=i&&i.A||!1,l=[],d=u?{passive:c,capture:a}:a;return r(jn(t),(function(r){var t=f?function(i){n.removeEventListener(r,t,a),e&&e(i)}:e;S(l,kn.bind(null,n,r,t,a)),n.addEventListener(r,t,d)})),C.bind(0,l)},_n=function(n){return n.stopPropagation()},In={x:0,y:0},Nn=function(n){var r=n?Bn(n):0;return r?{x:r.left+window.pageYOffset,y:r.top+window.pageXOffset}:In},Xn=function(n,t){r(g(t)?t:[t],n)},Vn=function(n){var t=new Map,e=function(n,r){if(n){var e=t.get(n);Xn((function(n){e&&e[n?"delete":"clear"](n)}),r)}else t.forEach((function(n){n.clear()})),t.clear()},i=function(n,r){var i=t.get(n)||new Set;return t.set(n,i),Xn((function(n){n&&i.add(n)}),r),e.bind(0,n,r)};return r(M(n),(function(r){i(r,n[r])})),[i,e,function(n,e){var i=t.get(n);r(L(i),(function(n){e&&!P(e)?n.apply(0,e):n()}))}]},Wn=function(n,r){return n?r.split(".").reduce((function(n,r){return n&&D(n,r)?n[r]:void 0}),n):void 0},Yn=function(n,r,t){return function(e){return[Wn(n,e),t||void 0!==Wn(r,e)]}},qn=function(n){var r=n;return[function(){return r},function(n){r=R({},r,n)}]},Kn="os-environment",$n=Kn+"-flexbox-glue",Un=$n+"-max",Zn="data-overlayscrollbars",Gn=Zn+"-overflow-x",Jn=Zn+"-overflow-y",Qn="overflowVisible",nr="scrollbarHidden",rr="os-padding",tr="os-viewport",er=tr+"-arrange",ir="os-content",or=tr+"-scrollbar-hidden",ur="os-overflow-visible",cr="os-size-observer",ar=cr+"-appear",fr=cr+"-listener",lr=fr+"-scroll",dr=fr+"-item",sr=dr+"-final",vr="os-trinsic-observer",hr="os-scrollbar",pr=hr+"-horizontal",gr=hr+"-vertical",wr="os-scrollbar-track",br="os-scrollbar-handle",yr=hr+"-visible",mr=hr+"-cornerless",xr=hr+"-transitionless",Or=hr+"-interaction",Sr=hr+"-auto-hidden",Lr=function(n){return JSON.stringify(n,(function(n,r){if(p(r))throw new Error;return r}))},Pr={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},Cr=function n(t,e){var i={};return r(M(e).concat(M(t)),(function(r){var o=t[r],u=e[r];if(w(o)&&w(u))R(i[r]={},n(o,u));else if(D(e,r)&&u!==o){var c=!0;if(g(o)||g(u))try{Lr(o)===Lr(u)&&(c=!1)}catch(l){}c&&(i[r]=u)}})),i},Dr={},Mr=function(){return R({},Dr)},Rr={exports:{}};!function(n){function r(){return n.exports=r=Object.assign?Object.assign.bind():function(n){for(var r=1;r
');q(n,i),gn(n,lr);var o,u=i[0],c=u.lastChild,a=u.firstChild,f=null==a?void 0:a.firstChild,l=En(u),d=l,s=!1,v=function(){j(a,Br),k(a,Br),j(c,Br),k(c,Br)},h=function(n){o=0,s&&(l=d,r(!0===n))},p=function(n){d=En(u),s=!n||!bn(d,l),n?(_n(n),s&&!o&&(fn(o),o=ln(h))):h(!1===n),v()},g=S([],[Tn(a,Fr,p),Tn(c,Fr,p)]);return t(f,{width:Br,height:Br}),v(),[e?p.bind(0,!1):v,g]}},Er),Tr=0,_r=Math.round,Ir=Math.abs,Nr="__osScrollbarsHidingPlugin",Xr=((Ar={})[Nr]={T:function(n){var r=n.D,t=n.L,e=!(n.I||r||!t.x&&!t.y)&&document.createElement("style");return e&&(z(e,"id",er+"-"+Tr),Tr++),e},M:function(n,e,i,o,u,c,a){return[function(r,e,c,a){if(n){var f=u().H,l=r.R,d=r.V,s=d.x,v=d.y,h=l.x,p=l.y,g=f[a?"paddingRight":"paddingLeft"],w=f.paddingTop,b=e.w+c.w,y=e.h+c.h,m={w:p&&v?p+b-g+"px":"",h:h&&s?h+y-w+"px":""};if(o){var x=o.sheet;if(x){var O=x.cssRules;if(O){O.length||x.insertRule("#"+z(o,"id")+" + ."+er+"::before {}",0);var S=O[0].style;S.width=m.w,S.height=m.h}}}else t(i,{"--os-vaw":m.w,"--os-vah":m.h})}return n},function(o,f,l){if(n){var d=l||c(o),s=u().H,v=d.V,h=v.x,p=v.y,g={},w=function(n){return r(n.split(" "),(function(n){g[n]=s[n]}))};h&&w("marginBottom paddingTop paddingBottom"),p&&w("marginLeft marginRight paddingLeft paddingRight");var b=t(i,M(g));return pn(i,er),e||(g.height=""),t(i,g),[function(){a(d,f,n,b),t(i,b),gn(i,er)},d]}return[On]}]},j:function(){var n={w:0,h:0},r=0;return function(t,e,i){var o={w:window.innerWidth,h:window.innerHeight},u={w:o.w-n.w,h:o.h-n.h};if(0!==u.w||0!==u.h){var c=Ir(u.w),a=Ir(u.h),f={w:Ir(_r(o.w/(n.w/100))),h:Ir(_r(o.h/(n.h/100)))},l=function(){var n=window.screen.deviceXDPI||0,r=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/r}(),d=c>2&&a>2,s=!function(n,r){var t=Ir(n),e=Ir(r);return!(t===e||t+1===e||t-1===e)}(f.w,f.h);if(d&&s&&l!==r&&l>0){var v=e(),h=v[0],p=v[1];R(t.k,h),p&&i()}n=o,r=l}}}},Ar),Vr=function(n,r,t,e){q(n,r);var i=An(r),o=En(r),u=Hn(t);return e&&Z(r),{x:o.h-i.h+u.h,y:o.w-i.w+u.w}},Wr=function(n,r){var e="hidden";t(n,{overflowX:e,overflowY:e,direction:"rtl"}),j(n,0);var i=Nn(n),o=Nn(r);j(n,-999);var u=Nn(r);return{i:i.x===o.x,n:o.x!==u.x}},Yr=function(n,r){var t=gn(n,$n),e=Bn(n),i=Bn(r),o=xn(i,e,!0),u=gn(n,Un),c=Bn(n),a=Bn(r),f=xn(a,c,!0);return t(),u(),o&&f},qr=function(){return zr||(zr=function(){var n,e=document.body,o=J('
')[0],c=o.firstChild,a=Vn(),f=a[0],l=a[2],d=i({o:Vr(e,o,c),u:yn},Vr.bind(0,e,o,c,!0)),s=d[0],v=(0,d[1])()[0],h=function(n){var e=!1,i=gn(n,or);try{e="none"===t(n,function(n){var t=en[n];if(D(en,n))return t;var e=Q(n),i=G().style;return r(nn,(function(r){var o=r.replace(/-/g,""),u=[n,r+n,o+e,Q(o)+e];return!(t=u.find((function(n){return void 0!==i[n]})))})),en[n]=t||""}("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(u){}return i(),e}(o),p={x:0===v.x,y:0===v.y},g={padding:!h,content:!1,cancel:{nativeScrollbarsOverlaid:!0,body:null}},w=R({},Pr),b={k:v,L:p,D:h,I:"-1"===t(o,"zIndex"),B:Wr(o,c),F:Yr(o,c),q:function(n){return f("_",n)},U:R.bind(0,{},g),N:function(n){R(g,n)},Y:R.bind(0,{},w),W:function(n){R(w,n)},G:R({},g),X:R({},w)};return F(o,"style"),Z(o),h||p.x&&p.y||window.addEventListener("resize",(function(){var r=Mr()[Nr];(n=n||r&&r.j())&&n(b,s,l.bind(0,"_"))})),b}()),zr},Kr=function(n,r){return p(n)?n.apply(0,r):n},$r=function(n,r,t,e){return Kr(e||Kr(t,n),n)||r.apply(0,n)},Ur=function(n,r,t,e){var i=Kr(e,n);return(l(i)||f(i))&&(i=Kr(t,n)),!0===i||l(i)||f(i)?r.apply(0,n):i},Zr=function(n,r){var t=n||{},e=t.nativeScrollbarsOverlaid,i=t.body,o=r.Z,u=r.$,c=qr(),a=c.U,f=c.L,d=a().cancel,s=d.nativeScrollbarsOverlaid,v=d.body,p=null!=e?e:s,g=h(i)||l(i)?i:v,w=(f.x||f.y)&&p,b=o&&(l(g)?!u:g);return!!w||!!b},Gr=G.bind(0,""),Jr=function(n){q(X(n),N(n)),Z(n)},Qr=function(n,r){return z(n,Zn,r),F.bind(0,n,Zn)},nt=function(n){var r=qr(),t=r.U,e=r.D,i=Mr()[Nr],o=i&&i.T,u=t(),c=u.host,a=u.viewport,f=u.padding,l=u.content,d=m(n),s=d?{}:n,v=s.host,h=s.padding,p=s.viewport,g=s.content,w=d?n:s.target,b=I(w,"textarea"),y=w.ownerDocument,x=w===y.body,L=y.defaultView,P=(x||!!an&&!b)&&e,R=$r.bind(0,[w]),E=Ur.bind(0,[w]),A=[R(Gr,a,x&&!D(s,"viewport")?w:p),R(Gr,a),R(Gr)].filter((function(n){return!!P||n!==w}))[0],z=A===w,j={J:w,K:b?R(Gr,c,v):w,rr:A,ar:!z&&E(Gr,f,h),er:!z&&E(Gr,l,g),nr:!z&&!e&&o&&o(r),tr:L,ir:y,vr:b,Z:x,ur:d,$:z,lr:function(n,r){return z?B(A,Zn,r):function(n,r){return hn(n,r,(function(n,r){return n.contains(r)}))}(A,n)},cr:function(n,r,t){return z?H(A,Zn,r,t):(t?gn:pn)(A,n)}},k=M(j).reduce((function(n,r){var t=j[r];return S(n,!(!t||X(t))&&t)}),[]),T=function(n){return n?O(k,n)>-1:null},_=j.J,V=j.K,W=j.ar,Y=j.rr,K=j.er,G=j.nr,J=[],Q=b&&T(V),nn=b?_:N([K,Y,W,V,_].find((function(n){return!1===T(n)}))),rn=K||Y;return[j,function(){var n=Qr(V,z?"viewport":"host"),r=gn(W,rr),t=gn(Y,!z&&tr),i=gn(K,ir),o=x?gn(X(w),or):On;Q&&(U(_,V),S(J,(function(){U(V,_),Z(V)}))),q(rn,nn),q(V,W),q(W||V,!z&&Y),q(Y,K),S(J,(function(){o(),n(),F(Y,Gn),F(Y,Jn),T(K)&&Jr(K),T(Y)&&Jr(Y),T(W)&&Jr(W),r(),t(),i()})),e&&!z&&S(J,pn.bind(0,Y,or)),G&&($(Y,G),S(J,Z.bind(0,G)))},C.bind(0,J)]},rt=function(n,r){var e=n.er,i=r[0];return function(n){var r=qr().F,o=i().sr,u=n.dr,c=(e||!r)&&u;return c&&t(e,{height:o?"":"100%"}),{gr:c,hr:c}}},tt=function(n,r){var e=r[0],o=r[1],u=n.K,c=n.ar,a=n.rr,f=n.$,l=i({u:mn,o:Mn()},Mn.bind(0,u,"padding","")),d=l[0],s=l[1];return function(n,r,i){var u=s(i),l=u[0],v=u[1],h=qr(),p=h.D,g=h.F,w=e().pr,b=n.gr,y=n.hr,m=n._r,x=r("paddingAbsolute"),O=x[0],S=x[1];if(b||v||!g&&y){var L=d(i);l=L[0],v=L[1]}var P=!f&&(S||m||v);if(P){var C=!O||!c&&!p,D=l.r+l.l,M=l.t+l.b,E={marginRight:C&&!w?-D:0,marginBottom:C?-M:0,marginLeft:C&&w?-D:0,top:C?-l.t:0,right:C?w?-l.r:"auto":0,left:C?w?"auto":-l.l:0,width:C?"calc(100% + "+D+"px)":""},A={paddingTop:C?l.t:0,paddingRight:C?l.r:0,paddingBottom:C?l.b:0,paddingLeft:C?l.l:0};t(c||a,E),t(a,A),o({ar:l,wr:!C,H:c?A:R({},E,A)})}return{br:P}}},et=Math.max,it=et.bind(0,0),ot="visible",ut="hidden",ct=42,at={u:bn,o:{w:0,h:0}},ft={u:yn,o:{x:ut,y:ut}},lt=function(n,r,t){return t?gn(n,r):pn(n,r)},dt=function(n){return 0===n.indexOf(ot)},st=function(n,r){var e=r[0],o=r[1],u=n.K,c=n.ar,a=n.rr,f=n.nr,l=n.$,d=n.cr,s=qr(),v=s.k,h=s.F,p=s.D,g=s.L,w=Mr()[Nr],b=!l&&!p&&(g.x||g.y),y=i(at,Hn.bind(0,a)),m=y[0],x=y[1],O=i(at,zn.bind(0,a)),S=O[0],L=O[1],P=i(at),C=P[0],D=P[1],M=i(at),R=M[0],E=M[1],A=i(ft)[0],B=function(n,r){if(t(a,{height:""}),r){var i=e(),o=i.wr,c=i.ar,f=n.mr,l=n.R,d=Hn(u),s=An(u),v="content-box"===t(a,"boxSizing"),h=o||v?c.b+c.t:0,p=!(g.x&&v);t(a,{height:s.h+d.h+(f.x&&p?l.x:0)-h})}},F=function(n,r){var e=p||n?0:ct,i=function(n,i,o){var u=t(a,n),c="scroll"===(r?r[n]:u);return[u,c,c&&!p?i?e:o:0,i&&!!e]},o=i("overflowX",g.x,v.x),u=o[0],c=o[1],f=o[2],l=o[3],d=i("overflowY",g.y,v.y);return{yr:{x:u,y:d[0]},mr:{x:c,y:d[1]},R:{x:f,y:d[2]},V:{x:l,y:d[3]}}},j=function(n,r,t,i){var o=n.R,u=n.V,c=u.x,a=u.y,f=o.x,l=o.y,d=e().H,s=r?"marginLeft":"marginRight",v=r?"paddingLeft":"paddingRight",h=d[s],p=d.marginBottom,g=d[v],w=d.paddingBottom;i.width="calc(100% + "+(l+-1*h)+"px)",i[s]=-l+h,i.marginBottom=-f+p,t&&(i[v]=g+(a?l:0),i.paddingBottom=w+(c?f:0))},k=w?w.M(b,h,a,f,e,F,j):[function(){return b},function(){return[On]}],T=k[0],_=k[1];return function(n,r,i){var f,s=n.gr,v=n.Sr,w=n.hr,b=n.br,y=n.dr,O=n._r,P=e(),M=P.sr,k=P.pr,I=r("showNativeOverlaidScrollbars"),N=I[0],X=I[1],V=r("overflow"),W=V[0],Y=V[1],q=N&&g.x&&g.y,K=!l&&!h&&(s||w||v||X||y),$=dt(W.x),U=dt(W.y),Z=$||U,G=x(i),J=L(i),Q=D(i),nn=E(i);if(X&&p&&d(or,nr,!q),K&&(f=F(q),B(f,M)),s||b||w||O||X){Z&&d(ur,Qn,!1);var rn=_(q,k,f),tn=rn[0],en=rn[1],on=G=m(i),un=on[0],cn=on[1],an=J=S(i),fn=an[0],ln=an[1],dn=An(a),sn=fn,vn=dn;tn(),(ln||cn||X)&&en&&!q&&T(en,fn,un,k)&&(vn=An(a),sn=zn(a));var hn={w:it(et(fn.w,sn.w)+un.w),h:it(et(fn.h,sn.h)+un.h)},pn={w:it(vn.w+it(dn.w-fn.w)+un.w),h:it(vn.h+it(dn.h-fn.h)+un.h)};nn=R(pn),Q=C(function(n,r){var t=window.devicePixelRatio%1!=0?1:0,e={w:it(n.w-r.w),h:it(n.h-r.h)};return{w:e.w>t?e.w:0,h:e.h>t?e.h:0}}(hn,pn),i)}var gn=nn,wn=gn[0],bn=gn[1],yn=Q,mn=yn[0],xn=yn[1],On=J,Sn=On[0],Ln=On[1],Pn=G,Cn=Pn[0],Dn=Pn[1],Mn={x:mn.w>0,y:mn.h>0},Rn=$&&U&&(Mn.x||Mn.y)||$&&Mn.x&&!Mn.y||U&&Mn.y&&!Mn.x;if(b||O||Dn||Ln||bn||xn||Y||X||K){var En={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Hn=function(n,r,t,e){var i=function(n,r){var t=dt(n),e=r&&t&&n.replace(ot+"-","")||"";return[r&&!t?n:"",dt(e)?"hidden":e]},o=i(t.x,r.x),u=o[0],c=o[1],a=i(t.y,r.y),f=a[0],l=a[1];return e.overflowX=c&&f?c:u,e.overflowY=l&&u?l:f,F(n,e)}(q,Mn,W,En),Bn=T(Hn,Sn,Cn,k);l||j(Hn,k,Bn,En),K&&B(Hn,M),l?(z(u,Gn,En.overflowX),z(u,Jn,En.overflowY)):t(a,En)}H(u,Zn,Qn,Rn),lt(c,ur,Rn),!l&<(a,ur,Z);var Fn=A(F(q).yr),jn=Fn[0],kn=Fn[1];return o({yr:jn,Cr:{x:wn.w,y:wn.h},Or:{x:mn.w,y:mn.h},Er:Mn}),{zr:kn,Ar:bn,Pr:xn}}},vt=function(n,t,e){var i={},o=t||{};return r(M(n).concat(M(o)),(function(r){var t=n[r],u=o[r];i[r]=!!(e||t||u)})),i},ht=3333333,pt=function(n){return"rtl"===t(n,"direction")},gt=function(n){return n&&(n.height||n.width)},wt=function(n,r,t){var e=t||{},o=e.Tr,u=void 0!==o&&o,c=e.Dr,a=void 0!==c&&c,f=Mr()[jr],l=qr().B,d=J('
')[0],s=d.firstChild,v=pt.bind(0,d),p=i({o:void 0,g:!0,u:function(n,r){return!(!n||!gt(n)&>(r))}}),b=p[0],y=function(n){var t=g(n)&&n.length>0&&w(n[0]),e=!t&&h(n[0]),i=!1,o=!1,c=!0;if(t){var a=b(n.pop().contentRect),f=a[0],s=a[2],v=gt(f);o=!gt(s)&&v,c=!(i=!s||!v)}else e?c=n[1]:o=!0===n;if(u&&c){var p=e?n[0]:pt(d);j(d,p?l.n?-ht:l.i?0:ht:ht),k(d,ht)}i||r({gr:!e,Lr:e?n:void 0,Dr:!!o})},m=[],x=!!a&&y;if(an){var O=new an(y);O.observe(s),S(m,(function(){O.disconnect()}))}else if(f){var L=f.P(s,y,a),P=L[0],D=L[1];x=P,S(m,D)}if(u){var M=i({o:!v()},v)[0];S(m,Tn(d,"scroll",(function(n){var r=M(),t=r[0];r[1]&&(pn(s,"ltr rtl"),gn(s,t?"rtl":"ltr"),y(r)),_n(n)})))}return x&&(gn(d,ar),S(m,Tn(d,"animationstart",x,{A:!!an}))),K(n,d),function(){C(m),Z(d)}},bt=function(n,r){var t,e=G(vr),o=[],u=i({o:!1})[0],c=function(n,t){if(n){var e=u(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));if(e[1])return!t&&r(e),[e]}},a=function(n,r){if(n&&n.length>0)return c(n.pop(),r)};if(cn)(t=new cn((function(n){return a(n)}),{root:n})).observe(e),S(o,(function(){t.disconnect()}));else{var f=function(){var n=En(e);c(n)};S(o,wt(e,f)),f()}return K(n,e),[function(){C(o),Z(e)},function(){if(t)return a(t.takeRecords(),!0)}]},yt=function(n,t,e,i){var o=!1,u=i||{},c=u.Ir,a=u.Mr,f=u.Hr,l=u.Rr,d=u.Vr,s=u.jr,h=Sn((function(){o&&e(!0)}),{p:33,_:99}),p=function(n,t,e){var i,o=!1,u=function(u){if(e){var c=e.reduce((function(r,t){if(t){var e=t[0],i=t[1],o=i&&e&&(u?u(e):_(e,n));o&&o.length&&i&&v(i)&&S(r,[o,i.trim()],!0)}return r}),[]);r(c,(function(n){return r(n[0],(function(r){var e=n[1],u=i.get(r);if(u){var c=u[0],a=u[1];c===e&&a()}var f=function n(u){o?(kn(r,e,n),i.delete(r)):t(u)};Tn(r,e,f),i.set(r,[e,function(){return kn(r,e,f)}])}))}))}};return e&&(i=new WeakMap,u()),[function(){o=!0},u]}(n,h,f),g=p[0],w=p[1],b=a||[],y=(c||[]).concat(b),m=function(o,u){var c=d||On,a=s||On,f=[],h=[],p=!1,g=!1,y=!1;return r(o,(function(r){var e=r.attributeName,o=r.target,u=r.type,d=r.oldValue,s=r.addedNodes,w="attributes"===u,m="childList"===u,x=n===o,L=w&&v(e)?z(o,e):0,P=0!==L&&d!==L,C=O(b,e)>-1&&P;if(t&&!x){var D=!w,M=w&&C,R=M&&l&&I(o,l),E=(R?!c(o,e,d,L):D||M)&&!a(r,!!R,n,i);S(h,s),g=g||E,y=y||m}!t&&x&&P&&!c(o,e,d,L)&&(S(f,e),p=p||C)})),y&&!P(h)&&w((function(n){return h.reduce((function(r,t){return S(r,_(n,t)),I(t,n)?S(r,t):r}),[])})),t?(!u&&g&&e(!1),[!1]):!P(f)||p?(!u&&e(f,p),[f,p]):void 0},x=new un((function(n){return m(n)}));return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(g(),x.disconnect(),o=!1)},function(){if(o){h.S();var n=x.takeRecords();return!P(n)&&m(n,!0)}}]},mt="["+Zn+"]",xt="."+tr,Ot=["tabindex"],St=["wrap","cols","rows"],Lt=["id","class","style","open"],Pt=function(n,t,e){var o,u,c,a=t[1],f=n.K,l=n.rr,d=n.er,h=n.vr,w=n.$,b=n.lr,y=n.cr,m=qr(),x=m.D,L=m.F,P=i({u:bn,o:{w:0,h:0}},(function(){var n=b(ur,Qn),r=b(er,""),t=r&&j(l),e=r&&k(l);y(ur,Qn),y(er,"");var i=zn(d),o=zn(l),u=Hn(l);return y(ur,Qn,n),y(er,"",r),j(l,t),k(l,e),{w:o.w+i.w+u.w,h:o.h+i.h+u.h}})),C=P[0],D=h?St:Lt.concat(St),E=Sn(e,{p:function(){return o},_:function(){return u},m:function(n,r){var t=n[0],e=r[0];return[M(t).concat(M(e)).reduce((function(n,r){return n[r]=t[r]||e[r],n}),{})]}}),A=function(n){r(n||Ot,(function(n){if(O(Ot,n)>-1){var r=z(f,n);v(r)?z(l,n,r):F(l,n)}}))},H=function(n,r){var t=n[0],i={dr:n[1]};return a({sr:t}),!r&&e(i),i},B=function(n){var r=n.gr,t=n.Lr,i=n.Dr,o=!r||i?e:E,u=!1;if(t){var c=t[0];u=t[1],a({pr:c})}o({gr:r,_r:u})},T=function(n,r){var t=C()[1],i={hr:t};return t&&!r&&(n?e:E)(i),i},_=function(n,r,t){var e={Sr:r};return r?!t&&E(e):w||A(n),e},I=(d||!L)&&bt(f,H),N=!w&&wt(f,B,{Dr:!0,Tr:!x}),X=yt(f,!1,_,{Mr:Lt,Ir:Lt.concat(Ot)}),Y=X[0],q=X[1],K=w&&new an(B.bind(0,{gr:!0}));return K&&K.observe(f),A(),[function(){c&&c[0](),I&&I[0](),N&&N(),K&&K.disconnect(),Y()},function(){var n={},r=q(),t=c&&c[1](),e=I&&I[1]();return r&&R(n,_.apply(0,S(r,!0))),t&&R(n,T.apply(0,S(t,!0))),e&&R(n,H.apply(0,S(e,!0))),n},function(n){var r=n("updating.ignoreMutation")[0],t=n("updating.attributes"),e=t[0],i=t[1],a=n("updating.elementEvents"),f=a[0],v=a[1],h=n("updating.debounce"),w=h[0],b=h[1],y=function(n){return p(r)&&r(n)};if((v||i)&&(c&&(c[1](),c[0]()),c=yt(d||l,!0,T,{Mr:D.concat(e||[]),Ir:D.concat(e||[]),Hr:f,Rr:mt,jr:function(n,r){var t=n.target,e=n.attributeName;return!(r||!e)&&W(t,mt,xt)||!!V(t,"."+hr)||!!y(n)}})),b)if(E.S(),g(w)){var m=w[0],x=w[1];o=!!s(m)&&m,u=!!s(x)&&x}else s(w)?(o=w,u=!1):(o=!1,u=!1)}]},Ct={x:0,y:0},Dt={ar:{t:0,r:0,b:0,l:0},wr:!1,H:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Cr:Ct,Or:Ct,yr:{x:"hidden",y:"hidden"},Er:{x:!1,y:!1},sr:!1,pr:!1},Mt=function(n,t){var e=Yn(t,{}),i=qn(Dt),o=Vn(),u=o[0],c=o[1],a=o[2],f=i[0],l=nt(n),d=l[0],s=l[1],v=l[2],h=function(n,t){var e=n.rr,i=qr(),o=i.D,u=i.L,c=i.F,a=!o&&(u.x||u.y),f=[rt(n,t),tt(n,t),st(n,t)];return function(n,t,i){var o=vt(R({gr:!1,br:!1,_r:!1,dr:!1,Ar:!1,Pr:!1,zr:!1,Sr:!1,hr:!1},t),{},i),u=a||!c,l=u&&j(e),d=u&&k(e),s=o;return r(f,(function(r){s=vt(s,r(s,n,!!i)||{},i)})),j(e,l),k(e,d),s}}(d,i),p=function(n,r,t){var e=M(n).some((function(r){return n[r]}));(e||!E(r)||t)&&a("u",[n,r,t])},g=Pt(d,i,(function(n){p(h(e,n),{},!1)})),w=g[0],b=g[1],y=g[2],m=f.bind(0);return m.kr=function(n){u("u",n)},m.Br=s,m.Fr=d,[function(n,r){var e=Yn(t,n,r);y(e),p(h(e,b(),r),n,!!r)},m,function(){c(),w(),v()}]},Rt="touchstart mouseenter",Et="touchend touchcancel mouseleave",At=function(n,r){return Tn(n,"mousedown",Tn.bind(0,r,"click",_n,{A:!0,O:!0}),{O:!0})},zt=function(n,e){var i=(0,qr().U)().scrollbarsSlot,o=e.ir,u=e.J,c=e.K,a=e.rr,f=e.ur?null:n.scrollbarsSlot,l=Ur([u,c,a],(function(){return c}),i,f),d=function(n,t,e,i){var o=e?gn:pn;r(n,(function(n){o((i||On)(n)||n.qr,t)}))},s=function(n,e){r(n,(function(n){var r=e(n);t(r[0],r[1])}))},v=[],h=[],p=[],g=d.bind(0,h),w=d.bind(0,p),b=function(n){var r=n?pr:gr,t=n?h:p,e=P(t)?xr:"",i=G(hr+" "+r+" "+e),u=G(wr),c=G(br),a={qr:i,Ur:u,Nr:c};return q(i,u),q(u,c),S(t,a),S(v,[Z.bind(0,i),Tn(i,Rt,(function(){g(Or,!0),w(Or,!0)})),Tn(i,Et,(function(){g(Or),w(Or)})),At(i,o)]),a},y=b.bind(0,!0),m=b.bind(0,!1);return y(),m(),[{Yr:{Wr:h,Gr:y,Xr:g,Zr:s.bind(0,h)},$r:{Wr:p,Gr:m,Xr:w,Zr:s.bind(0,p)}},function(){q(l,h[0].qr),q(l,p[0].qr),dn((function(){g(xr),w(xr)}),300)},C.bind(0,v)]},Ht=Math.min,Bt=function(n){var r,t=n?dn:ln,e=n?sn:fn;return[function(i){e(r),r=t(i,p(n)?n():n)},function(){return e(r)}]},Ft=function(n,r,t){var e=r.Or,i=r.Cr,o=t?"x":"y",u=i[o],c=e[o],a=Ht(1,u/(u+c));n((function(n){var r;return[n.Nr,(r={},r[t?"width":"height"]=(100*a).toFixed(3)+"%",r)]}))},jt=function(n,r,t){var e,i,o,u,c,a=0,f=qn({})[0],l=Bt(),d=l[0],s=l[1],v=Bt(),h=v[0],p=v[1],g=Bt(100),w=g[0],b=g[1],y=Bt(100),m=y[0],x=y[1],O=Bt((function(){return a})),S=O[0],L=O[1],P=zt(n,t.Fr),D=P[0],M=P[1],R=P[2],E=t.Fr,A=E.K,z=E.rr,H=D.Yr,B=D.$r,F=H.Xr,j=H.Zr,k=B.Xr,T=B.Zr,_=function(n,r){if(L(),n)F(Sr),k(Sr);else{var t=function(){F(Sr,!0),k(Sr,!0)};a>0&&!r?S(t):t()}},I=function(){(u=i)&&_(!0)},N=[b,L,x,p,s,R,Tn(A,"mouseover",I,{A:!0}),Tn(A,"mouseenter",I),Tn(A,"mouseleave",(function(){u=!1,i&&_(!1)})),Tn(A,"mousemove",(function(){e&&d((function(){b(),_(!0),m((function(){e&&_(!1)}))}))})),Tn(z,"scroll",(function(){o&&h((function(){_(!0),w((function(){o&&!u&&_(!1)}))}))}))],X=f.bind(0);return X.Fr=D,X.Br=M,[function(n,u,f){var l=f.Ar,d=f.Pr,s=f.zr,v=Yn(r,n,u),h=t(),p=v("scrollbars.theme"),g=p[0],w=p[1],b=v("scrollbars.visibility"),y=b[0],m=b[1],x=v("scrollbars.autoHide"),O=x[0],S=x[1],L=v("scrollbars.autoHideDelay")[0];v("scrollbars.dragScrolling"),v("scrollbars.touchSupport");var P=l||d,C=function(n,r){var t="visible"===y||"auto"===y&&"scroll"===n;return r(yr,t),t};if(a=L,s||m){var D=h.yr,M=C(D.x,F),R=C(D.y,k),E=M&&R;F(mr,!E),k(mr,!E)}w&&(F(c),k(c),F(g,!0),k(g,!0),c=g),S&&(e="move"===O,i="leave"===O,_(!(o="never"!==O),!0)),P&&(Ft(j,h,!0),Ft(T,h))},X,C.bind(0,N)]},kt=new Set,Tt=new WeakMap,_t=function n(t,e,i){var o=!1,u=qr(),c=u.Y,a=u.q,f=Mr(),l=m(t),d=l?t:t.target,s=function(n){return Tt.get(n)}(d);if(s)return s;var v=f[Hr],h=function(n){var r=n||{},t=v&&v.P;return t?t(r,!0):r},g=R({},c(),h(e)),w=Vn(i),b=w[0],y=w[1],x=w[2],O=Mt(t,g),S=O[0],L=O[1],P=O[2],C=jt(t,g,L),D=C[0],A=C[1],z=C[2],H=function(n,r){S(n,!!r)},B=a(H.bind(0,{},!0)),F=function(n){!function(n){Tt.delete(n),kt.delete(n)}(d),B(),z(),P(),o=!0,x("destroyed",[j,!!n]),y()},j={options:function(n){if(n){var r=Cr(g,h(n));E(r)||(R(g,r),H(r))}return R({},g)},on:b,off:function(n,r){n&&r&&y(n,r)},state:function(){var n=L(),r=n.Cr,t=n.Or,e=n.yr,i=n.Er,u=n.ar,c=n.wr;return R({},{overflowEdge:r,overflowAmount:t,overflowStyle:e,hasOverflow:i,padding:u,paddingAbsolute:c,destroyed:o})},elements:function(){var n=L.Fr,r=n.J,t=n.K,e=n.ar,i=n.rr,o=n.er;return R({},{target:r,host:t,padding:e||i,viewport:i,content:o||i})},update:function(n){return H({},n),j},destroy:F.bind(0)};return L.kr((function(n,r,t){D(r,t,n)})),r(M(f),(function(r){var t=f[r];p(t)&&t(n,j)})),Zr(!l&&t.cancel,L.Fr)?(F(!0),j):(L.Br(),A.Br(),function(n,r){Tt.set(n,r),kt.add(n)}(d,j),x("initialized",[j]),L.kr((function(n,r,t){var e=n.gr,i=n._r,o=n.dr,u=n.Ar,c=n.Pr,a=n.zr,f=n.hr,l=n.Sr;x("updated",[j,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowEdgeChanged:u,overflowAmountChanged:c,overflowStyleChanged:a,contentMutation:f,hostMutation:l},changedOptions:r,force:t}])})),j.update(!0))};_t.plugin=function(n){r(g(n)?n:[n],(function(n){r(M(n),(function(r){Dr[r]=n[r]}))}))},_t.env=function(){var n=qr(),r=n.k,t=n.L,e=n.D,i=n.B,o=n.F,u=n.I,c=n.G,a=n.X,f=n.U,l=n.N,d=n.Y,s=n.W;return R({},{scrollbarsSize:r,scrollbarsOverlaid:t,scrollbarsHiding:e,rtlScrollBehavior:i,flexboxGlue:o,cssCustomProperties:u,staticDefaultInitialization:c,staticDefaultOptions:a,getDefaultInitialization:f,setDefaultInitialization:l,getDefaultOptions:d,setDefaultOptions:s})},n.OverlayScrollbars=_t,n.scrollbarsHidingPlugin=Xr,n.sizeObserverPlugin=kr,Object.defineProperty(n,"v",{value:!0})})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts index e2f5425..db2d853 100644 --- a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts @@ -18,7 +18,7 @@ import type { } from 'options'; import type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups'; import type { InitializationTarget } from 'initialization'; -import type { OverflowStyle, StyleObject } from 'typings'; +import type { OverflowStyle } from 'typings'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface ScrollbarsSetupState {} @@ -43,8 +43,7 @@ const createSelfCancelTimeout = (timeout?: number | (() => number)) => { ] as [timeout: (callback: () => any) => void, clear: () => void]; }; -const refreshScrollbarHandleLength = ( - setStyleFn: ScrollbarsSetupElement['_handleStyle'], +const getScrollbarHandleRatio = ( structureSetupState: StructureSetupState, isHorizontal?: boolean ) => { @@ -52,96 +51,53 @@ const refreshScrollbarHandleLength = ( const axis = isHorizontal ? 'x' : 'y'; const viewportSize = _overflowEdge[axis]; const overflowAmount = _overflowAmount[axis]; - const handleRatio = min(1, viewportSize / (viewportSize + overflowAmount)); + return min(1, viewportSize / (viewportSize + overflowAmount)); +}; + +const refreshScrollbarHandleLength = ( + setStyleFn: ScrollbarsSetupElement['_handleStyle'], + structureSetupState: StructureSetupState, + isHorizontal?: boolean +) => + setStyleFn((structure) => [ + structure._handle, + { + [isHorizontal ? 'width' : 'height']: `${( + getScrollbarHandleRatio(structureSetupState, isHorizontal) * 100 + ).toFixed(3)}%`, + }, + ]); + +const refreshScrollbarHandlePosition = ( + setStyleFn: ScrollbarsSetupElement['_handleStyle'], + structureSetupState: StructureSetupState, + viewport: HTMLElement, + isHorizontal?: boolean +) => { + const axis = isHorizontal ? 'x' : 'y'; + const translateAxis = isHorizontal ? 'X' : 'Y'; + const scrollLeftTop = isHorizontal ? 'Left' : 'Top'; + const handleRatio = getScrollbarHandleRatio(structureSetupState, isHorizontal); + const scrollPosition = viewport[`scroll${scrollLeftTop}`] as number; + const scrollPositionMax = + (viewport[`scroll${scrollLeftTop}Max`] as number) || + Math.floor(structureSetupState._overflowAmount[axis]); setStyleFn((structure) => [ structure._handle, { - [isHorizontal ? 'width' : 'height']: `${(handleRatio * 100).toFixed(3)}%`, + transform: scrollPositionMax + ? `translate${translateAxis}(${( + (1 / handleRatio) * + (1 - handleRatio) * + (scrollPosition / scrollPositionMax) * + 100 + ).toFixed(3)}%)` + : '', }, ]); }; -const refreshScrollbarHandlePosition = ( - setStyleFn: (styles: StyleObject) => void, - structureSetupState: StructureSetupState, - isHorizontal?: boolean -) => { - /* - //measure the handle length to respect min & max length - var handleLength = scrollbarVarsInfo._handleLength; - var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height]; - var handleTrackDiff = trackLength - handleLength; - var handleCSS = {}; - var transformOffset; - var translateValue; - - //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]' - // because its a bit behind during the small delay when content size updates - //(delay = mutationObserverContentLag, if its 0 then this var could be used) - var maxScroll = - (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] - - _viewportElementNative['client' + scrollbarVars._Width_Height]) * - (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative - var getScrollRatio = function (base) { - return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll)); - }; - var getHandleOffset = function (scrollRatio) { - var offset = handleTrackDiff * scrollRatio; - offset = isNaN(offset) ? 0 : offset; - offset = - isRTLisHorizontal && !_rtlScrollBehavior.i ? trackLength - handleLength - offset : offset; - offset = MATH.max(0, offset); - return offset; - }; - var scrollRatio = getScrollRatio(nativeScroll); - var unsnappedScrollRatio = getScrollRatio(currentScroll); - var handleOffset = getHandleOffset(unsnappedScrollRatio); - var snappedHandleOffset = getHandleOffset(scrollRatio); - - scrollbarVarsInfo._maxScroll = maxScroll; - scrollbarVarsInfo._currentScroll = nativeScroll; - scrollbarVarsInfo._currentScrollRatio = scrollRatio; - - if (_supportTransform) { - transformOffset = isRTLisHorizontal - ? -(trackLength - handleLength - handleOffset) - : handleOffset; //in px - //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in % - translateValue = isHorizontal - ? strTranslateBrace + transformOffset + 'px, 0)' - : strTranslateBrace + '0, ' + transformOffset + 'px)'; - - handleCSS[strTransform] = translateValue; - - //apply or clear up transition - if (_supportTransition) - handleCSS[strTransition] = - transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1 - ? getCSSTransitionString(scrollbarVars._handle) + - ', ' + - (strTransform + _strSpace + transitionDuration + 'ms') - : _strEmpty; - } else handleCSS[scrollbarVars._left_top] = handleOffset; - - //only apply css if offset has changed and overflow exists. - if (!nativeOverlayScrollbarsAreActive()) { - scrollbarVars._handle.css(handleCSS); - - //clear up transition - if (_supportTransform && _supportTransition && transition) { - scrollbarVars._handle.one(_strTransitionEndEvent, function () { - if (!_destroyed) scrollbarVars._handle.css(strTransition, _strEmpty); - }); - } - } - - scrollbarVarsInfo._handleOffset = handleOffset; - scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset; - scrollbarVarsInfo._trackLength = trackLength; - */ -}; - export const createScrollbarsSetup = ( target: InitializationTarget, options: ReadonlyOSOptions, @@ -215,13 +171,16 @@ export const createScrollbarsSetup = ( }); }), on(_viewport, 'scroll', () => { - autoHideNotNever && - requestScrollAnimationFrame(() => { - manageScrollbarsAutoHide(true); - scrollTimeout(() => { - autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false); - }); + requestScrollAnimationFrame(() => { + const structureState = structureSetupState(); + refreshScrollbarHandlePosition(styleHorizontal, structureState, _viewport, true); + refreshScrollbarHandlePosition(styleVertical, structureState, _viewport); + + autoHideNotNever && manageScrollbarsAutoHide(true); + scrollTimeout(() => { + autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false); }); + }); }), ]; const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) & @@ -289,6 +248,9 @@ export const createScrollbarsSetup = ( if (updateHandle) { refreshScrollbarHandleLength(styleHorizontal, currStructureSetupState, true); refreshScrollbarHandleLength(styleVertical, currStructureSetupState); + + refreshScrollbarHandlePosition(styleHorizontal, currStructureSetupState, _viewport, true); + refreshScrollbarHandlePosition(styleVertical, currStructureSetupState, _viewport); } }, scrollbarsSetupState, diff --git a/packages/overlayscrollbars/src/styles/scrollbars.scss b/packages/overlayscrollbars/src/styles/scrollbars.scss index fea7810..697c90f 100644 --- a/packages/overlayscrollbars/src/styles/scrollbars.scss +++ b/packages/overlayscrollbars/src/styles/scrollbars.scss @@ -1,4 +1,5 @@ .os-scrollbar { + contain: strict; transition: opacity 0.3s, visibility 0.3s, top 0.3s, right 0.3s, bottom 0.3s, left 0.3s; pointer-events: none; position: absolute;