diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index dc11e13..f75e983 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/environment.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/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 | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n 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 = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { 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 { 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): number;\r\n (elm: HTMLElement | false | null | undefined, value: number): void;\r\n (elm: HTMLElement | false | null | undefined, value?: number): number | 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\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n};\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport 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 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 * 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\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\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 = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | 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 = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && 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(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => 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 = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): 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 = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => 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 = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { 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) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (\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 { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\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 = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\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 dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\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\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, 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 VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: 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 visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: 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 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 nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\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 = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\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 {\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 windowSize,\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 classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\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 _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\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 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, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n 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 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 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 _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\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 initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\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 _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, 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 _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: 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 size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\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 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 { 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","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, PartialOptions } 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 PartialOptions, // 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: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } 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 { PartialOptions } 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 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 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 nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: PartialOptions, 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 stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\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 stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n 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 { keys, attr, WH, style, addClass, removeClass, noop, each } from 'support';\r\nimport { getEnvironment } from 'environment';\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 { 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(): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: 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};\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: () => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = getEnvironment();\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n const { _flexboxGlue } = getEnvironment();\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 },\r\n};\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\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 InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\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 defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\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 dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\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} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\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} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\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 _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\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 { _getInitializationStrategy, _nativeScrollbarsHiding } = getEnvironment();\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: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!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 viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\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 hostInitializationStrategy,\r\n targetStructureInitialization.host\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 paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _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\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 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, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\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 createTrinsicUpdate: 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 createPaddingUpdate: 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 classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\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 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 = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.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 createOverflowUpdate: 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 [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 _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('nativeScrollbarsOverlaid.show');\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\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\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 overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\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 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 _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 _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\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 _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 {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(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 _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 if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n 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 stopAndPrevent,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} 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 animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): 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, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n 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 DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\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 = [destroy: () => void, update: () => void];\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 [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\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 observerCallback(mutationObserver.takeRecords());\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} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\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 updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\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 has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\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) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\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) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\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 updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\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] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\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 (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 as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\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 contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } 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 { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\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: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\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 _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\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 [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [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 updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\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 { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } 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 ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\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 ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\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 generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\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\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\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?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\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 { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\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?: PartialOptions,\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 defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\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 overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\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, withdrawn: 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?: PartialOptions): 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 {\r\n _getDefaultOptions,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? 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?: PartialOptions) => {\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._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: 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, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\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 { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\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 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 (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\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 _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 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 _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\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 defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\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","u","_initialValue","_","_equal","g","_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","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","v","_timeout","p","_maxDelay","m","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_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","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","clear","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","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","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","envDOM","envElm","envChildElm","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarsSize","_nativeScrollbarsOverlaid","_nativeScrollbarsHiding","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","getEnvironment","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","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","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","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","_nativeScrollbarStyling","_nativeScrollbarIsOverlaid","M","create","_overflowUpdateSegment","doViewportArrange","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","R","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","U","_viewportPaddingStyle","W","_scrollbarsHideOffset","X","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","j","L","createUniqueViewportArrangeElement","_host","hostInitializationStrategy","_viewport","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","Z","J","A","K","I","tt","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","updateHints","dt","_heightIntrinsic","_t","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","vt","_directionIsRTL","gt","ht","wt","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","lt","ut","T","P","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","bt","St","_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","Ct","_hostMutation","yt","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","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","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Lt","_attributes","Mt","_styleChangingAttributes","Ht","_eventContentChange","Et","_nestedTargetSelector","Rt","_ignoreTargetChange","Dt","_ignoreContentChange","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","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","ct","ft","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","updateObservers","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","_scrollbarsSlot","environmentScrollbarSlot","rt","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","scrollbarsSetupState","log","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","B","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","$t","xt","Ot","pluginInstance","At","zt","sizeChanged","hostMutation","H","F","Y","V","k","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","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/environment.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/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 | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n 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 = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { 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 { 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): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T): number | 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\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n};\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport 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 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 * 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\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\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 = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | 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 = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && 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(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => 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 = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): 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 = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => 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 = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { 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) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (\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 { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\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 = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\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 dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\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\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, 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 VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: 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 visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: 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 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 nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\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 = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\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 {\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 windowSize,\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 classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\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 _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\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 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, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n 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 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 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 _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\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 initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\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 _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, 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 _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: 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 size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\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 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 { 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","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, PartialOptions } 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 PartialOptions, // 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: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } 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 { PartialOptions } 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 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 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 nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: PartialOptions, 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 stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\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 stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n 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 { keys, attr, WH, style, addClass, removeClass, noop, each } from 'support';\r\nimport { getEnvironment } from 'environment';\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 { 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(): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: 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};\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: () => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = getEnvironment();\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n const { _flexboxGlue } = getEnvironment();\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 },\r\n};\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\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 InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\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 defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\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 dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\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} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\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} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\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 _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\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 { _getInitializationStrategy, _nativeScrollbarsHiding } = getEnvironment();\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: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!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 viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\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 hostInitializationStrategy,\r\n targetStructureInitialization.host\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 paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _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\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 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, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\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 createTrinsicUpdate: 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 createPaddingUpdate: 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 classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\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 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 = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.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 createOverflowUpdate: 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 [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 _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('nativeScrollbarsOverlaid.show');\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\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\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 overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\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 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 _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 _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\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 _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 {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(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 _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 if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n 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 stopAndPrevent,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} 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 animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): 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, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n 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 DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\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 = [destroy: () => void, update: () => void];\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 [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\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 observerCallback(mutationObserver.takeRecords());\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} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\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 updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\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 has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\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) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\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) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\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 updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\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] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\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 (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 as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\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 contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } 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 { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\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: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\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 _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\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 [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [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 updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\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 { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } 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 ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\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 ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\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 generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\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\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\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?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\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 { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\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?: PartialOptions,\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 defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\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 overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\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, withdrawn: 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?: PartialOptions): 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 {\r\n _getDefaultOptions,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? 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?: PartialOptions) => {\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._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: 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, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\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 { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\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 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 (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\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 _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 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 _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\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 defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\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","u","_initialValue","_","_equal","g","_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","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","v","_timeout","p","_maxDelay","m","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_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","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","clear","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","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","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","envDOM","envElm","envChildElm","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarsSize","_nativeScrollbarsOverlaid","_nativeScrollbarsHiding","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","getEnvironment","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","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","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","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","_nativeScrollbarStyling","_nativeScrollbarIsOverlaid","M","create","_overflowUpdateSegment","doViewportArrange","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","R","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","U","_viewportPaddingStyle","W","_scrollbarsHideOffset","X","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","j","L","createUniqueViewportArrangeElement","_host","hostInitializationStrategy","_viewport","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","Z","J","A","K","I","tt","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","updateHints","dt","_heightIntrinsic","_t","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","vt","_directionIsRTL","gt","ht","wt","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","lt","ut","T","P","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","bt","St","_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","Ct","_hostMutation","yt","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","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","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Lt","_attributes","Mt","_styleChangingAttributes","Ht","_eventContentChange","Et","_nestedTargetSelector","Rt","_ignoreTargetChange","Dt","_ignoreContentChange","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","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","ct","ft","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","updateObservers","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","_scrollbarsSlot","environmentScrollbarSlot","rt","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","scrollbarsSetupState","log","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","B","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","$t","xt","Ot","pluginInstance","At","zt","sizeChanged","hostMutation","H","F","Y","V","k","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 7cabcad..8afb4d8 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/environment.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/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 | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n 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 = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { 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 { 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): number;\r\n (elm: HTMLElement | false | null | undefined, value: number): void;\r\n (elm: HTMLElement | false | null | undefined, value?: number): number | 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\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n};\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport 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 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 * 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\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\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 = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | 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 = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && 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(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => 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 = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): 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 = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => 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 = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { 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) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (\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 { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\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 = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\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 dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\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\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, 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 VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: 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 visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: 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 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 nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\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 = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\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 {\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 windowSize,\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 classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\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 _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\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 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, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n 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 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 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 _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\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 initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\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 _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, 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 _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: 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 size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\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 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 { 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","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, PartialOptions } 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 PartialOptions, // 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: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } 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 { PartialOptions } 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 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 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 nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: PartialOptions, 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 stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\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 stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n 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 { keys, attr, WH, style, addClass, removeClass, noop, each } from 'support';\r\nimport { getEnvironment } from 'environment';\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 { 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(): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: 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};\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: () => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = getEnvironment();\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n const { _flexboxGlue } = getEnvironment();\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 },\r\n};\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\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 InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\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 defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\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 dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\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} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\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} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\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 _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\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 { _getInitializationStrategy, _nativeScrollbarsHiding } = getEnvironment();\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: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!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 viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\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 hostInitializationStrategy,\r\n targetStructureInitialization.host\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 paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _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\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 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, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\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 createTrinsicUpdate: 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 createPaddingUpdate: 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 classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\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 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 = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.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 createOverflowUpdate: 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 [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 _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('nativeScrollbarsOverlaid.show');\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\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\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 overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\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 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 _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 _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\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 _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 {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(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 _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 if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n 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 stopAndPrevent,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} 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 animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): 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, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n 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 DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\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 = [destroy: () => void, update: () => void];\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 [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\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 observerCallback(mutationObserver.takeRecords());\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} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\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 updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\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 has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\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) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\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) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\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 updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\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] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\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 (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 as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\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 contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } 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 { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\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: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\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 _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\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 [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [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 updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\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 { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } 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 ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\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 ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\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 generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\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\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\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?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\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 { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\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?: PartialOptions,\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 defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\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 overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\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, withdrawn: 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?: PartialOptions): 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 {\r\n _getDefaultOptions,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? 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?: PartialOptions) => {\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._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: 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, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\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 { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\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 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 (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\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 _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 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 _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\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 defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\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","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_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","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","clear","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","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","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarsSize","_nativeScrollbarsOverlaid","_nativeScrollbarsHiding","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","_updateNativeScrollba","scrollbarSizeChanged","getEnvironment","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","optionsValidationPlugin","_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","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","_getEnvironment","_nativeScrollbarStyling","_nativeScrollbarIsOverlaid","create","_overflowUpdateSegment","doViewportArrange","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","_getEnvironment2","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","showNativeOverlaidScrollbars","finalViewportOverflowState","_getState2","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_scrollbarsHidingPlug","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getInitializationStr","hostInitializationStrategy","_host","viewportInitializationStrategy","_viewport","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowStyleCache","_createCache4","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","_ref","_hostMutation","_getState3","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","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","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","_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","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","updateObservers","_createStructureSetup2","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","environmentScrollbarSlot","_scrollbarsSlot","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","_createScrollbarsSetu","scrollbarsSetupState","log","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","_structureState","pluginInstance","sizeChanged","hostMutation","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","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/environment.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/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 | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n 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 = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { 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 { 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): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T): number | 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\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n};\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport 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 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 * 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\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\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 = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | 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 = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && 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(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => 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 = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): 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 = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => 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 = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { 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) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (\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 { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\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 = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\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 dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\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\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, 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 VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: 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 visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: 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 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 nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\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 = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\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 {\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 windowSize,\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 classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\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 _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\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 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, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n 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 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 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 _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\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 initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\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 _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, 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 _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: 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 size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\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 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 { 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","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, PartialOptions } 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 PartialOptions, // 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: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } 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 { PartialOptions } 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 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 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 nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: PartialOptions, 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 stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\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 stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n 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 { keys, attr, WH, style, addClass, removeClass, noop, each } from 'support';\r\nimport { getEnvironment } from 'environment';\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 { 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(): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: 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};\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: () => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = getEnvironment();\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n const { _flexboxGlue } = getEnvironment();\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 },\r\n};\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\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 InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\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 defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\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 dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\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} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\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} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\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 _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\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 { _getInitializationStrategy, _nativeScrollbarsHiding } = getEnvironment();\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: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!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 viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\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 hostInitializationStrategy,\r\n targetStructureInitialization.host\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 paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _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\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 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, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\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 createTrinsicUpdate: 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 createPaddingUpdate: 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 classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\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 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 = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.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 createOverflowUpdate: 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 [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 _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('nativeScrollbarsOverlaid.show');\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\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\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 overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\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 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 _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 _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\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 _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 {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(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 _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 if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n 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 stopAndPrevent,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} 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 animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): 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, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n 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 DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\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 = [destroy: () => void, update: () => void];\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 [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\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 observerCallback(mutationObserver.takeRecords());\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} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\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 updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\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 has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\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) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\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) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\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 updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\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] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\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 (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 as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\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 contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } 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 { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\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: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\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 _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\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 [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [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 updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\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 { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } 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 ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\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 ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\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 generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\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\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\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?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\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 { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\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?: PartialOptions,\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 defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\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 overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\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, withdrawn: 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?: PartialOptions): 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 {\r\n _getDefaultOptions,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? 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?: PartialOptions) => {\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._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: 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, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\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 { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\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 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 (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\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 _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 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 _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\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 defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\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","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_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","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","clear","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","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","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarsSize","_nativeScrollbarsOverlaid","_nativeScrollbarsHiding","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","_updateNativeScrollba","scrollbarSizeChanged","getEnvironment","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","optionsValidationPlugin","_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","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","_getEnvironment","_nativeScrollbarStyling","_nativeScrollbarIsOverlaid","create","_overflowUpdateSegment","doViewportArrange","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","_getEnvironment2","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","showNativeOverlaidScrollbars","finalViewportOverflowState","_getState2","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_scrollbarsHidingPlug","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getInitializationStr","hostInitializationStrategy","_host","viewportInitializationStrategy","_viewport","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowStyleCache","_createCache4","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","_ref","_hostMutation","_getState3","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","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","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","_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","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","updateObservers","_createStructureSetup2","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","environmentScrollbarSlot","_scrollbarsSlot","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","_createScrollbarsSetu","scrollbarsSetupState","log","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","_structureState","pluginInstance","sizeChanged","hostMutation","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/src/overlayscrollbars.ts b/packages/overlayscrollbars/src/overlayscrollbars.ts index 1f0d88c..815efdd 100644 --- a/packages/overlayscrollbars/src/overlayscrollbars.ts +++ b/packages/overlayscrollbars/src/overlayscrollbars.ts @@ -61,6 +61,7 @@ export interface Environment { export interface State { padding: TRBL; paddingAbsolute: boolean; + overflowEdge: XY; overflowAmount: XY; overflowStyle: XY; hasOverflow: XY; @@ -80,6 +81,7 @@ export interface OnUpdatedEventListenerArgs { sizeChanged: boolean; directionChanged: boolean; heightIntrinsicChanged: boolean; + overflowEdgeChanged: boolean; overflowAmountChanged: boolean; overflowStyleChanged: boolean; hostMutation: boolean; @@ -212,11 +214,18 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( name && listener && removeEvent(name, listener as any); }, state() { - const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } = - structureState(); + const { + _overflowEdge, + _overflowAmount, + _overflowStyle, + _hasOverflow, + _padding, + _paddingAbsolute, + } = structureState(); return assignDeep( {}, { + overflowEdge: _overflowEdge, overflowAmount: _overflowAmount, overflowStyle: _overflowStyle, hasOverflow: _hasOverflow, @@ -273,6 +282,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( _sizeChanged, _directionChanged, _heightIntrinsicChanged, + _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged, _contentMutation, @@ -286,6 +296,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( sizeChanged: _sizeChanged, directionChanged: _directionChanged, heightIntrinsicChanged: _heightIntrinsicChanged, + overflowEdgeChanged: _overflowEdgeChanged, overflowAmountChanged: _overflowAmountChanged, overflowStyleChanged: _overflowStyleChanged, contentMutation: _contentMutation, diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts index ea43059..9ee5697 100644 --- a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts @@ -34,7 +34,7 @@ export type ScrollbarsSetupElements = [ ]; const generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => { - const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`); + const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName} os-theme-dark`); const track = createDiv(classNameScrollbarTrack); const handle = createDiv(classNameScrollbarHandle); diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.update.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.update.ts new file mode 100644 index 0000000..1f22ef6 --- /dev/null +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.update.ts @@ -0,0 +1,117 @@ +import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support'; +import { getEnvironment } from 'environment'; +import { + createTrinsicUpdate, + createPaddingUpdate, + createOverflowUpdate, +} from 'setups/structureSetup/updateSegments'; +import type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups'; +import type { StructureSetupState } from 'setups/structureSetup'; +import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements'; + +export type CreateStructureUpdateSegment = ( + structureSetupElements: StructureSetupElementsObj, + state: SetupState +) => StructureSetupUpdateSegment; + +export type StructureSetupUpdateSegment = SetupUpdateSegment; + +export type StructureSetupUpdate = ( + checkOption: SetupUpdateCheckOption, + updateHints: Partial, + force?: boolean +) => StructureSetupUpdateHints; + +export interface StructureSetupUpdateHints { + _sizeChanged: boolean; + _directionChanged: boolean; + _heightIntrinsicChanged: boolean; + _overflowAmountChanged: boolean; + _overflowStyleChanged: boolean; + _paddingStyleChanged: boolean; + _hostMutation: boolean; + _contentMutation: boolean; +} + +const prepareUpdateHints = ( + leading: Required, + adaptive?: Partial, + force?: boolean +): Required => { + const result = {}; + const finalAdaptive = adaptive || {}; + const objKeys = keys(leading).concat(keys(finalAdaptive)); + + each(objKeys, (key) => { + const leadingValue = leading[key]; + const adaptiveValue = finalAdaptive[key]; + result[key] = !!(force || leadingValue || adaptiveValue); + }); + + return result as Required; +}; + +export const createStructureSetupUpdate = ( + structureSetupElements: StructureSetupElementsObj, + state: SetupState +): StructureSetupUpdate => { + const { _viewport } = structureSetupElements; + const { + _nativeScrollbarsHiding: _nativeScrollbarStyling, + _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid, + _flexboxGlue, + } = getEnvironment(); + const doViewportArrange = + !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y); + + const updateSegments: StructureSetupUpdateSegment[] = [ + createTrinsicUpdate(structureSetupElements, state), + createPaddingUpdate(structureSetupElements, state), + createOverflowUpdate(structureSetupElements, state), + ]; + + return ( + checkOption: SetupUpdateCheckOption, + updateHints: Partial, + force?: boolean + ) => { + const initialUpdateHints = prepareUpdateHints( + assignDeep( + { + _sizeChanged: false, + _paddingStyleChanged: false, + _directionChanged: false, + _heightIntrinsicChanged: false, + _overflowAmountChanged: false, + _overflowStyleChanged: false, + _hostMutation: false, + _contentMutation: false, + }, + updateHints + ), + {}, + force + ); + const adjustScrollOffset = doViewportArrange || !_flexboxGlue; + const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport); + const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport); + + let adaptivedUpdateHints: Required = initialUpdateHints; + each(updateSegments, (updateSegment) => { + adaptivedUpdateHints = prepareUpdateHints( + adaptivedUpdateHints, + updateSegment(adaptivedUpdateHints, checkOption, !!force) || {}, + force + ); + }); + + if (isNumber(scrollOffsetX)) { + scrollLeft(_viewport, scrollOffsetX); + } + if (isNumber(scrollOffsetY)) { + scrollTop(_viewport, scrollOffsetY); + } + + return adaptivedUpdateHints; + }; +}; diff --git a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts index cdec132..11c5577 100644 --- a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts +++ b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts @@ -15,6 +15,7 @@ export interface StructureSetupState { _padding: TRBL; _paddingAbsolute: boolean; _viewportPaddingStyle: StyleObject; + _overflowEdge: XY; _overflowAmount: XY; _overflowStyle: XY; _hasOverflow: XY; @@ -36,6 +37,7 @@ type StructureSetupEventMap = { ]; }; +const initialXYNumber = { x: 0, y: 0 }; const initialStructureSetupUpdateState: StructureSetupState = { _padding: { t: 0, @@ -53,10 +55,8 @@ const initialStructureSetupUpdateState: StructureSetupState = { paddingBottom: 0, paddingLeft: 0, }, - _overflowAmount: { - x: 0, - y: 0, - }, + _overflowEdge: initialXYNumber, + _overflowAmount: initialXYNumber, _overflowStyle: { x: 'hidden', y: 'hidden', diff --git a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.update.ts b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.update.ts index 1f22ef6..adf4a75 100644 --- a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.update.ts +++ b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.update.ts @@ -26,6 +26,7 @@ export interface StructureSetupUpdateHints { _sizeChanged: boolean; _directionChanged: boolean; _heightIntrinsicChanged: boolean; + _overflowEdgeChanged: boolean; _overflowAmountChanged: boolean; _overflowStyleChanged: boolean; _paddingStyleChanged: boolean; @@ -82,6 +83,7 @@ export const createStructureSetupUpdate = ( _paddingStyleChanged: false, _directionChanged: false, _heightIntrinsicChanged: false, + _overflowEdgeChanged: false, _overflowAmountChanged: false, _overflowStyleChanged: false, _hostMutation: false, diff --git a/packages/overlayscrollbars/src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts b/packages/overlayscrollbars/src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts index 76f2d58..7256d61 100644 --- a/packages/overlayscrollbars/src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts +++ b/packages/overlayscrollbars/src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts @@ -66,15 +66,11 @@ const xyCacheOptions = { _initialValue: { x: strHidden, y: strHidden } as XY, }; -const getOverflowAmount = ( - viewportScrollSize: WH, - viewportClientSize: WH, - sizeFraction: WH -) => { +const getOverflowAmount = (viewportScrollSize: WH, viewportClientSize: WH) => { const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0; const amount = { - w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)), - h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)), + w: max(0, viewportScrollSize.w - viewportClientSize.w), + h: max(0, viewportScrollSize.h - viewportClientSize.h), }; return { @@ -135,6 +131,8 @@ export const createOverflowUpdate: CreateStructureUpdateSegment = ( const [updateOverflowAmountCache, getCurrentOverflowAmountCache] = createCache>(whCacheOptions); + const [updateOverflowEdge, getCurrentOverflowEdgeCache] = createCache>(whCacheOptions); + const [updateOverflowStyleCache] = createCache>(xyCacheOptions); /** @@ -350,6 +348,7 @@ export const createOverflowUpdate: CreateStructureUpdateSegment = ( let sizeFractionCache = getCurrentSizeFraction(force); let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force); let overflowAmuntCache = getCurrentOverflowAmountCache(force); + let overflowEdgeCache = getCurrentOverflowEdgeCache(force); let preMeasureViewportOverflowState: ViewportOverflowState | undefined; @@ -407,22 +406,29 @@ export const createOverflowUpdate: CreateStructureUpdateSegment = ( arrangedViewportScrollSize = scrollSize(_viewport); } + const overflowAmountScrollSize = { + w: max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w, + h: max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h, + }; + const overflowAmountClientSize = { + w: + arrangedViewportClientSize.w + + max(0, viewportclientSize.w - viewportScrollSize.w) + + sizeFraction.w, + h: + arrangedViewportClientSize.h + + max(0, viewportclientSize.h - viewportScrollSize.h) + + sizeFraction.h, + }; + + overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize); overflowAmuntCache = updateOverflowAmountCache( - getOverflowAmount( - { - w: max(viewportScrollSize.w, arrangedViewportScrollSize.w), - h: max(viewportScrollSize.h, arrangedViewportScrollSize.h), - }, // scroll size - { - w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w), - h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h), - }, // client size - sizeFraction - ), + getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize), force ); } + const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache; const [overflowAmount, overflowAmountChanged] = overflowAmuntCache; const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache; const [sizeFraction, sizeFractionChanged] = sizeFractionCache; @@ -440,6 +446,7 @@ export const createOverflowUpdate: CreateStructureUpdateSegment = ( _directionChanged || sizeFractionChanged || viewportScrollSizeChanged || + overflowEdgeChanged || overflowAmountChanged || overflowChanged || showNativeOverlaidScrollbarsChanged || @@ -497,6 +504,10 @@ export const createOverflowUpdate: CreateStructureUpdateSegment = ( setState({ _overflowStyle: overflowStyle, + _overflowEdge: { + x: overflowEdge.w, + y: overflowEdge.h, + }, _overflowAmount: { x: overflowAmount.w, y: overflowAmount.h, @@ -506,6 +517,7 @@ export const createOverflowUpdate: CreateStructureUpdateSegment = ( return { _overflowStyleChanged: overflowStyleChanged, + _overflowEdgeChanged: overflowEdgeChanged, _overflowAmountChanged: overflowAmountChanged, }; }; diff --git a/packages/overlayscrollbars/src/styles/scrollbars.scss b/packages/overlayscrollbars/src/styles/scrollbars.scss index 15059f1..b810434 100644 --- a/packages/overlayscrollbars/src/styles/scrollbars.scss +++ b/packages/overlayscrollbars/src/styles/scrollbars.scss @@ -1,19 +1,11 @@ -.os-host-transition > .os-scrollbar, -.os-host-transition > .os-scrollbar-corner { +.os-scrollbar-transition { transition: opacity 0.3s, visibility 0.3s, top 0.3s, right 0.3s, bottom 0.3s, left 0.3s; } -.os-scrollbar, -.os-scrollbar-corner { - position: absolute; - opacity: 1; - z-index: 1; -} -.os-scrollbar-corner { - bottom: 0; - right: 0; -} .os-scrollbar { pointer-events: none; + position: absolute; + opacity: 1; + z-index: 0; } .os-scrollbar-track { pointer-events: auto; @@ -33,12 +25,13 @@ .os-scrollbar-track-off { pointer-events: none; } -.os-scrollbar.os-scrollbar-unusable, -.os-scrollbar.os-scrollbar-unusable * { +.os-scrollbar-unusable, +.os-scrollbar-unusable * { pointer-events: none !important; } -.os-scrollbar.os-scrollbar-unusable .os-scrollbar-handle { +.os-scrollbar-unusable .os-scrollbar-handle { opacity: 0 !important; + visibility: hidden Im !important; } .os-scrollbar-horizontal { bottom: 0; @@ -48,69 +41,124 @@ top: 0; right: 0; } -.os-host-rtl > .os-scrollbar-horizontal { +.os-scrollbar-horizontal-rtl { right: 0; } -.os-host-rtl > .os-scrollbar-vertical { +.os-scrollbar-vertical-rtl { right: auto; left: 0; } -.os-host-rtl > .os-scrollbar-corner { - right: auto; - left: 0; -} -.os-scrollbar-auto-hidden, -.os-padding + .os-scrollbar-corner, -.os-host-resize-disabled.os-host-scrollbar-horizontal-hidden > .os-scrollbar-corner, -.os-host-scrollbar-horizontal-hidden > .os-scrollbar-horizontal, -.os-host-resize-disabled.os-host-scrollbar-vertical-hidden > .os-scrollbar-corner, -.os-host-scrollbar-vertical-hidden > .os-scrollbar-vertical, -.os-scrollbar-horizontal.os-scrollbar-auto-hidden + .os-scrollbar-vertical + .os-scrollbar-corner, -.os-scrollbar-horizontal + .os-scrollbar-vertical.os-scrollbar-auto-hidden + .os-scrollbar-corner, -.os-scrollbar-horizontal.os-scrollbar-auto-hidden + .os-scrollbar-vertical.os-scrollbar-auto-hidden + .os-scrollbar-corner { +.os-scrollbar-hidden { opacity: 0; visibility: hidden; pointer-events: none; } -.os-scrollbar-corner-resize-both { - cursor: nwse-resize; -} -.os-host-rtl > .os-scrollbar-corner-resize-both { - cursor: nesw-resize; -} -.os-scrollbar-corner-resize-horizontal { - cursor: ew-resize; -} -.os-scrollbar-corner-resize-vertical { - cursor: ns-resize; -} -.os-dragging .os-scrollbar-corner.os-scrollbar-corner-resize { - cursor: default; -} -.os-host-resize-disabled.os-host-scrollbar-horizontal-hidden > .os-scrollbar-vertical { - top: 0; - bottom: 0; -} -.os-host-resize-disabled.os-host-scrollbar-vertical-hidden > .os-scrollbar-horizontal, -.os-host-rtl.os-host-resize-disabled.os-host-scrollbar-vertical-hidden > .os-scrollbar-horizontal { - right: 0; - left: 0; -} -.os-scrollbar:hover, -.os-scrollbar-corner.os-scrollbar-corner-resize { +.os-scrollbar:hover { opacity: 1 !important; visibility: visible !important; } -.os-scrollbar-corner.os-scrollbar-corner-resize { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgICB3aWR0aD0iMTAiICAgaGVpZ2h0PSIxMCIgICB2ZXJzaW9uPSIxLjEiPiAgPGcgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTEwNDIuMzYyMikiICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPiAgICA8cGF0aCAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjQ5NDExNzY1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIiAgICAgICBkPSJtIDcuNDI0MjE4NywxMDQyLjM2MjIgYyAtMC43MjM1NzkyLDAgLTEuMzEwMTU2MiwwLjU4NjYgLTEuMzEwMTU2MiwxLjMxMDIgMCwwLjI5OSAwLjEwNDM0MTksMC41NzEgMC4yNzI5NDkyLDAuNzkxNSAwLjIwOTEwMjQsMC4xNDEzIDAuNDY1NjIwNiwwLjIxODQgMC43MzY5NjI5LDAuMjE4NCAwLjcyMzU3OTMsMCAxLjMxMDE1NjMsLTAuNTg2NiAxLjMxMDE1NjMsLTEuMzEwMiAwLC0wLjI3MTMgLTAuMDc3MDkzLC0wLjUyNzggLTAuMjE4MzU5NCwtMC43MzcgLTAuMjIwNDk0MSwtMC4xNjg2IC0wLjQ5MjU0NDMsLTAuMjcyOSAtMC43OTE1NTI4LC0wLjI3MjkgeiBtIDAsMy4wODQzIGMgLTAuNzIzNTc5MiwwIC0xLjMxMDE1NjIsMC41ODY2IC0xLjMxMDE1NjIsMS4zMTAyIDAsMC4yOTkgMC4xMDQzNDE5LDAuNTcxIDAuMjcyOTQ5MiwwLjc5MTUgMC4yMDkxMDI0LDAuMTQxMyAwLjQ2NTYyMDYsMC4yMTg0IDAuNzM2OTYyOSwwLjIxODQgMC43MjM1NzkzLDAgMS4zMTAxNTYzLC0wLjU4NjYgMS4zMTAxNTYzLC0xLjMxMDIgMCwtMC4yNzEzIC0wLjA3NzA5MywtMC41Mjc4IC0wLjIxODM1OTQsLTAuNzM2OSAtMC4yMjA0OTQxLC0wLjE2ODYgLTAuNDkyNTQ0MywtMC4yNzMgLTAuNzkxNTUyOCwtMC4yNzMgeiBtIC0zLjA4NDMyNjEsMCBjIC0wLjcyMzU3OTMsMCAtMS4zMTAxNTYzLDAuNTg2NiAtMS4zMTAxNTYzLDEuMzEwMiAwLDAuMjk5IDAuMTA0MzQxOSwwLjU3MSAwLjI3Mjk0OTIsMC43OTE1IDAuMjA5MTAyNCwwLjE0MTMgMC40NjU2MjA3LDAuMjE4NCAwLjczNjk2MjksMC4yMTg0IDAuNzIzNTc5MywwIDEuMzEwMTU2MywtMC41ODY2IDEuMzEwMTU2MywtMS4zMTAyIDAsLTAuMjcxMyAtMC4wNzcwOTMsLTAuNTI3OCAtMC4yMTgzNTk0LC0wLjczNjkgLTAuMjIwNDk0LC0wLjE2ODYgLTAuNDkyNTQ0MiwtMC4yNzMgLTAuNzkxNTUyNywtMC4yNzMgeiBtIC0zLjAyOTczNjQsMy4wMjk4IEMgMC41ODY1NzY5MywxMDQ4LjQ3NjMgMCwxMDQ5LjA2MjggMCwxMDQ5Ljc4NjQgYyAwLDAuMjk5IDAuMTA0MzQxOSwwLjU3MTEgMC4yNzI5NDkyMiwwLjc5MTYgMC4yMDkxMDIyOSwwLjE0MTIgMC40NjU2MjA2NSwwLjIxODMgMC43MzY5NjI4OCwwLjIxODMgMC43MjM1NzkzLDAgMS4zMTAxNTYzLC0wLjU4NjUgMS4zMTAxNTYzLC0xLjMxMDEgMCwtMC4yNzE0IC0wLjA3NzA5MywtMC41Mjc5IC0wLjIxODM1OTQsLTAuNzM3IC0wLjIyMDQ5NDEsLTAuMTY4NiAtMC40OTI1NDQzLC0wLjI3MjkgLTAuNzkxNTUyOCwtMC4yNzI5IHogbSAzLjAyOTczNjQsMCBjIC0wLjcyMzU3OTMsMCAtMS4zMTAxNTYzLDAuNTg2NSAtMS4zMTAxNTYzLDEuMzEwMSAwLDAuMjk5IDAuMTA0MzQxOSwwLjU3MTEgMC4yNzI5NDkyLDAuNzkxNiAwLjIwOTEwMjQsMC4xNDEyIDAuNDY1NjIwNywwLjIxODMgMC43MzY5NjI5LDAuMjE4MyAwLjcyMzU3OTMsMCAxLjMxMDE1NjMsLTAuNTg2NSAxLjMxMDE1NjMsLTEuMzEwMSAwLC0wLjI3MTQgLTAuMDc3MDkzLC0wLjUyNzkgLTAuMjE4MzU5NCwtMC43MzcgLTAuMjIwNDk0LC0wLjE2ODYgLTAuNDkyNTQ0MiwtMC4yNzI5IC0wLjc5MTU1MjcsLTAuMjcyOSB6IG0gMy4wODQzMjYxLDAgYyAtMC43MjM1NzkyLDAgLTEuMzEwMTU2MiwwLjU4NjUgLTEuMzEwMTU2MiwxLjMxMDEgMCwwLjI5OSAwLjEwNDM0MTksMC41NzExIDAuMjcyOTQ5MiwwLjc5MTYgMC4yMDkxMDI0LDAuMTQxMiAwLjQ2NTYyMDYsMC4yMTgzIDAuNzM2OTYyOSwwLjIxODMgMC43MjM1NzkzLDAgMS4zMTAxNTYzLC0wLjU4NjUgMS4zMTAxNTYzLC0xLjMxMDEgMCwtMC4yNzE0IC0wLjA3NzA5MywtMC41Mjc5IC0wLjIxODM1OTQsLTAuNzM3IC0wLjIyMDQ5NDEsLTAuMTY4NiAtMC40OTI1NDQzLC0wLjI3MjkgLTAuNzkxNTUyOCwtMC4yNzI5IHoiLz4gIDwvZz4gIDxnICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPiAgICA8cGF0aCAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIiAgICAgICBkPSJtIDguMjE1NzcxNSwwLjI3Mjk0OTIyIGMgMC4xNDEyNjY3LDAuMjA5MTAyMjkgMC4yMTgzNTk0LDAuNDY1NjIwNjUgMC4yMTgzNTk0LDAuNzM2OTYyODggMCwwLjcyMzU3OTMgLTAuNTg2NTc3LDEuMzEwMTU2MyAtMS4zMTAxNTYzLDEuMzEwMTU2MyAtMC4yNzEzNDIzLDAgLTAuNTI3ODYwNSwtMC4wNzcwOTMgLTAuNzM2OTYyOSwtMC4yMTgzNTk0IDAuMjM5NDEwNCwwLjMxMzA4NTkgMC42MTI2MzYyLDAuNTE4NjAzNSAxLjAzNzIwNywwLjUxODYwMzUgMC43MjM1NzkzLDAgMS4zMTAxNTYzLC0wLjU4NjU3NyAxLjMxMDE1NjMsLTEuMzEwMTU2MyAwLC0wLjQyNDU3MDc2IC0wLjIwNTUxNzYsLTAuNzk3Nzk2NTkgLTAuNTE4NjAzNSwtMS4wMzcyMDY5OCB6IG0gMCwzLjA4NDMyNjE4IGMgMC4xNDEyNjY3LDAuMjA5MTAyMyAwLjIxODM1OTQsMC40NjU2MjA2IDAuMjE4MzU5NCwwLjczNjk2MjkgMCwwLjcyMzU3OTMgLTAuNTg2NTc3LDEuMzEwMTU2MiAtMS4zMTAxNTYzLDEuMzEwMTU2MiAtMC4yNzEzNDIzLDAgLTAuNTI3ODYwNSwtMC4wNzcwOTMgLTAuNzM2OTYyOSwtMC4yMTgzNTkzIDAuMjM5NDEwNCwwLjMxMzA4NTkgMC42MTI2MzYyLDAuNTE4NjAzNSAxLjAzNzIwNywwLjUxODYwMzUgMC43MjM1NzkzLDAgMS4zMTAxNTYzLC0wLjU4NjU3NyAxLjMxMDE1NjMsLTEuMzEwMTU2MyAwLC0wLjQyNDU3MDggLTAuMjA1NTE3NiwtMC43OTc3OTY3IC0wLjUxODYwMzUsLTEuMDM3MjA3IHogbSAtMy4wODQzMjYyLDAgYyAwLjE0MTI2NjcsMC4yMDkxMDIzIDAuMjE4MzU5NCwwLjQ2NTYyMDYgMC4yMTgzNTk0LDAuNzM2OTYyOSAwLDAuNzIzNTc5MyAtMC41ODY1NzcsMS4zMTAxNTYyIC0xLjMxMDE1NjMsMS4zMTAxNTYyIC0wLjI3MTM0MjIsMCAtMC41Mjc4NjA1LC0wLjA3NzA5MyAtMC43MzY5NjI5LC0wLjIxODM1OTMgMC4yMzk0MTA0LDAuMzEzMDg1OSAwLjYxMjYzNjMsMC41MTg2MDM1IDEuMDM3MjA3MSwwLjUxODYwMzUgMC43MjM1NzkzLDAgMS4zMTAxNTYyLC0wLjU4NjU3NyAxLjMxMDE1NjIsLTEuMzEwMTU2MyAwLC0wLjQyNDU3MDggLTAuMjA1NTE3NSwtMC43OTc3OTY3IC0wLjUxODYwMzUsLTEuMDM3MjA3IHogTSAyLjEwMTcwOSw2LjM4NzAxMTcgYyAwLjE0MTI2NjcsMC4yMDkxMDI0IDAuMjE4MzU5NCwwLjQ2NTYyMDYgMC4yMTgzNTk0LDAuNzM2OTYyOSAwLDAuNzIzNTc5MyAtMC41ODY1NzcsMS4zMTAxNTYzIC0xLjMxMDE1NjMsMS4zMTAxNTYzIC0wLjI3MTM0MjIzLDAgLTAuNTI3ODYwNTksLTAuMDc3MDkzIC0wLjczNjk2Mjg4LC0wLjIxODM1OTQgMC4yMzk0MTAzOSwwLjMxMzA4NTkgMC42MTI2MzYyMiwwLjUxODYwMzUgMS4wMzcyMDY5OCwwLjUxODYwMzUgMC43MjM1NzkzLDAgMS4zMTAxNTYzLC0wLjU4NjU3NyAxLjMxMDE1NjMsLTEuMzEwMTU2MyAwLC0wLjQyNDU3MDggLTAuMjA1NTE3NiwtMC43OTc3OTY2IC0wLjUxODYwMzUsLTEuMDM3MjA3IHogbSAzLjAyOTczNjMsMCBjIDAuMTQxMjY2NywwLjIwOTEwMjQgMC4yMTgzNTk0LDAuNDY1NjIwNiAwLjIxODM1OTQsMC43MzY5NjI5IDAsMC43MjM1NzkzIC0wLjU4NjU3NywxLjMxMDE1NjMgLTEuMzEwMTU2MywxLjMxMDE1NjMgLTAuMjcxMzQyMiwwIC0wLjUyNzg2MDUsLTAuMDc3MDkzIC0wLjczNjk2MjksLTAuMjE4MzU5NCAwLjIzOTQxMDQsMC4zMTMwODU5IDAuNjEyNjM2MywwLjUxODYwMzUgMS4wMzcyMDcxLDAuNTE4NjAzNSAwLjcyMzU3OTMsMCAxLjMxMDE1NjIsLTAuNTg2NTc3IDEuMzEwMTU2MiwtMS4zMTAxNTYzIDAsLTAuNDI0NTcwOCAtMC4yMDU1MTc1LC0wLjc5Nzc5NjYgLTAuNTE4NjAzNSwtMS4wMzcyMDcgeiBtIDMuMDg0MzI2MiwwIGMgMC4xNDEyNjY3LDAuMjA5MTAyNCAwLjIxODM1OTQsMC40NjU2MjA2IDAuMjE4MzU5NCwwLjczNjk2MjkgMCwwLjcyMzU3OTMgLTAuNTg2NTc3LDEuMzEwMTU2MyAtMS4zMTAxNTYzLDEuMzEwMTU2MyAtMC4yNzEzNDIzLDAgLTAuNTI3ODYwNSwtMC4wNzcwOTMgLTAuNzM2OTYyOSwtMC4yMTgzNTk0IDAuMjM5NDEwNCwwLjMxMzA4NTkgMC42MTI2MzYyLDAuNTE4NjAzNSAxLjAzNzIwNywwLjUxODYwMzUgMC43MjM1NzkzLDAgMS4zMTAxNTYzLC0wLjU4NjU3NyAxLjMxMDE1NjMsLTEuMzEwMTU2MyAwLC0wLjQyNDU3MDggLTAuMjA1NTE3NiwtMC43OTc3OTY2IC0wLjUxODYwMzUsLTEuMDM3MjA3IHoiIC8+ICA8L2c+PC9zdmc+); - background-repeat: no-repeat; - background-position: 100% 100%; - pointer-events: auto !important; + +/* +THEMES: +*/ + +/* NONE THEME: */ +.os-theme-none.os-scrollbar { + display: none !important; } -.os-host-rtl > .os-scrollbar-corner.os-scrollbar-corner-resize { - -webkit-transform: scale(-1, 1); - transform: scale(-1, 1); +/* DARK & LIGHT THEME: */ +.os-theme-dark.os-scrollbar-horizontal, +.os-theme-light.os-scrollbar-horizontal { + right: 10px; + height: 10px; } -.os-host-overflow { - overflow: hidden !important; +.os-theme-dark.os-scrollbar-vertical, +.os-theme-light.os-scrollbar-vertical { + bottom: 10px; + width: 10px; +} +.os-theme-dark.os-scrollbar-horizontal-rtl, +.os-theme-light.os-scrollbar-horizontal-rtl { + left: 10px; + right: 0; +} +.os-theme-dark.os-scrollbar, +.os-theme-light.os-scrollbar { + padding: 2px; + box-sizing: border-box; + background: transparent; +} +.os-theme-dark.os-scrollbar-unusable, +.os-theme-light.os-scrollbar-unusable { + background: transparent; +} +.os-theme-dark.os-scrollbar > .os-scrollbar-track, +.os-theme-light.os-scrollbar > .os-scrollbar-track { + background: transparent; +} +.os-theme-dark.os-scrollbar-horizontal > .os-scrollbar-track > .os-scrollbar-handle, +.os-theme-light.os-scrollbar-horizontal > .os-scrollbar-track > .os-scrollbar-handle { + min-width: 30px; +} +.os-theme-dark.os-scrollbar-vertical > .os-scrollbar-track > .os-scrollbar-handle, +.os-theme-light.os-scrollbar-vertical > .os-scrollbar-track > .os-scrollbar-handle { + min-height: 30px; +} +.os-theme-dark.os-scrollbar-transition > .os-scrollbar-track > .os-scrollbar-handle, +.os-theme-light.os-scrollbar-transition > .os-scrollbar-track > .os-scrollbar-handle { + transition: background-color 0.3s; +} +.os-theme-dark.os-scrollbar > .os-scrollbar-track > .os-scrollbar-handle, +.os-theme-light.os-scrollbar > .os-scrollbar-track > .os-scrollbar-handle, +.os-theme-dark.os-scrollbar > .os-scrollbar-track, +.os-theme-light.os-scrollbar > .os-scrollbar-track { + border-radius: 10px; +} +.os-theme-dark.os-scrollbar > .os-scrollbar-track > .os-scrollbar-handle { + background: rgba(0, 0, 0, 0.4); +} +.os-theme-light.os-scrollbar > .os-scrollbar-track > .os-scrollbar-handle { + background: rgba(255, 255, 255, 0.4); +} +.os-theme-dark.os-scrollbar:hover > .os-scrollbar-track > .os-scrollbar-handle { + background: rgba(0, 0, 0, 0.55); +} +.os-theme-light.os-scrollbar:hover > .os-scrollbar-track > .os-scrollbar-handle { + background: rgba(255, 255, 255, 0.55); +} +.os-theme-dark.os-scrollbar > .os-scrollbar-track > .os-scrollbar-handle.active { + background: rgba(0, 0, 0, 0.7); +} +.os-theme-light.os-scrollbar > .os-scrollbar-track > .os-scrollbar-handle.active { + background: rgba(255, 255, 255, 0.7); +} +.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before, +.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before, +.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before, +.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before { + content: ''; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: block; +} +.os-theme-dark.os-host-scrollbar-hidden > .os-scrollbar-handle:before { + display: none; +} +.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before, +.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before { + top: -6px; + bottom: -2px; +} +.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before, +.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before { + left: -6px; + right: -2px; +} +.os-theme-dark.os-scrollbar-vertical-rtl .os-scrollbar-handle:before, +.os-theme-light.os-scrollbar-vertical-rtl .os-scrollbar-handle:before { + right: -6px; + left: -2px; } diff --git a/playwright.config.base.js b/playwright.config.base.js index 50e6d78..29b8f81 100644 --- a/playwright.config.base.js +++ b/playwright.config.base.js @@ -9,9 +9,9 @@ module.exports = { workers: 4, projects: [ { - name: 'Safari', + name: 'Chromium', use: { - ...devices['Desktop Safari'], + ...devices['Desktop Chromium'], headless: false, }, },