diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index a4bcfc2..acc7757 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -536,17 +536,17 @@ const absoluteCoordinates = (elm) => { }; const createCache = (update, options) => { - const { _equal, _initialValue } = options || {}; + const { _equal, _initialValue, _alwaysUpdateValues } = options || {}; let _value = _initialValue; let _previous; - return (force, context) => { + const cacheUpdate = (force, context) => { const curr = _value; - const newVal = update(context, _value, _previous); + const newVal = update ? update(context, _value, _previous) : context; const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal); - if (changed) { + if (changed || _alwaysUpdateValues) { _value = newVal; _previous = curr; } @@ -557,6 +557,8 @@ const createCache = (update, options) => { _changed: changed, }; }; + + return cacheUpdate; }; function createCommonjsModule(fn) { @@ -1009,27 +1011,47 @@ const scrollAmount = 3333333; const getDirection = (elm) => style(elm, 'direction'); +const domRectHasDimensions = (rect) => rect && (rect.height > 0 || rect.width > 0); + const createSizeObserver = (target, onSizeChangedCallback, options) => { - const { _direction: direction = false, _appear: appear = false } = options || {}; + const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {}; const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior; const baseElements = createDOM(`
`); const sizeObserver = baseElements[0]; const listenerElement = sizeObserver.firstChild; + const updateResizeObserverContentRectCache = createCache(0, { + _alwaysUpdateValues: true, + _equal: (currVal, newVal) => !(!currVal || (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))), + }); - const onSizeChangedCallbackProxy = (directionCache) => { - if (direction) { - const rtl = getDirection(sizeObserver) === 'rtl'; + const onSizeChangedCallbackProxy = (sizeChangedContext) => { + const directionCacheValue = sizeChangedContext && sizeChangedContext._value; + let skip = false; + let doDirectionScroll = true; + + if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { + const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect); + skip = !_previous || !domRectHasDimensions(_value); + doDirectionScroll = !skip && _changed; + } else if (directionCacheValue) { + doDirectionScroll = sizeChangedContext._changed; + } + + if (observeDirectionChange && doDirectionScroll) { + const rtl = (directionCacheValue || getDirection(sizeObserver)) === 'rtl'; scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); scrollTop(sizeObserver, scrollAmount); } - onSizeChangedCallback(isString((directionCache || {})._value) ? directionCache : undefined); + if (!skip) { + onSizeChangedCallback(directionCacheValue ? sizeChangedContext : undefined); + } }; const offListeners = []; - let appearCallback = appear ? onSizeChangedCallbackProxy : null; + let appearCallback = observeAppearChange ? onSizeChangedCallbackProxy : false; if (ResizeObserverConstructor) { const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); @@ -1093,10 +1115,10 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { height: scrollAmount, }); reset(); - appearCallback = appear ? () => onScroll() : reset; + appearCallback = observeAppearChange ? () => onScroll() : reset; } - if (direction) { + if (observeDirectionChange) { const updateDirectionCache = createCache(() => getDirection(sizeObserver)); push( offListeners, @@ -1129,7 +1151,12 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { if (appearCallback) { addClass(sizeObserver, classNameSizeObserverAppear); - push(offListeners, on(sizeObserver, animationStartEventName, appearCallback)); + push( + offListeners, + on(sizeObserver, animationStartEventName, appearCallback, { + _once: !!ResizeObserverConstructor, + }) + ); } prependChildren(target, sizeObserver); @@ -1324,7 +1351,7 @@ const createDOMObserver = (target, callback, options) => { const baseAssertion = isNestedTarget ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) : notOnlyAttrChanged || contentAttrChanged; - const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, isNestedTarget, target, options); + const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); push(totalAddedNodes, addedNodes); contentChanged = contentChanged || contentFinalChanged; childListChanged = childListChanged || isChildListType; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 0f37bf1..6f98179 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/types.ts","../src/support/dom/attribute.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/class.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/lifecycles/lifecycleBase.ts","../src/lifecycles/structureLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { 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 = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | null, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | undefined | null;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null = preferredAnchor;\r\n let fragment: DocumentFragment | Node | undefined | null;\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);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | null): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: EventListener, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener, 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 = (target: EventTarget, eventNames: string, listener: EventListener, options?: OnOptions): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = once\r\n ? (evt: Event) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event) => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event) => evt.preventDefault();\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (a: T | undefined, b: T | undefined, props: Array): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n if (a[prop] !== b[prop]) {\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","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } 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\ntype CssStyles = { [key: string]: string | number };\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | null, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null, styles: string): string;\r\nexport function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null, property?: string): TRBL => {\r\n const finalProp = property || '';\r\n const top = `${finalProp}-top`;\r\n const right = `${finalProp}-right`;\r\n const bottom = `${finalProp}-bottom`;\r\n const left = `${finalProp}-left`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null): 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): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","export interface Cache {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n readonly _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n _equal?: EqualCachePropFunction;\r\n _initialValue?: T;\r\n}\r\n\r\nexport type CacheUpdate = (force?: boolean | 0, context?: C) => Cache;\r\n\r\nexport type UpdateCachePropFunction = (context?: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): CacheUpdate => {\r\n const { _equal, _initialValue } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n return (force, context) => {\r\n const curr = _value;\r\n const newVal = update(context, _value, _previous);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n };\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType>;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation> {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport function transformOptions>(\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): OptionsWithOptionsTemplateTransformation {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n runEach,\r\n equalWH,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = offsetSize(parentElm);\r\n const minOffsetsize = offsetSize(childElm);\r\n const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = offsetSize(parentElm);\r\n const maxOffsetsize = offsetSize(childElm);\r\n const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollBarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollBarSize.x === 0,\r\n y: nativeScrollBarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\r\n _nativeScrollbarSize: nativeScrollBarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: getNativeScrollbarStyling(envElm),\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeAttr(envElm, 'class');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollBarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n Cache,\r\n OptionsValidated,\r\n OptionsWithOptionsTemplate,\r\n transformOptions,\r\n validateOptions,\r\n assignDeep,\r\n hasOwnProperty,\r\n isEmptyObject,\r\n} from 'support';\r\nimport { CSSDirection, PlainObject } from 'typings';\r\n\r\ninterface LifecycleBaseUpdateHints {\r\n _force?: boolean;\r\n _changedOptions?: OptionsValidated;\r\n}\r\n\r\nexport interface LifecycleBase {\r\n _options(newOptions?: O): O;\r\n _update(force?: boolean): void;\r\n}\r\n\r\nexport interface Lifecycle extends LifecycleBase {\r\n _destruct(): void;\r\n _onSizeChanged?(): void;\r\n _onDirectionChanged?(directionCache: Cache): void;\r\n _onTrinsicChanged?(widthIntrinsic: boolean, heightIntrinsicCache: Cache): void;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\n/**\r\n * Creates a object which can be seen as the base of a lifecycle because it provides all the tools to manage a lifecycle and its options, cache and base functions.\r\n * @param defaultOptionsWithTemplate A object which describes the options and the default options of the lifecycle.\r\n * @param initialOptions The initialOptions for the lifecylce. (Can be undefined)\r\n * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects.\r\n */\r\nexport const createLifecycleBase = (\r\n defaultOptionsWithTemplate: OptionsWithOptionsTemplate>,\r\n initialOptions: O | undefined,\r\n updateFunction: (force: boolean, checkOption: LifecycleCheckOption) => any\r\n): LifecycleBase => {\r\n const { _template: optionsTemplate, _options: defaultOptions } = transformOptions>(defaultOptionsWithTemplate);\r\n const options: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(initialOptions || ({} as O), optionsTemplate, null, true)._validated\r\n );\r\n\r\n const update = (hints: LifecycleBaseUpdateHints) => {\r\n const { _force, _changedOptions } = hints;\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: _force || getPropByPath(_changedOptions, path) !== undefined,\r\n });\r\n updateFunction(!!_force, checkOption);\r\n };\r\n\r\n update({ _force: true });\r\n\r\n return {\r\n _options(newOptions?: O) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, options, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(options, _changedOptions);\r\n update({ _changedOptions });\r\n }\r\n }\r\n return options;\r\n },\r\n _update: (_force?: boolean) => {\r\n update({ _force });\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n cssProperty,\r\n runEach,\r\n createCache,\r\n topRightBottomLeft,\r\n TRBL,\r\n WH,\r\n XY,\r\n equalTRBL,\r\n equalXY,\r\n optionsTemplateTypes as oTypes,\r\n OptionsTemplateValue,\r\n style,\r\n OptionsWithOptionsTemplate,\r\n scrollSize,\r\n offsetSize,\r\n} from 'support';\r\nimport { OSTargetObject } from 'typings';\r\nimport { createLifecycleBase, Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { getEnvironment, Environment } from 'environment';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\nexport interface StructureLifecycleOptions {\r\n paddingAbsolute: boolean;\r\n overflowBehavior?: {\r\n x?: OverflowBehavior;\r\n y?: OverflowBehavior;\r\n };\r\n}\r\n\r\nconst overflowBehaviorAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n paddingAbsolute: [false, oTypes.boolean],\r\n overflowBehavior: {\r\n x: ['scroll', overflowBehaviorAllowedValues],\r\n y: ['scroll', overflowBehaviorAllowedValues],\r\n },\r\n};\r\n\r\nconst cssMarginEnd = cssProperty('margin-inline-end');\r\nconst cssBorderEnd = cssProperty('border-inline-end');\r\n\r\nexport const createStructureLifecycle = (\r\n target: OSTargetObject,\r\n initialOptions?: StructureLifecycleOptions\r\n): Lifecycle => {\r\n const { host, padding: paddingElm, viewport, content } = target;\r\n const destructFns: (() => any)[] = [];\r\n const env: Environment = getEnvironment();\r\n const scrollbarsOverlaid = env._nativeScrollbarIsOverlaid;\r\n const supportsScrollbarStyling = env._nativeScrollbarStyling;\r\n const supportFlexboxGlue = env._flexboxGlue;\r\n // direction change is only needed to update scrollbar hiding, therefore its not needed if css can do it, scrollbars are invisible or overlaid on y axis\r\n const directionObserverObsolete = (cssMarginEnd && cssBorderEnd) || supportsScrollbarStyling || scrollbarsOverlaid.y;\r\n\r\n const updatePaddingCache = createCache(() => topRightBottomLeft(host, 'padding'), { _equal: equalTRBL });\r\n const updateOverflowAmountCache = createCache, { _contentScrollSize: WH; _viewportSize: WH }>(\r\n (ctx) => ({\r\n x: Math.max(0, Math.round((ctx!._contentScrollSize.w - ctx!._viewportSize.w) * 100) / 100),\r\n y: Math.max(0, Math.round((ctx!._contentScrollSize.h - ctx!._viewportSize.h) * 100) / 100),\r\n }),\r\n { _equal: equalXY }\r\n );\r\n\r\n const { _options, _update } = createLifecycleBase(defaultOptionsWithTemplate, initialOptions, (force, checkOption) => {\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const { _value: padding, _changed: paddingChanged } = updatePaddingCache(force);\r\n\r\n if (paddingAbsoluteChanged || paddingChanged) {\r\n const paddingStyle: TRBL = {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n };\r\n\r\n if (!paddingAbsolute) {\r\n paddingStyle.t = -padding!.t;\r\n paddingStyle.r = -(padding!.r + padding!.l);\r\n paddingStyle.b = -(padding!.b + padding!.t);\r\n paddingStyle.l = -padding!.l;\r\n }\r\n\r\n style(paddingElm, {\r\n top: paddingStyle.t,\r\n left: paddingStyle.l,\r\n 'margin-right': paddingStyle.r,\r\n 'margin-bottom': paddingStyle.b,\r\n 'max-width': `calc(100% + ${paddingStyle.r * -1}px)`,\r\n });\r\n }\r\n\r\n const viewportOffsetSize = offsetSize(paddingElm);\r\n const contentClientSize = offsetSize(content);\r\n const contentScrollSize = scrollSize(content);\r\n const overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: contentScrollSize,\r\n _viewportSize: {\r\n w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize.w),\r\n h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize.h),\r\n },\r\n });\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n console.log('overflowAmount', overflowAmount);\r\n console.log('overflowAmountChanged', overflowAmountChanged);\r\n\r\n /*\r\n var setOverflowVariables = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xyI = scrollbarVarsInverted._x_y;\r\n var xy = scrollbarVars._x_y;\r\n var wh = scrollbarVars._w_h;\r\n var widthHeight = scrollbarVars._width_height;\r\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\r\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\r\n var checkFractionalOverflowAmount = previousOverflowAmount && previousOverflowAmount[xy] > 0 && _viewportElementNative[scrollMax] === 0;\r\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\r\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\r\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\r\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\r\n overflowAmount[xy] *=\r\n hideOverflowForceTextarea || (checkFractionalOverflowAmount && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1) ? 0 : 1;\r\n hasOverflow[xy] = overflowAmount[xy] > 0;\r\n\r\n //hideOverflow:\r\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\r\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\r\n hideOverflow[xy] =\r\n overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy]\r\n ? hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]\r\n : hasOverflow[xy];\r\n hideOverflow[xy + 's'] = hideOverflow[xy] ? overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy] : false;\r\n\r\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\r\n };\r\n*/\r\n /*\r\n if (!supportsScrollbarStyling) {\r\n paddingStyle.r -= env._nativeScrollbarSize.y;\r\n paddingStyle.b -= env._nativeScrollbarSize.x;\r\n }\r\n */\r\n });\r\n\r\n const onSizeChanged = () => {\r\n _update();\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n const { _changed, _value } = heightIntrinsicCache;\r\n if (_changed) {\r\n style(content, { height: _value ? 'auto' : '100%' });\r\n }\r\n };\r\n\r\n return {\r\n _options,\r\n _update,\r\n _onSizeChanged: onSizeChanged,\r\n _onTrinsicChanged: onTrinsicChanged,\r\n _destruct() {\r\n runEach(destructFns);\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n isString,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { CSSDirection } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getDirection = (elm: HTMLElement): CSSDirection => style(elm, 'direction') as CSSDirection;\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionCache?: Cache) => any,\r\n options?: SizeObserverOptions\r\n): (() => void) => {\r\n const { _direction: direction = false, _appear: appear = false } = options || {};\r\n const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior;\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const onSizeChangedCallbackProxy = (directionCache?: Cache) => {\r\n if (direction) {\r\n const rtl = getDirection(sizeObserver) === 'rtl';\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n onSizeChangedCallback(isString((directionCache || {})._value) ? directionCache : undefined);\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | null = appear ? onSizeChangedCallbackProxy : null;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = appear ? () => onScroll() : reset;\r\n }\r\n\r\n if (direction) {\r\n const updateDirectionCache = createCache(() => getDirection(sizeObserver));\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionCache = updateDirectionCache();\r\n const { _value, _changed } = directionCache;\r\n if (_changed) {\r\n if (_value === 'rtl') {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionCache);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(offListeners, on(sizeObserver, animationStartEventName, appearCallback));\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n Cache,\r\n createDOM,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => any\r\n): (() => void) => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const updateHeightIntrinsicCache = createCache>(\r\n (ioEntryOrSize) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n push(\r\n offListeners,\r\n createSizeObserver(trinsicObserver, () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(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 off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype TruthyOrFalsy = boolean | '' | 0 | null | undefined;\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | ''\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: TruthyOrFalsy,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => TruthyOrFalsy;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => TruthyOrFalsy;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 80)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject, CSSDirection } from 'typings';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { Cache, appendChildren, addClass, contents, is, isHTMLElement, createDiv, each, push } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { classNameHost, classNamePadding, classNameViewport, classNameContent } from 'classnames';\r\n\r\nconst normalizeTarget = (target: OSTarget): OSTargetObject => {\r\n if (isHTMLElement(target)) {\r\n const isTextarea = is(target, 'textarea');\r\n const host = (isTextarea ? createDiv() : target) as HTMLElement;\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n appendChildren(content, contents(target));\r\n appendChildren(target, padding);\r\n addClass(host, classNameHost);\r\n\r\n return {\r\n target,\r\n host,\r\n padding,\r\n viewport,\r\n content,\r\n };\r\n }\r\n\r\n const { host, padding, viewport, content } = target;\r\n\r\n addClass(host, classNameHost);\r\n addClass(padding, classNamePadding);\r\n addClass(viewport, classNameViewport);\r\n addClass(content, classNameContent);\r\n\r\n return target;\r\n};\r\n\r\nconst OverlayScrollbars = (target: OSTarget, options?: any, extensions?: any): void => {\r\n const osTarget: OSTargetObject = normalizeTarget(target);\r\n const lifecycles: Lifecycle[] = [];\r\n const { host, content } = osTarget;\r\n\r\n push(lifecycles, createStructureLifecycle(osTarget));\r\n\r\n // eslint-disable-next-line\r\n const onSizeChanged = (directionCache?: Cache) => {\r\n if (directionCache) {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onDirectionChanged && lifecycle._onDirectionChanged(directionCache);\r\n });\r\n } else {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onSizeChanged && lifecycle._onSizeChanged();\r\n });\r\n }\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onTrinsicChanged && lifecycle._onTrinsicChanged(widthIntrinsic, heightIntrinsicCache);\r\n });\r\n };\r\n\r\n createSizeObserver(host, onSizeChanged, { _appear: true, _direction: true });\r\n createTrinsicObserver(host, onTrinsicChanged);\r\n createDOMObserver(host, () => {\r\n return null;\r\n });\r\n createDOMObserver(\r\n content,\r\n () => {\r\n return null;\r\n },\r\n { _observeContent: true }\r\n );\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n getEnvironment(),\r\n OverlayScrollbars(document.body),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","equalWH","equalXY","equalTRBL","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","property","finalProp","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","createCache","update","_equal","_initialValue","_value","_previous","force","context","curr","newVal","changed","_changed","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","round","Math","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollBarSize","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","getPropByPath","path","o","createLifecycleBase","defaultOptionsWithTemplate","initialOptions","updateFunction","optionsTemplate","defaultOptions","hints","_force","_changedOptions","checkOption","newOptions","_update","overflowBehaviorAllowedValues","paddingAbsolute","oTypes","boolean","overflowBehavior","cssMarginEnd","cssBorderEnd","createStructureLifecycle","host","padding","paddingElm","viewport","content","destructFns","scrollbarsOverlaid","supportsScrollbarStyling","supportFlexboxGlue","directionObserverObsolete","updatePaddingCache","updateOverflowAmountCache","ctx","max","_contentScrollSize","_viewportSize","paddingAbsoluteChanged","paddingChanged","paddingStyle","viewportOffsetSize","contentClientSize","contentScrollSize","overflowAmuntCache","overflowAmount","overflowAmountChanged","log","onSizeChanged","onTrinsicChanged","widthIntrinsic","heightIntrinsicCache","height","_onSizeChanged","_onTrinsicChanged","_destruct","animationStartEventName","scrollEventName","scrollAmount","getDirection","createSizeObserver","onSizeChangedCallback","_direction","_appear","appear","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","onSizeChangedCallbackProxy","directionCache","rtl","appearCallback","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","width","updateDirectionCache","event","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","pop","root","newSize","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","_destroy","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetAttrChange","_ignoreTargetChange","_ignoreContentChange","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","Map","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","normalizeTarget","isTextarea","OverlayScrollbars","extensions","osTarget","lifecycles","lifecycle","_onDirectionChanged"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/class.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/lifecycles/lifecycleBase.ts","../src/lifecycles/structureLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { 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 = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | null, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | undefined | null;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null = preferredAnchor;\r\n let fragment: DocumentFragment | Node | undefined | null;\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);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | null): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: EventListener, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener, 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 = (target: EventTarget, eventNames: string, listener: EventListener, options?: OnOptions): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = once\r\n ? (evt: Event) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event) => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event) => evt.preventDefault();\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (a: T | undefined, b: T | undefined, props: Array): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n if (a[prop] !== b[prop]) {\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","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } 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\ntype CssStyles = { [key: string]: string | number };\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | null, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null, styles: string): string;\r\nexport function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null, property?: string): TRBL => {\r\n const finalProp = property || '';\r\n const top = `${finalProp}-top`;\r\n const right = `${finalProp}-right`;\r\n const bottom = `${finalProp}-bottom`;\r\n const left = `${finalProp}-left`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null): 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): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","export interface Cache {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n readonly _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C ? (force?: boolean | 0, context?: C) => Cache : (force: boolean | 0, context: C) => Cache;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): CacheUpdate => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return cacheUpdate;\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType>;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation> {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport function transformOptions>(\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): OptionsWithOptionsTemplateTransformation {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n runEach,\r\n equalWH,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = offsetSize(parentElm);\r\n const minOffsetsize = offsetSize(childElm);\r\n const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = offsetSize(parentElm);\r\n const maxOffsetsize = offsetSize(childElm);\r\n const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollBarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollBarSize.x === 0,\r\n y: nativeScrollBarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\r\n _nativeScrollbarSize: nativeScrollBarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: getNativeScrollbarStyling(envElm),\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeAttr(envElm, 'class');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollBarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n Cache,\r\n OptionsValidated,\r\n OptionsWithOptionsTemplate,\r\n transformOptions,\r\n validateOptions,\r\n assignDeep,\r\n hasOwnProperty,\r\n isEmptyObject,\r\n} from 'support';\r\nimport { CSSDirection, PlainObject } from 'typings';\r\n\r\ninterface LifecycleBaseUpdateHints {\r\n _force?: boolean;\r\n _changedOptions?: OptionsValidated;\r\n}\r\n\r\nexport interface LifecycleBase {\r\n _options(newOptions?: O): O;\r\n _update(force?: boolean): void;\r\n}\r\n\r\nexport interface Lifecycle extends LifecycleBase {\r\n _destruct(): void;\r\n _onSizeChanged?(): void;\r\n _onDirectionChanged?(directionCache: Cache): void;\r\n _onTrinsicChanged?(widthIntrinsic: boolean, heightIntrinsicCache: Cache): void;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\n/**\r\n * Creates a object which can be seen as the base of a lifecycle because it provides all the tools to manage a lifecycle and its options, cache and base functions.\r\n * @param defaultOptionsWithTemplate A object which describes the options and the default options of the lifecycle.\r\n * @param initialOptions The initialOptions for the lifecylce. (Can be undefined)\r\n * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects.\r\n */\r\nexport const createLifecycleBase = (\r\n defaultOptionsWithTemplate: OptionsWithOptionsTemplate>,\r\n initialOptions: O | undefined,\r\n updateFunction: (force: boolean, checkOption: LifecycleCheckOption) => any\r\n): LifecycleBase => {\r\n const { _template: optionsTemplate, _options: defaultOptions } = transformOptions>(defaultOptionsWithTemplate);\r\n const options: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(initialOptions || ({} as O), optionsTemplate, null, true)._validated\r\n );\r\n\r\n const update = (hints: LifecycleBaseUpdateHints) => {\r\n const { _force, _changedOptions } = hints;\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: _force || getPropByPath(_changedOptions, path) !== undefined,\r\n });\r\n updateFunction(!!_force, checkOption);\r\n };\r\n\r\n update({ _force: true });\r\n\r\n return {\r\n _options(newOptions?: O) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, options, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(options, _changedOptions);\r\n update({ _changedOptions });\r\n }\r\n }\r\n return options;\r\n },\r\n _update: (_force?: boolean) => {\r\n update({ _force });\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n cssProperty,\r\n runEach,\r\n createCache,\r\n topRightBottomLeft,\r\n TRBL,\r\n WH,\r\n XY,\r\n equalTRBL,\r\n equalXY,\r\n optionsTemplateTypes as oTypes,\r\n OptionsTemplateValue,\r\n style,\r\n OptionsWithOptionsTemplate,\r\n scrollSize,\r\n offsetSize,\r\n} from 'support';\r\nimport { OSTargetObject } from 'typings';\r\nimport { createLifecycleBase, Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { getEnvironment, Environment } from 'environment';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\nexport interface StructureLifecycleOptions {\r\n paddingAbsolute: boolean;\r\n overflowBehavior?: {\r\n x?: OverflowBehavior;\r\n y?: OverflowBehavior;\r\n };\r\n}\r\n\r\nconst overflowBehaviorAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n paddingAbsolute: [false, oTypes.boolean],\r\n overflowBehavior: {\r\n x: ['scroll', overflowBehaviorAllowedValues],\r\n y: ['scroll', overflowBehaviorAllowedValues],\r\n },\r\n};\r\n\r\nconst cssMarginEnd = cssProperty('margin-inline-end');\r\nconst cssBorderEnd = cssProperty('border-inline-end');\r\n\r\nexport const createStructureLifecycle = (\r\n target: OSTargetObject,\r\n initialOptions?: StructureLifecycleOptions\r\n): Lifecycle => {\r\n const { host, padding: paddingElm, viewport, content } = target;\r\n const destructFns: (() => any)[] = [];\r\n const env: Environment = getEnvironment();\r\n const scrollbarsOverlaid = env._nativeScrollbarIsOverlaid;\r\n const supportsScrollbarStyling = env._nativeScrollbarStyling;\r\n const supportFlexboxGlue = env._flexboxGlue;\r\n // direction change is only needed to update scrollbar hiding, therefore its not needed if css can do it, scrollbars are invisible or overlaid on y axis\r\n const directionObserverObsolete = (cssMarginEnd && cssBorderEnd) || supportsScrollbarStyling || scrollbarsOverlaid.y;\r\n\r\n const updatePaddingCache = createCache(() => topRightBottomLeft(host, 'padding'), { _equal: equalTRBL });\r\n const updateOverflowAmountCache = createCache, { _contentScrollSize: WH; _viewportSize: WH }>(\r\n (ctx) => ({\r\n x: Math.max(0, Math.round((ctx!._contentScrollSize.w - ctx!._viewportSize.w) * 100) / 100),\r\n y: Math.max(0, Math.round((ctx!._contentScrollSize.h - ctx!._viewportSize.h) * 100) / 100),\r\n }),\r\n { _equal: equalXY }\r\n );\r\n\r\n const { _options, _update } = createLifecycleBase(defaultOptionsWithTemplate, initialOptions, (force, checkOption) => {\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const { _value: padding, _changed: paddingChanged } = updatePaddingCache(force);\r\n\r\n if (paddingAbsoluteChanged || paddingChanged) {\r\n const paddingStyle: TRBL = {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n };\r\n\r\n if (!paddingAbsolute) {\r\n paddingStyle.t = -padding!.t;\r\n paddingStyle.r = -(padding!.r + padding!.l);\r\n paddingStyle.b = -(padding!.b + padding!.t);\r\n paddingStyle.l = -padding!.l;\r\n }\r\n\r\n style(paddingElm, {\r\n top: paddingStyle.t,\r\n left: paddingStyle.l,\r\n 'margin-right': paddingStyle.r,\r\n 'margin-bottom': paddingStyle.b,\r\n 'max-width': `calc(100% + ${paddingStyle.r * -1}px)`,\r\n });\r\n }\r\n\r\n const viewportOffsetSize = offsetSize(paddingElm);\r\n const contentClientSize = offsetSize(content);\r\n const contentScrollSize = scrollSize(content);\r\n const overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: contentScrollSize,\r\n _viewportSize: {\r\n w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize.w),\r\n h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize.h),\r\n },\r\n });\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n console.log('overflowAmount', overflowAmount);\r\n console.log('overflowAmountChanged', overflowAmountChanged);\r\n\r\n /*\r\n var setOverflowVariables = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xyI = scrollbarVarsInverted._x_y;\r\n var xy = scrollbarVars._x_y;\r\n var wh = scrollbarVars._w_h;\r\n var widthHeight = scrollbarVars._width_height;\r\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\r\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\r\n var checkFractionalOverflowAmount = previousOverflowAmount && previousOverflowAmount[xy] > 0 && _viewportElementNative[scrollMax] === 0;\r\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\r\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\r\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\r\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\r\n overflowAmount[xy] *=\r\n hideOverflowForceTextarea || (checkFractionalOverflowAmount && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1) ? 0 : 1;\r\n hasOverflow[xy] = overflowAmount[xy] > 0;\r\n\r\n //hideOverflow:\r\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\r\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\r\n hideOverflow[xy] =\r\n overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy]\r\n ? hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]\r\n : hasOverflow[xy];\r\n hideOverflow[xy + 's'] = hideOverflow[xy] ? overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy] : false;\r\n\r\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\r\n };\r\n*/\r\n /*\r\n if (!supportsScrollbarStyling) {\r\n paddingStyle.r -= env._nativeScrollbarSize.y;\r\n paddingStyle.b -= env._nativeScrollbarSize.x;\r\n }\r\n */\r\n });\r\n\r\n const onSizeChanged = () => {\r\n _update();\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n const { _changed, _value } = heightIntrinsicCache;\r\n if (_changed) {\r\n style(content, { height: _value ? 'auto' : '100%' });\r\n }\r\n };\r\n\r\n return {\r\n _options,\r\n _update,\r\n _onSizeChanged: onSizeChanged,\r\n _onTrinsicChanged: onTrinsicChanged,\r\n _destruct() {\r\n runEach(destructFns);\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n} from 'support';\r\nimport { CSSDirection } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getDirection = (elm: HTMLElement): CSSDirection => style(elm, 'direction') as CSSDirection;\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height > 0 || rect.width > 0);\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionCache?: Cache) => any,\r\n options?: SizeObserverOptions\r\n): (() => void) => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior;\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const updateResizeObserverContentRectCache = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: Cache | SizeObserverEntry[] | Event) => {\r\n const directionCacheValue = sizeChangedContext && (sizeChangedContext as Cache)._value;\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (directionCacheValue) {\r\n doDirectionScroll = (sizeChangedContext as Cache)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = (directionCacheValue || getDirection(sizeObserver)) === 'rtl';\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(directionCacheValue ? (sizeChangedContext as Cache) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const updateDirectionCache = createCache(() => getDirection(sizeObserver));\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionCache = updateDirectionCache();\r\n const { _value, _changed } = directionCache;\r\n if (_changed) {\r\n if (_value === 'rtl') {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionCache);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n Cache,\r\n createDOM,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => any\r\n): (() => void) => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const updateHeightIntrinsicCache = createCache>(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n push(\r\n offListeners,\r\n createSizeObserver(trinsicObserver, () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(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 off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 80)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject, CSSDirection } from 'typings';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { Cache, appendChildren, addClass, contents, is, isHTMLElement, createDiv, each, push } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { classNameHost, classNamePadding, classNameViewport, classNameContent } from 'classnames';\r\n\r\nconst normalizeTarget = (target: OSTarget): OSTargetObject => {\r\n if (isHTMLElement(target)) {\r\n const isTextarea = is(target, 'textarea');\r\n const host = (isTextarea ? createDiv() : target) as HTMLElement;\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n appendChildren(content, contents(target));\r\n appendChildren(target, padding);\r\n addClass(host, classNameHost);\r\n\r\n return {\r\n target,\r\n host,\r\n padding,\r\n viewport,\r\n content,\r\n };\r\n }\r\n\r\n const { host, padding, viewport, content } = target;\r\n\r\n addClass(host, classNameHost);\r\n addClass(padding, classNamePadding);\r\n addClass(viewport, classNameViewport);\r\n addClass(content, classNameContent);\r\n\r\n return target;\r\n};\r\n\r\nconst OverlayScrollbars = (target: OSTarget, options?: any, extensions?: any): void => {\r\n const osTarget: OSTargetObject = normalizeTarget(target);\r\n const lifecycles: Lifecycle[] = [];\r\n const { host, content } = osTarget;\r\n\r\n push(lifecycles, createStructureLifecycle(osTarget));\r\n\r\n // eslint-disable-next-line\r\n const onSizeChanged = (directionCache?: Cache) => {\r\n if (directionCache) {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onDirectionChanged && lifecycle._onDirectionChanged(directionCache);\r\n });\r\n } else {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onSizeChanged && lifecycle._onSizeChanged();\r\n });\r\n }\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onTrinsicChanged && lifecycle._onTrinsicChanged(widthIntrinsic, heightIntrinsicCache);\r\n });\r\n };\r\n\r\n createSizeObserver(host, onSizeChanged, { _appear: true, _direction: true });\r\n createTrinsicObserver(host, onTrinsicChanged);\r\n createDOMObserver(host, () => {\r\n return null;\r\n });\r\n createDOMObserver(\r\n content,\r\n () => {\r\n return null;\r\n },\r\n { _observeContent: true }\r\n );\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n getEnvironment(),\r\n OverlayScrollbars(document.body),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","equalWH","equalXY","equalTRBL","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","property","finalProp","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","createCache","update","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","round","Math","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollBarSize","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","getPropByPath","path","o","createLifecycleBase","defaultOptionsWithTemplate","initialOptions","updateFunction","optionsTemplate","defaultOptions","hints","_force","_changedOptions","checkOption","newOptions","_update","overflowBehaviorAllowedValues","paddingAbsolute","oTypes","boolean","overflowBehavior","cssMarginEnd","cssBorderEnd","createStructureLifecycle","host","padding","paddingElm","viewport","content","destructFns","scrollbarsOverlaid","supportsScrollbarStyling","supportFlexboxGlue","directionObserverObsolete","updatePaddingCache","updateOverflowAmountCache","ctx","max","_contentScrollSize","_viewportSize","paddingAbsoluteChanged","paddingChanged","paddingStyle","viewportOffsetSize","contentClientSize","contentScrollSize","overflowAmuntCache","overflowAmount","overflowAmountChanged","log","onSizeChanged","onTrinsicChanged","widthIntrinsic","heightIntrinsicCache","height","_onSizeChanged","_onTrinsicChanged","_destruct","animationStartEventName","scrollEventName","scrollAmount","getDirection","domRectHasDimensions","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","directionCacheValue","skip","doDirectionScroll","pop","contentRect","rtl","appearCallback","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionCache","event","directionCache","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","newSize","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","_destroy","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetAttrChange","_ignoreTargetChange","_ignoreContentChange","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","Map","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","normalizeTarget","isTextarea","OverlayScrollbars","extensions","osTarget","lifecycles","lifecycle","_onDirectionChanged"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js index 2401266..3564df2 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -const t=Node.ELEMENT_NODE,{toString:e,hasOwnProperty:n}=Object.prototype;function o(t){return void 0===t}function r(t){return null===t}const s=t=>o(t)||r(t)?""+t:e.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function i(t){return"number"==typeof t}function c(t){return"string"==typeof t}function l(t){return"function"==typeof t}function a(t){return Array.isArray(t)}function d(t){return"object"==typeof t&&!a(t)&&!r(t)}function u(t){const e=!!t&&t.length,n=i(e)&&e>-1&&e%1==0;return!!(a(t)||!l(t)&&n)&&(!(e>0&&d(t))||e-1 in t)}function v(t){if(!t||!d(t)||"object"!==s(t))return!1;let e;const r=t.constructor,i=r&&r.prototype,c=n.call(t,"constructor"),l=i&&n.call(i,"isPrototypeOf");if(r&&!c&&!l)return!1;for(e in t);return o(e)||n.call(t,e)}function f(e){const n=window.Element;return!!e&&(n?e instanceof n:e.nodeType===t)}function h(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function _(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}const b=(t,e)=>{t&&t.removeAttribute(e)};function p(t,e){return h("scrollLeft",0,t,e)}function w(t,e){return h("scrollTop",0,t,e)}function g(t,e){if(u(t))for(let n=0;ne(t[n],n,t));return t}const m=(t,e,n)=>(n||c(e)||!u(e)?t.push(e):Array.prototype.push.apply(t,e),t),y=t=>{if(Array.from)return Array.from(t);const e=[];return g(t,t=>{m(e,t)}),e},x=t=>t&&0===t.length,z=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):g(t,n)},O=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),S=t=>t?Object.keys(t):[];function A(t,e,n,o,s,i,c){const d=[e,n,o,s,i,c];return"object"==typeof t&&!r(t)||l(t)||(t={}),g(d,e=>{g(S(e),n=>{const o=e[n];if(t===o)return!0;const r=a(o);if(o&&(v(o)||r)){const e=t[n];let s=e;r&&!a(e)?s=[]:r||v(e)||(s={}),t[n]=A(s,o)}else t[n]=o})}),t}function C(t){for(const e in t)return!1;return!0}const j=/[^\x20\t\r\n\f]+/g,M=(t,e)=>{((t,e,n)=>{let o,r=0,s=!1;if(t&&c(e)){const i=e.match(j)||[];for(s=i.length>0;o=i[r++];)s=!!n(t.classList,o)&&s}})(t,e,(t,e)=>t.add(e))},$=Element.prototype,L=(t,e)=>{const n=[],o=e?f(e)?e:null:document;return o?m(n,o.querySelectorAll(t)):n},T=(t,e)=>{if(f(t)){return($.matches||$.msMatchesSelector).call(t,e)}return!1},k=t=>t?y(t.childNodes):[],E=(t,e,n)=>{if(n){let o,r=e;t&&(u(n)?(o=document.createDocumentFragment(),g(n,t=>{t===r&&(r=t.previousSibling),o.appendChild(t)})):o=n,e&&(r?r!==e&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r))}},N=(t,e)=>{E(t,null,e)},V=(t,e)=>{E(t,t&&t.firstChild,e)},q=t=>{if(u(t))g(y(t),t=>q(t));else if(t){const n=(e=t)?e.parentElement:null;n&&n.removeChild(t)}var e},F=t=>{const e=document.createElement("div");return t&&_(e,"class",t),e},P=t=>{const e=F();return e.innerHTML=t.trim(),g(k(e),t=>q(t))},I={w:0,h:0},B=()=>({w:window.innerWidth,h:window.innerHeight}),Y=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:I;let D;const G=t=>t.split(" "),J=(t,e,n,o)=>{g(G(e),e=>{t.removeEventListener(e,n,o)})},K=(t,e,n,r)=>{const s=(()=>{if(o(D)){D=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){D=!0}}))}catch(t){}}return D})(),i=s&&r&&r.o||!1,c=r&&r.s||!1,l=r&&r.u||!1,a=[],d=s?{passive:i,capture:c}:c;return g(G(e),e=>{const o=l?r=>{t.removeEventListener(e,o,c),n&&n(r)}:n;m(a,J.bind(null,t,e,o,c)),t.addEventListener(e,o,d)}),z.bind(0,a)},R=t=>t.stopPropagation(),U=t=>t.preventDefault(),W=(t,e,n)=>{if(t&&e){let o=!0;return g(n,n=>{t[n]!==e[n]&&(o=!1)}),o}return!1},X=(t,e)=>W(t,e,["w","h"]),H=(t,e)=>W(t,e,["x","y"]),Q=(t,e)=>W(t,e,["t","r","b","l"]),Z=t=>t.charAt(0).toUpperCase()+t.slice(1),tt=["-webkit-","-moz-","-o-","-ms-"],et=["WebKit","Moz","O","MS","webkit","moz","o","ms"],nt={},ot={},rt=t=>{let e=ot[t];if(O(ot,t))return e;const n=Z(t),o=F().style;return g(tt,r=>{const s=r.replace(/-/g,""),i=[t,r+t,s+n,Z(s)+n];return e=i.find(t=>void 0!==o[t]),!e}),ot[t]=e,e},st=t=>{let e=nt[t]||window[t];return O(nt,t)||(g(et,n=>(e=e||window[n+Z(t)],!e)),nt[t]=e),e},it=st("MutationObserver"),ct=st("IntersectionObserver"),lt=st("ResizeObserver"),at=st("cancelAnimationFrame"),dt=st("requestAnimationFrame"),ut=()=>{},vt=(t,e,n)=>{let o,r;const s=i(e)&&e>0,c=i(n)&&n>0,l=s?window.clearTimeout:at,a=s?window.setTimeout:dt,d=function(e){r=c?performance.now():0,o&&l(o),t.apply(this,e)};return function(){const t=d.bind(this,arguments),s=!!c&&performance.now()-r>=n;o&&l(o),o=s?t():a(t,e)}},ft={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},ht=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},_t=(t,e,n)=>null!=e?e.getPropertyValue(n):t.style[n],bt=(t,e,n)=>{try{t&&void 0!==t.style[e]&&(t.style[e]=((t,e)=>!ft[t.toLowerCase()]&&i(e)?e+"px":e)(e,n))}catch(o){}};function pt(t,e){const n=c(e);if(a(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?_t(t,r,e):e.reduce((e,n)=>(e[n]=_t(t,r,n),e),o)}return o}g(S(e),n=>bt(t,n,e[n]))}const wt={x:0,y:0},gt=t=>{const e=t?(t=>t.getBoundingClientRect())(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:wt},mt=(t,e)=>{const{v:n,_:o}=e||{};let r,s=o;return(e,o)=>{const i=s,c=t(o,s,r),l=e||(n?!n(i,c):i!==c);return l&&(s=c,r=i),{p:s,g:r,m:l}}};var yt=function(t){var e={exports:{}};return t(e,e.exports),e.exports}((function(t){function e(){return t.exports=e=Object.assign||function(t){for(var e=1;e(t[e]=zt[0]+e+zt[1],t),{}),St=(t,e,n,r,i)=>{const l={},d=yt({},t);return g(S(e).filter(e=>O(t,e)),u=>{const f=o(n[u])?{}:n[u],h=t[u],_=e[u],b=v(_),p=i?i+".":"";if(b&&v(h)){const t=St(h,_,f,r,p+u);l[u]=t.O,d[u]=t.S,g([d,l],t=>{C(t[u])&&delete t[u]})}else if(!b){let t=!1;const e=[],n=[],i=s(h);if(g(a(_)?_:[_],r=>{let s;g(Ot,(t,e)=>{t===r&&(s=e)});const l=o(s);if(l&&c(h)){const n=r.split(" ");t=!!n.find(t=>t===h),m(e,n)}else t=Ot[i]===r;return m(n,l?Ot.string:s),!t}),t){(a(h)||v(h)?xt(h)!==xt(f):h!==f)&&(l[u]=h)}else r&&console.warn(`The option "${p}${u}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${h}".\r\nAccepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete d[u]}}),{S:d,O:l}},At=(t,e,n,o)=>St(t,e,n||{},o||!1);let Ct;const{abs:jt,round:Mt}=Math,$t=(t,e)=>{N(t,e);const n=(o=e)?{w:o.clientWidth,h:o.clientHeight}:I;var o;const r=Y(e);return{x:r.h-n.h,y:r.w-n.w}},Lt=t=>{let e=!1;M(t,"os-viewport-scrollbar-styled");try{e="none"===pt(t,"scrollbar-width")||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return e},Tt=(t,e)=>{pt(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),p(t,0);const n=gt(t),o=gt(e);p(t,-999);const r=gt(e);return{i:n.x===o.x,n:o.x!==r.x}},kt=(t,e)=>{M(t,"os-environment-flexbox-glue");const n=Y(t),o=Y(e),r=X(o,n);M(t,"os-environment-flexbox-glue-max");const s=Y(t),i=Y(e),c=X(i,s);return r&&c},Et=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},Nt=()=>{const{body:t}=document,e=P('
')[0],n=e.firstChild,o=new Set,r=$t(t,e),s={x:0===r.x,y:0===r.y},i={A:!1,C:r,j:s,M:Lt(e),$:Tt(e,n),L:kt(e,n),T(t){o.add(t)},k(t){o.delete(t)}};if(b(e,"style"),b(e,"class"),q(e),!s.x||!s.y){let n=B(),s=Et(),i=r;window.addEventListener("resize",()=>{if(o.size){const r=B(),c={w:r.w-n.w,h:r.h-n.h};if(0===c.w&&0===c.h)return;const l={w:jt(c.w),h:jt(c.h)},a={w:jt(Mt(r.w/(n.w/100))),h:jt(Mt(r.h/(n.h/100)))},d=Et(),u=l.w>2&&l.h>2,v=!((t,e)=>{const n=jt(t),o=jt(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h),f=d!==s&&s>0;if(u&&v&&f){const n=Ct.C=$t(t,e);q(e),i.x===n.x&&i.y===n.y||z(o),i=n}n=r,s=d}})}return i},Vt=()=>(Ct||(Ct=Nt()),Ct),qt=(t,e)=>t&&e.split(".").reduce((t,e)=>t&&O(t,e)?t[e]:void 0,t),Ft=(t,e,n)=>{const{N:o,V:r}=function t(e){const n={N:{},V:{}};return g(S(e),o=>{const r=e[o];if(a(r))n.N[o]=r[1],n.V[o]=r[0];else{const e=t(r);n.N[o]=e.N,n.V[o]=e.V}}),n}(t),s=A({},r,At(e||{},o,null,!0).O),i=t=>{const{q:e,F:o}=t;n(!!e,t=>({p:qt(s,t),m:e||void 0!==qt(o,t)}))};return i({q:!0}),{V(t){if(t){const{O:e}=At(t,o,s,!0);C(e)||(A(s,e),i({F:e}))}return s},P:t=>{i({q:t})}}},Pt={paddingAbsolute:[!1,Ot.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},It=rt("margin-inline-end"),Bt=rt("border-inline-end"),Yt=(t,e)=>{const{host:n,padding:o,viewport:r,content:s}=t,i=[],c=Vt(),l=c.j,a=c.M,d=(c.L,It&&Bt||a||l.y,mt(()=>((t,e)=>{const n=e||"",o=n+"-top",r=n+"-right",s=n+"-bottom",i=n+"-left",c=pt(t,[o,r,s,i]);return{t:ht(c[o]),r:ht(c[r]),b:ht(c[s]),l:ht(c[i])}})(n,"padding"),{v:Q})),u=mt(t=>({x:Math.max(0,Math.round(100*(t.I.w-t.B.w))/100),y:Math.max(0,Math.round(100*(t.I.h-t.B.h))/100)}),{v:H}),{V:v,P:f}=Ft(Pt,e,(t,e)=>{const{p:n,m:r}=e("paddingAbsolute"),{p:i,m:c}=d(t);if(r||c){const t={t:0,r:0,b:0,l:0};n||(t.t=-i.t,t.r=-(i.r+i.l),t.b=-(i.b+i.t),t.l=-i.l),pt(o,{top:t.t,left:t.l,"margin-right":t.r,"margin-bottom":t.b,"max-width":`calc(100% + ${-1*t.r}px)`})}const l=Y(o),a=Y(s),v=(f=s)?{w:f.scrollWidth,h:f.scrollHeight}:I;var f;const h=u(t,{I:v,B:{w:l.w+Math.max(0,a.w-v.w),h:l.h+Math.max(0,a.h-v.h)}}),{p:_,m:b}=h;console.log("overflowAmount",_),console.log("overflowAmountChanged",b)});return{V:v,P:f,Y:()=>{f()},D:(t,e)=>{const{m:n,p:o}=e;n&&pt(s,{height:o?"auto":"100%"})},G(){z(i)}}},Dt=t=>pt(t,"direction"),Gt=(t,e,n)=>{const{J:o=!1,K:r=!1}=n||{},s=Vt().$,i=P('
')[0],l=i.firstChild,a=t=>{if(o){const t="rtl"===Dt(i);p(i,t?s.n?-3333333:s.i?0:3333333:3333333),w(i,3333333)}e(c((t||{}).p)?t:void 0)},d=[];let u=r?a:null;if(lt){const t=new lt(a);t.observe(l),m(d,()=>t.disconnect())}else{const t=P('
');N(l,t),M(l,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,o=e.firstChild,s=null==o?void 0:o.firstChild;let i,c=Y(l),v=c,f=!1;const h=()=>{p(o,3333333),w(o,3333333),p(n,3333333),w(n,3333333)},_=()=>{i=0,f&&(c=v,a())},b=t=>(v=Y(l),f=!t||!X(v,c),t&&f&&!i?(at(i),i=dt(_)):t||_(),h(),t&&(U(t),R(t)),!1);m(d,[K(o,"scroll",b),K(n,"scroll",b)]),pt(s,{width:3333333,height:3333333}),h(),u=r?()=>b():h}if(o){const t=mt(()=>Dt(i));m(d,K(i,"scroll",e=>{const n=t(),{p:o,m:r}=n;return r&&(pt(l,"rtl"===o?{left:"auto",right:0}:{left:0,right:"auto"}),a(n)),U(e),R(e),!1}))}return u&&(M(i,"os-size-observer-appear"),m(d,K(i,"animationstart",u))),V(t,i),()=>{z(d),q(i)}},Jt=(t,e,n,r)=>{let s;const i=()=>{n.forEach((t,e)=>{J(e,t,r)}),n.clear()},c=e=>{if(s){g(s.reduce((n,o)=>{if(o){const r=o[0],s=o[1],i=s&&r&&(e?e(r):L(r,t));i&&m(n,[i,l(s)?s(i):s],!0)}return n},[]),t=>{const e=t[0],s=t[1];g(e,t=>{((t,e)=>{const s=n.get(t),i=o(s),c=()=>{n.set(t,e),K(t,e,r)};i||e===s?i&&c():(J(t,s,r),c())})(t,s)})})}},a=t=>{s=t,i(),c()};return e&&a(e),{R:i,U:c,P:a}},Kt=(t,e,n)=>{let o=!1;const{W:r,X:s,H:i,Z:l,tt:a,et:d,nt:u}=n||{},{U:v,R:f,P:h}=Jt(t,r&&l,new Map,vt(()=>{o&&e([],!1,!0)},80)),b=i||[],p=(s||[]).concat(b),w=o=>{const s=d||ut,i=u||ut,l=[],f=[];let h=!1,p=!1,w=!1;g(o,e=>{const{attributeName:o,target:d,type:u,oldValue:v,addedNodes:g}=e,y="attributes"===u,x="childList"===u,z=t===d,O=y&&c(o)?_(d,o):0,S=0!==O&&v!==O,A=S&&z&&!r&&!s(d,o,v,O),C=(j=o,b.indexOf(j,M)>-1&&S);var j,M;if(A&&m(l,o),r){const r=!y,c=y&&C&&!z,l=c&&a&&T(d,a),u=(l?!s(d,o,v,O):r||c)&&!i(e,l,t,n);m(f,g),p=p||u,w=w||x}h=h||A&&C}),w&&!x(f)&&v(t=>f.reduce((e,n)=>(m(e,L(t,n)),T(n,t)?m(e,n):e),[])),(!x(l)||h||p)&&e(l,h,p)},y=new it(w);return y.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:p,subtree:r,childList:r,characterData:r}),o=!0,{ot:()=>{o&&(f(),y.disconnect(),o=!1)},rt:t=>{h(o&&r&&t)},P:()=>{o&&w(y.takeRecords())}}},Rt=e=>{if(function(e){const n=window.HTMLElement;return!!e&&(n?e instanceof n:e.nodeType===t)}(e)){const t=T(e,"textarea")?F():e,n=F("os-padding"),o=F("os-viewport"),r=F("os-content");return N(n,o),N(o,r),N(r,k(e)),N(e,n),M(t,"os-host"),{target:e,host:t,padding:n,viewport:o,content:r}}const{host:n,padding:o,viewport:r,content:s}=e;return M(n,"os-host"),M(o,"os-padding"),M(r,"os-viewport"),M(s,"os-content"),e},Ut=(t,e,n)=>{const o=Rt(t),r=[],{host:s,content:i}=o;m(r,Yt(o));Gt(s,t=>{g(r,t?e=>{e.st&&e.st(t)}:t=>{t.Y&&t.Y()})},{K:!0,J:!0}),((t,e)=>{const n=P('
')[0],o=[],r=mt(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{_:!1});if(ct){const s=new ct(t=>{if(t&&t.length>0){const n=t.pop();if(n){const t=r(0,n);t.m&&e(!1,t)}}},{root:t});s.observe(n),m(o,()=>s.disconnect())}else m(o,Gt(n,()=>{const t=Y(n),o=r(0,t);o.m&&e(!1,o)}));V(t,n)})(s,(t,e)=>{g(r,n=>{n.D&&n.D(t,e)})}),Kt(s,()=>null),Kt(i,()=>null,{W:!0})};export default()=>[Vt(),Ut(document.body),P('
fdfhdfgh
')]; \ No newline at end of file +const t=Node.ELEMENT_NODE,{toString:e,hasOwnProperty:n}=Object.prototype;function o(t){return void 0===t}function r(t){return null===t}const s=t=>o(t)||r(t)?""+t:e.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function i(t){return"number"==typeof t}function c(t){return"string"==typeof t}function l(t){return"function"==typeof t}function a(t){return Array.isArray(t)}function d(t){return"object"==typeof t&&!a(t)&&!r(t)}function u(t){const e=!!t&&t.length,n=i(e)&&e>-1&&e%1==0;return!!(a(t)||!l(t)&&n)&&(!(e>0&&d(t))||e-1 in t)}function v(t){if(!t||!d(t)||"object"!==s(t))return!1;let e;const r=t.constructor,i=r&&r.prototype,c=n.call(t,"constructor"),l=i&&n.call(i,"isPrototypeOf");if(r&&!c&&!l)return!1;for(e in t);return o(e)||n.call(t,e)}function f(e){const n=window.Element;return!!e&&(n?e instanceof n:e.nodeType===t)}function h(t,e,n,r){if(o(r))return n?n[t]:e;n&&(n[t]=r)}function _(t,e,n){if(o(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}const p=(t,e)=>{t&&t.removeAttribute(e)};function w(t,e){return h("scrollLeft",0,t,e)}function b(t,e){return h("scrollTop",0,t,e)}function g(t,e){if(u(t))for(let n=0;ne(t[n],n,t));return t}const m=(t,e,n)=>(n||c(e)||!u(e)?t.push(e):Array.prototype.push.apply(t,e),t),y=t=>{if(Array.from)return Array.from(t);const e=[];return g(t,t=>{m(e,t)}),e},x=t=>t&&0===t.length,z=(t,e)=>{const n=t=>t&&t(e);t instanceof Set?t.forEach(n):g(t,n)},O=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),S=t=>t?Object.keys(t):[];function A(t,e,n,o,s,i,c){const d=[e,n,o,s,i,c];return"object"==typeof t&&!r(t)||l(t)||(t={}),g(d,e=>{g(S(e),n=>{const o=e[n];if(t===o)return!0;const r=a(o);if(o&&(v(o)||r)){const e=t[n];let s=e;r&&!a(e)?s=[]:r||v(e)||(s={}),t[n]=A(s,o)}else t[n]=o})}),t}function C(t){for(const e in t)return!1;return!0}const j=/[^\x20\t\r\n\f]+/g,M=(t,e)=>{((t,e,n)=>{let o,r=0,s=!1;if(t&&c(e)){const i=e.match(j)||[];for(s=i.length>0;o=i[r++];)s=!!n(t.classList,o)&&s}})(t,e,(t,e)=>t.add(e))},$=Element.prototype,L=(t,e)=>{const n=[],o=e?f(e)?e:null:document;return o?m(n,o.querySelectorAll(t)):n},T=(t,e)=>{if(f(t)){return($.matches||$.msMatchesSelector).call(t,e)}return!1},V=t=>t?y(t.childNodes):[],k=(t,e,n)=>{if(n){let o,r=e;t&&(u(n)?(o=document.createDocumentFragment(),g(n,t=>{t===r&&(r=t.previousSibling),o.appendChild(t)})):o=n,e&&(r?r!==e&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r))}},q=(t,e)=>{k(t,null,e)},E=(t,e)=>{k(t,t&&t.firstChild,e)},N=t=>{if(u(t))g(y(t),t=>N(t));else if(t){const n=(e=t)?e.parentElement:null;n&&n.removeChild(t)}var e},F=t=>{const e=document.createElement("div");return t&&_(e,"class",t),e},P=t=>{const e=F();return e.innerHTML=t.trim(),g(V(e),t=>N(t))},I={w:0,h:0},U=()=>({w:window.innerWidth,h:window.innerHeight}),B=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:I;let Y;const D=t=>t.split(" "),G=(t,e,n,o)=>{g(D(e),e=>{t.removeEventListener(e,n,o)})},J=(t,e,n,r)=>{const s=(()=>{if(o(Y)){Y=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){Y=!0}}))}catch(t){}}return Y})(),i=s&&r&&r.o||!1,c=r&&r.s||!1,l=r&&r.u||!1,a=[],d=s?{passive:i,capture:c}:c;return g(D(e),e=>{const o=l?r=>{t.removeEventListener(e,o,c),n&&n(r)}:n;m(a,G.bind(null,t,e,o,c)),t.addEventListener(e,o,d)}),z.bind(0,a)},K=t=>t.stopPropagation(),R=t=>t.preventDefault(),W=(t,e,n)=>{if(t&&e){let o=!0;return g(n,n=>{t[n]!==e[n]&&(o=!1)}),o}return!1},X=(t,e)=>W(t,e,["w","h"]),H=(t,e)=>W(t,e,["x","y"]),Q=(t,e)=>W(t,e,["t","r","b","l"]),Z=t=>t.charAt(0).toUpperCase()+t.slice(1),tt=["-webkit-","-moz-","-o-","-ms-"],et=["WebKit","Moz","O","MS","webkit","moz","o","ms"],nt={},ot={},rt=t=>{let e=ot[t];if(O(ot,t))return e;const n=Z(t),o=F().style;return g(tt,r=>{const s=r.replace(/-/g,""),i=[t,r+t,s+n,Z(s)+n];return e=i.find(t=>void 0!==o[t]),!e}),ot[t]=e,e},st=t=>{let e=nt[t]||window[t];return O(nt,t)||(g(et,n=>(e=e||window[n+Z(t)],!e)),nt[t]=e),e},it=st("MutationObserver"),ct=st("IntersectionObserver"),lt=st("ResizeObserver"),at=st("cancelAnimationFrame"),dt=st("requestAnimationFrame"),ut=()=>{},vt=(t,e,n)=>{let o,r;const s=i(e)&&e>0,c=i(n)&&n>0,l=s?window.clearTimeout:at,a=s?window.setTimeout:dt,d=function(e){r=c?performance.now():0,o&&l(o),t.apply(this,e)};return function(){const t=d.bind(this,arguments),s=!!c&&performance.now()-r>=n;o&&l(o),o=s?t():a(t,e)}},ft={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},ht=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},_t=(t,e,n)=>null!=e?e.getPropertyValue(n):t.style[n],pt=(t,e,n)=>{try{t&&void 0!==t.style[e]&&(t.style[e]=((t,e)=>!ft[t.toLowerCase()]&&i(e)?e+"px":e)(e,n))}catch(o){}};function wt(t,e){const n=c(e);if(a(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?_t(t,r,e):e.reduce((e,n)=>(e[n]=_t(t,r,n),e),o)}return o}g(S(e),n=>pt(t,n,e[n]))}const bt={x:0,y:0},gt=t=>{const e=t?(t=>t.getBoundingClientRect())(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:bt},mt=(t,e)=>{const{v:n,_:o,p:r}=e||{};let s,i=o;return(e,o)=>{const c=i,l=t?t(o,i,s):o,a=e||(n?!n(c,l):c!==l);return(a||r)&&(i=l,s=c),{g:i,m:s,O:a}}};var yt=function(t){var e={exports:{}};return t(e,e.exports),e.exports}((function(t){function e(){return t.exports=e=Object.assign||function(t){for(var e=1;e(t[e]=zt[0]+e+zt[1],t),{}),St=(t,e,n,r,i)=>{const l={},d=yt({},t);return g(S(e).filter(e=>O(t,e)),u=>{const f=o(n[u])?{}:n[u],h=t[u],_=e[u],p=v(_),w=i?i+".":"";if(p&&v(h)){const t=St(h,_,f,r,w+u);l[u]=t.S,d[u]=t.A,g([d,l],t=>{C(t[u])&&delete t[u]})}else if(!p){let t=!1;const e=[],n=[],i=s(h);if(g(a(_)?_:[_],r=>{let s;g(Ot,(t,e)=>{t===r&&(s=e)});const l=o(s);if(l&&c(h)){const n=r.split(" ");t=!!n.find(t=>t===h),m(e,n)}else t=Ot[i]===r;return m(n,l?Ot.string:s),!t}),t){(a(h)||v(h)?xt(h)!==xt(f):h!==f)&&(l[u]=h)}else r&&console.warn(`The option "${w}${u}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${h}".\r\nAccepted types are: [ ${n.join(", ").toUpperCase()} ].\r\n${e.length>0?`\r\nValid strings are: [ ${e.join(", ")} ].`:""}`);delete d[u]}}),{A:d,S:l}},At=(t,e,n,o)=>St(t,e,n||{},o||!1);let Ct;const{abs:jt,round:Mt}=Math,$t=(t,e)=>{q(t,e);const n=(o=e)?{w:o.clientWidth,h:o.clientHeight}:I;var o;const r=B(e);return{x:r.h-n.h,y:r.w-n.w}},Lt=t=>{let e=!1;M(t,"os-viewport-scrollbar-styled");try{e="none"===wt(t,"scrollbar-width")||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return e},Tt=(t,e)=>{wt(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),w(t,0);const n=gt(t),o=gt(e);w(t,-999);const r=gt(e);return{i:n.x===o.x,n:o.x!==r.x}},Vt=(t,e)=>{M(t,"os-environment-flexbox-glue");const n=B(t),o=B(e),r=X(o,n);M(t,"os-environment-flexbox-glue-max");const s=B(t),i=B(e),c=X(i,s);return r&&c},kt=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},qt=()=>{const{body:t}=document,e=P('
')[0],n=e.firstChild,o=new Set,r=$t(t,e),s={x:0===r.x,y:0===r.y},i={C:!1,j:r,M:s,$:Lt(e),L:Tt(e,n),T:Vt(e,n),V(t){o.add(t)},k(t){o.delete(t)}};if(p(e,"style"),p(e,"class"),N(e),!s.x||!s.y){let n=U(),s=kt(),i=r;window.addEventListener("resize",()=>{if(o.size){const r=U(),c={w:r.w-n.w,h:r.h-n.h};if(0===c.w&&0===c.h)return;const l={w:jt(c.w),h:jt(c.h)},a={w:jt(Mt(r.w/(n.w/100))),h:jt(Mt(r.h/(n.h/100)))},d=kt(),u=l.w>2&&l.h>2,v=!((t,e)=>{const n=jt(t),o=jt(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h),f=d!==s&&s>0;if(u&&v&&f){const n=Ct.j=$t(t,e);N(e),i.x===n.x&&i.y===n.y||z(o),i=n}n=r,s=d}})}return i},Et=()=>(Ct||(Ct=qt()),Ct),Nt=(t,e)=>t&&e.split(".").reduce((t,e)=>t&&O(t,e)?t[e]:void 0,t),Ft=(t,e,n)=>{const{q:o,N:r}=function t(e){const n={q:{},N:{}};return g(S(e),o=>{const r=e[o];if(a(r))n.q[o]=r[1],n.N[o]=r[0];else{const e=t(r);n.q[o]=e.q,n.N[o]=e.N}}),n}(t),s=A({},r,At(e||{},o,null,!0).S),i=t=>{const{F:e,P:o}=t;n(!!e,t=>({g:Nt(s,t),O:e||void 0!==Nt(o,t)}))};return i({F:!0}),{N(t){if(t){const{S:e}=At(t,o,s,!0);C(e)||(A(s,e),i({P:e}))}return s},I:t=>{i({F:t})}}},Pt={paddingAbsolute:[!1,Ot.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},It=rt("margin-inline-end"),Ut=rt("border-inline-end"),Bt=(t,e)=>{const{host:n,padding:o,viewport:r,content:s}=t,i=[],c=Et(),l=c.M,a=c.$,d=(c.T,It&&Ut||a||l.y,mt(()=>((t,e)=>{const n=e||"",o=n+"-top",r=n+"-right",s=n+"-bottom",i=n+"-left",c=wt(t,[o,r,s,i]);return{t:ht(c[o]),r:ht(c[r]),b:ht(c[s]),l:ht(c[i])}})(n,"padding"),{v:Q})),u=mt(t=>({x:Math.max(0,Math.round(100*(t.U.w-t.B.w))/100),y:Math.max(0,Math.round(100*(t.U.h-t.B.h))/100)}),{v:H}),{N:v,I:f}=Ft(Pt,e,(t,e)=>{const{g:n,O:r}=e("paddingAbsolute"),{g:i,O:c}=d(t);if(r||c){const t={t:0,r:0,b:0,l:0};n||(t.t=-i.t,t.r=-(i.r+i.l),t.b=-(i.b+i.t),t.l=-i.l),wt(o,{top:t.t,left:t.l,"margin-right":t.r,"margin-bottom":t.b,"max-width":`calc(100% + ${-1*t.r}px)`})}const l=B(o),a=B(s),v=(f=s)?{w:f.scrollWidth,h:f.scrollHeight}:I;var f;const h=u(t,{U:v,B:{w:l.w+Math.max(0,a.w-v.w),h:l.h+Math.max(0,a.h-v.h)}}),{g:_,O:p}=h;console.log("overflowAmount",_),console.log("overflowAmountChanged",p)});return{N:v,I:f,Y:()=>{f()},D:(t,e)=>{const{O:n,g:o}=e;n&&wt(s,{height:o?"auto":"100%"})},G(){z(i)}}},Yt=t=>wt(t,"direction"),Dt=t=>t&&(t.height>0||t.width>0),Gt=(t,e,n)=>{const{J:o=!1,K:r=!1}=n||{},s=Et().L,i=P('
')[0],c=i.firstChild,l=mt(0,{p:!0,v:(t,e)=>!(!t||!Dt(t)&&Dt(e))}),d=t=>{const n=t&&t.g;let r=!1,c=!0;if(a(t)&&t.length>0){const{m:e,g:n,O:o}=l(0,t.pop().contentRect);r=!e||!Dt(n),c=!r&&o}else n&&(c=t.O);if(o&&c){const t="rtl"===(n||Yt(i));w(i,t?s.n?-3333333:s.i?0:3333333:3333333),b(i,3333333)}r||e(n?t:void 0)},u=[];let v=!!r&&d;if(lt){const t=new lt(d);t.observe(c),m(u,()=>t.disconnect())}else{const t=P('
');q(c,t),M(c,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,o=e.firstChild,s=null==o?void 0:o.firstChild;let i,l=B(c),a=l,f=!1;const h=()=>{w(o,3333333),b(o,3333333),w(n,3333333),b(n,3333333)},_=()=>{i=0,f&&(l=a,d())},p=t=>(a=B(c),f=!t||!X(a,l),t&&f&&!i?(at(i),i=dt(_)):t||_(),h(),t&&(R(t),K(t)),!1);m(u,[J(o,"scroll",p),J(n,"scroll",p)]),wt(s,{width:3333333,height:3333333}),h(),v=r?()=>p():h}if(o){const t=mt(()=>Yt(i));m(u,J(i,"scroll",e=>{const n=t(),{g:o,O:r}=n;return r&&(wt(c,"rtl"===o?{left:"auto",right:0}:{left:0,right:"auto"}),d(n)),R(e),K(e),!1}))}return v&&(M(i,"os-size-observer-appear"),m(u,J(i,"animationstart",v,{u:!!lt}))),E(t,i),()=>{z(u),N(i)}},Jt=(t,e,n,r)=>{let s;const i=()=>{n.forEach((t,e)=>{G(e,t,r)}),n.clear()},c=e=>{if(s){g(s.reduce((n,o)=>{if(o){const r=o[0],s=o[1],i=s&&r&&(e?e(r):L(r,t));i&&m(n,[i,l(s)?s(i):s],!0)}return n},[]),t=>{const e=t[0],s=t[1];g(e,t=>{((t,e)=>{const s=n.get(t),i=o(s),c=()=>{n.set(t,e),J(t,e,r)};i||e===s?i&&c():(G(t,s,r),c())})(t,s)})})}},a=t=>{s=t,i(),c()};return e&&a(e),{R:i,W:c,I:a}},Kt=(t,e,n)=>{let o=!1;const{X:r,H:s,Z:i,tt:l,et:a,nt:d,ot:u}=n||{},{W:v,R:f,I:h}=Jt(t,r&&l,new Map,vt(()=>{o&&e([],!1,!0)},80)),p=i||[],w=(s||[]).concat(p),b=o=>{const s=d||ut,i=u||ut,l=[],f=[];let h=!1,w=!1,b=!1;g(o,e=>{const{attributeName:o,target:d,type:u,oldValue:v,addedNodes:g}=e,y="attributes"===u,x="childList"===u,z=t===d,O=y&&c(o)?_(d,o):0,S=0!==O&&v!==O,A=S&&z&&!r&&!s(d,o,v,O),C=(j=o,p.indexOf(j,M)>-1&&S);var j,M;if(A&&m(l,o),r){const r=!y,c=y&&C&&!z,l=c&&a&&T(d,a),u=(l?!s(d,o,v,O):r||c)&&!i(e,!!l,t,n);m(f,g),w=w||u,b=b||x}h=h||A&&C}),b&&!x(f)&&v(t=>f.reduce((e,n)=>(m(e,L(t,n)),T(n,t)?m(e,n):e),[])),(!x(l)||h||w)&&e(l,h,w)},y=new it(b);return y.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:r,childList:r,characterData:r}),o=!0,{rt:()=>{o&&(f(),y.disconnect(),o=!1)},st:t=>{h(o&&r&&t)},I:()=>{o&&b(y.takeRecords())}}},Rt=e=>{if(function(e){const n=window.HTMLElement;return!!e&&(n?e instanceof n:e.nodeType===t)}(e)){const t=T(e,"textarea")?F():e,n=F("os-padding"),o=F("os-viewport"),r=F("os-content");return q(n,o),q(o,r),q(r,V(e)),q(e,n),M(t,"os-host"),{target:e,host:t,padding:n,viewport:o,content:r}}const{host:n,padding:o,viewport:r,content:s}=e;return M(n,"os-host"),M(o,"os-padding"),M(r,"os-viewport"),M(s,"os-content"),e},Wt=(t,e,n)=>{const o=Rt(t),r=[],{host:s,content:i}=o;m(r,Bt(o));Gt(s,t=>{g(r,t?e=>{e.it&&e.it(t)}:t=>{t.Y&&t.Y()})},{K:!0,J:!0}),((t,e)=>{const n=P('
')[0],o=[],r=mt(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{_:!1});if(ct){const s=new ct(t=>{if(t&&t.length>0){const n=t.pop();if(n){const t=r(0,n);t.O&&e(!1,t)}}},{root:t});s.observe(n),m(o,()=>s.disconnect())}else m(o,Gt(n,()=>{const t=B(n),o=r(0,t);o.O&&e(!1,o)}));E(t,n)})(s,(t,e)=>{g(r,n=>{n.D&&n.D(t,e)})}),Kt(s,()=>null),Kt(i,()=>null,{X:!0})};export default()=>[Et(),Wt(document.body),P('
fdfhdfgh
')]; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 37afbbe..1863f4f 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -604,18 +604,19 @@ var createCache = function createCache(update, options) { var _ref = options || {}, _equal = _ref._equal, - _initialValue = _ref._initialValue; + _initialValue = _ref._initialValue, + _alwaysUpdateValues = _ref._alwaysUpdateValues; var _value = _initialValue; var _previous; - return function (force, context) { + var cacheUpdate = function cacheUpdate(force, context) { var curr = _value; - var newVal = update(context, _value, _previous); + var newVal = update ? update(context, _value, _previous) : context; var changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal); - if (changed) { + if (changed || _alwaysUpdateValues) { _value = newVal; _previous = curr; } @@ -626,6 +627,8 @@ _changed: changed, }; }; + + return cacheUpdate; }; function createCommonjsModule(fn) { @@ -1124,31 +1127,59 @@ return style(elm, 'direction'); }; + var domRectHasDimensions = function domRectHasDimensions(rect) { + return rect && (rect.height > 0 || rect.width > 0); + }; + var createSizeObserver = function createSizeObserver(target, onSizeChangedCallback, options) { var _ref = options || {}, _ref$_direction = _ref._direction, - direction = _ref$_direction === void 0 ? false : _ref$_direction, + observeDirectionChange = _ref$_direction === void 0 ? false : _ref$_direction, _ref$_appear = _ref._appear, - appear = _ref$_appear === void 0 ? false : _ref$_appear; + observeAppearChange = _ref$_appear === void 0 ? false : _ref$_appear; var rtlScrollBehavior = getEnvironment()._rtlScrollBehavior; var baseElements = createDOM('
'); var sizeObserver = baseElements[0]; var listenerElement = sizeObserver.firstChild; + var updateResizeObserverContentRectCache = createCache(0, { + _alwaysUpdateValues: true, + _equal: function _equal(currVal, newVal) { + return !(!currVal || (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))); + }, + }); - var onSizeChangedCallbackProxy = function onSizeChangedCallbackProxy(directionCache) { - if (direction) { - var rtl = getDirection(sizeObserver) === 'rtl'; + var onSizeChangedCallbackProxy = function onSizeChangedCallbackProxy(sizeChangedContext) { + var directionCacheValue = sizeChangedContext && sizeChangedContext._value; + var skip = false; + var doDirectionScroll = true; + + if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) { + var _updateResizeObserver = updateResizeObserverContentRectCache(0, sizeChangedContext.pop().contentRect), + _previous = _updateResizeObserver._previous, + _value = _updateResizeObserver._value, + _changed = _updateResizeObserver._changed; + + skip = !_previous || !domRectHasDimensions(_value); + doDirectionScroll = !skip && _changed; + } else if (directionCacheValue) { + doDirectionScroll = sizeChangedContext._changed; + } + + if (observeDirectionChange && doDirectionScroll) { + var rtl = (directionCacheValue || getDirection(sizeObserver)) === 'rtl'; scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount); scrollTop(sizeObserver, scrollAmount); } - onSizeChangedCallback(isString((directionCache || {})._value) ? directionCache : undefined); + if (!skip) { + onSizeChangedCallback(directionCacheValue ? sizeChangedContext : undefined); + } }; var offListeners = []; - var appearCallback = appear ? onSizeChangedCallbackProxy : null; + var appearCallback = observeAppearChange ? onSizeChangedCallbackProxy : false; if (ResizeObserverConstructor) { var resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); @@ -1224,14 +1255,14 @@ height: scrollAmount, }); reset(); - appearCallback = appear + appearCallback = observeAppearChange ? function () { return onScroll(); } : reset; } - if (direction) { + if (observeDirectionChange) { var updateDirectionCache = createCache(function () { return getDirection(sizeObserver); }); @@ -1267,7 +1298,12 @@ if (appearCallback) { addClass(sizeObserver, classNameSizeObserverAppear); - push(offListeners, on(sizeObserver, animationStartEventName, appearCallback)); + push( + offListeners, + on(sizeObserver, animationStartEventName, appearCallback, { + _once: !!ResizeObserverConstructor, + }) + ); } prependChildren(target, sizeObserver); @@ -1471,7 +1507,7 @@ var baseAssertion = isNestedTarget ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue) : notOnlyAttrChanged || contentAttrChanged; - var contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, isNestedTarget, target, options); + var contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options); push(totalAddedNodes, addedNodes); contentChanged = contentChanged || contentFinalChanged; childListChanged = childListChanged || isChildListType; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index f1accf4..357839a 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/types.ts","../src/support/dom/attribute.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/class.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/lifecycles/lifecycleBase.ts","../src/lifecycles/structureLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { 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 = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | null, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | undefined | null;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null = preferredAnchor;\r\n let fragment: DocumentFragment | Node | undefined | null;\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);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | null): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: EventListener, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener, 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 = (target: EventTarget, eventNames: string, listener: EventListener, options?: OnOptions): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = once\r\n ? (evt: Event) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event) => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event) => evt.preventDefault();\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (a: T | undefined, b: T | undefined, props: Array): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n if (a[prop] !== b[prop]) {\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","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } 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\ntype CssStyles = { [key: string]: string | number };\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | null, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null, styles: string): string;\r\nexport function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null, property?: string): TRBL => {\r\n const finalProp = property || '';\r\n const top = `${finalProp}-top`;\r\n const right = `${finalProp}-right`;\r\n const bottom = `${finalProp}-bottom`;\r\n const left = `${finalProp}-left`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null): 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): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","export interface Cache {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n readonly _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n _equal?: EqualCachePropFunction;\r\n _initialValue?: T;\r\n}\r\n\r\nexport type CacheUpdate = (force?: boolean | 0, context?: C) => Cache;\r\n\r\nexport type UpdateCachePropFunction = (context?: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): CacheUpdate => {\r\n const { _equal, _initialValue } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n return (force, context) => {\r\n const curr = _value;\r\n const newVal = update(context, _value, _previous);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n };\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType>;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation> {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport function transformOptions>(\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): OptionsWithOptionsTemplateTransformation {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n runEach,\r\n equalWH,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = offsetSize(parentElm);\r\n const minOffsetsize = offsetSize(childElm);\r\n const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = offsetSize(parentElm);\r\n const maxOffsetsize = offsetSize(childElm);\r\n const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollBarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollBarSize.x === 0,\r\n y: nativeScrollBarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\r\n _nativeScrollbarSize: nativeScrollBarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: getNativeScrollbarStyling(envElm),\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeAttr(envElm, 'class');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollBarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n Cache,\r\n OptionsValidated,\r\n OptionsWithOptionsTemplate,\r\n transformOptions,\r\n validateOptions,\r\n assignDeep,\r\n hasOwnProperty,\r\n isEmptyObject,\r\n} from 'support';\r\nimport { CSSDirection, PlainObject } from 'typings';\r\n\r\ninterface LifecycleBaseUpdateHints {\r\n _force?: boolean;\r\n _changedOptions?: OptionsValidated;\r\n}\r\n\r\nexport interface LifecycleBase {\r\n _options(newOptions?: O): O;\r\n _update(force?: boolean): void;\r\n}\r\n\r\nexport interface Lifecycle extends LifecycleBase {\r\n _destruct(): void;\r\n _onSizeChanged?(): void;\r\n _onDirectionChanged?(directionCache: Cache): void;\r\n _onTrinsicChanged?(widthIntrinsic: boolean, heightIntrinsicCache: Cache): void;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\n/**\r\n * Creates a object which can be seen as the base of a lifecycle because it provides all the tools to manage a lifecycle and its options, cache and base functions.\r\n * @param defaultOptionsWithTemplate A object which describes the options and the default options of the lifecycle.\r\n * @param initialOptions The initialOptions for the lifecylce. (Can be undefined)\r\n * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects.\r\n */\r\nexport const createLifecycleBase = (\r\n defaultOptionsWithTemplate: OptionsWithOptionsTemplate>,\r\n initialOptions: O | undefined,\r\n updateFunction: (force: boolean, checkOption: LifecycleCheckOption) => any\r\n): LifecycleBase => {\r\n const { _template: optionsTemplate, _options: defaultOptions } = transformOptions>(defaultOptionsWithTemplate);\r\n const options: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(initialOptions || ({} as O), optionsTemplate, null, true)._validated\r\n );\r\n\r\n const update = (hints: LifecycleBaseUpdateHints) => {\r\n const { _force, _changedOptions } = hints;\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: _force || getPropByPath(_changedOptions, path) !== undefined,\r\n });\r\n updateFunction(!!_force, checkOption);\r\n };\r\n\r\n update({ _force: true });\r\n\r\n return {\r\n _options(newOptions?: O) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, options, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(options, _changedOptions);\r\n update({ _changedOptions });\r\n }\r\n }\r\n return options;\r\n },\r\n _update: (_force?: boolean) => {\r\n update({ _force });\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n cssProperty,\r\n runEach,\r\n createCache,\r\n topRightBottomLeft,\r\n TRBL,\r\n WH,\r\n XY,\r\n equalTRBL,\r\n equalXY,\r\n optionsTemplateTypes as oTypes,\r\n OptionsTemplateValue,\r\n style,\r\n OptionsWithOptionsTemplate,\r\n scrollSize,\r\n offsetSize,\r\n} from 'support';\r\nimport { OSTargetObject } from 'typings';\r\nimport { createLifecycleBase, Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { getEnvironment, Environment } from 'environment';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\nexport interface StructureLifecycleOptions {\r\n paddingAbsolute: boolean;\r\n overflowBehavior?: {\r\n x?: OverflowBehavior;\r\n y?: OverflowBehavior;\r\n };\r\n}\r\n\r\nconst overflowBehaviorAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n paddingAbsolute: [false, oTypes.boolean],\r\n overflowBehavior: {\r\n x: ['scroll', overflowBehaviorAllowedValues],\r\n y: ['scroll', overflowBehaviorAllowedValues],\r\n },\r\n};\r\n\r\nconst cssMarginEnd = cssProperty('margin-inline-end');\r\nconst cssBorderEnd = cssProperty('border-inline-end');\r\n\r\nexport const createStructureLifecycle = (\r\n target: OSTargetObject,\r\n initialOptions?: StructureLifecycleOptions\r\n): Lifecycle => {\r\n const { host, padding: paddingElm, viewport, content } = target;\r\n const destructFns: (() => any)[] = [];\r\n const env: Environment = getEnvironment();\r\n const scrollbarsOverlaid = env._nativeScrollbarIsOverlaid;\r\n const supportsScrollbarStyling = env._nativeScrollbarStyling;\r\n const supportFlexboxGlue = env._flexboxGlue;\r\n // direction change is only needed to update scrollbar hiding, therefore its not needed if css can do it, scrollbars are invisible or overlaid on y axis\r\n const directionObserverObsolete = (cssMarginEnd && cssBorderEnd) || supportsScrollbarStyling || scrollbarsOverlaid.y;\r\n\r\n const updatePaddingCache = createCache(() => topRightBottomLeft(host, 'padding'), { _equal: equalTRBL });\r\n const updateOverflowAmountCache = createCache, { _contentScrollSize: WH; _viewportSize: WH }>(\r\n (ctx) => ({\r\n x: Math.max(0, Math.round((ctx!._contentScrollSize.w - ctx!._viewportSize.w) * 100) / 100),\r\n y: Math.max(0, Math.round((ctx!._contentScrollSize.h - ctx!._viewportSize.h) * 100) / 100),\r\n }),\r\n { _equal: equalXY }\r\n );\r\n\r\n const { _options, _update } = createLifecycleBase(defaultOptionsWithTemplate, initialOptions, (force, checkOption) => {\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const { _value: padding, _changed: paddingChanged } = updatePaddingCache(force);\r\n\r\n if (paddingAbsoluteChanged || paddingChanged) {\r\n const paddingStyle: TRBL = {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n };\r\n\r\n if (!paddingAbsolute) {\r\n paddingStyle.t = -padding!.t;\r\n paddingStyle.r = -(padding!.r + padding!.l);\r\n paddingStyle.b = -(padding!.b + padding!.t);\r\n paddingStyle.l = -padding!.l;\r\n }\r\n\r\n style(paddingElm, {\r\n top: paddingStyle.t,\r\n left: paddingStyle.l,\r\n 'margin-right': paddingStyle.r,\r\n 'margin-bottom': paddingStyle.b,\r\n 'max-width': `calc(100% + ${paddingStyle.r * -1}px)`,\r\n });\r\n }\r\n\r\n const viewportOffsetSize = offsetSize(paddingElm);\r\n const contentClientSize = offsetSize(content);\r\n const contentScrollSize = scrollSize(content);\r\n const overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: contentScrollSize,\r\n _viewportSize: {\r\n w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize.w),\r\n h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize.h),\r\n },\r\n });\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n console.log('overflowAmount', overflowAmount);\r\n console.log('overflowAmountChanged', overflowAmountChanged);\r\n\r\n /*\r\n var setOverflowVariables = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xyI = scrollbarVarsInverted._x_y;\r\n var xy = scrollbarVars._x_y;\r\n var wh = scrollbarVars._w_h;\r\n var widthHeight = scrollbarVars._width_height;\r\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\r\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\r\n var checkFractionalOverflowAmount = previousOverflowAmount && previousOverflowAmount[xy] > 0 && _viewportElementNative[scrollMax] === 0;\r\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\r\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\r\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\r\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\r\n overflowAmount[xy] *=\r\n hideOverflowForceTextarea || (checkFractionalOverflowAmount && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1) ? 0 : 1;\r\n hasOverflow[xy] = overflowAmount[xy] > 0;\r\n\r\n //hideOverflow:\r\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\r\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\r\n hideOverflow[xy] =\r\n overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy]\r\n ? hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]\r\n : hasOverflow[xy];\r\n hideOverflow[xy + 's'] = hideOverflow[xy] ? overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy] : false;\r\n\r\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\r\n };\r\n*/\r\n /*\r\n if (!supportsScrollbarStyling) {\r\n paddingStyle.r -= env._nativeScrollbarSize.y;\r\n paddingStyle.b -= env._nativeScrollbarSize.x;\r\n }\r\n */\r\n });\r\n\r\n const onSizeChanged = () => {\r\n _update();\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n const { _changed, _value } = heightIntrinsicCache;\r\n if (_changed) {\r\n style(content, { height: _value ? 'auto' : '100%' });\r\n }\r\n };\r\n\r\n return {\r\n _options,\r\n _update,\r\n _onSizeChanged: onSizeChanged,\r\n _onTrinsicChanged: onTrinsicChanged,\r\n _destruct() {\r\n runEach(destructFns);\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n isString,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { CSSDirection } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getDirection = (elm: HTMLElement): CSSDirection => style(elm, 'direction') as CSSDirection;\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionCache?: Cache) => any,\r\n options?: SizeObserverOptions\r\n): (() => void) => {\r\n const { _direction: direction = false, _appear: appear = false } = options || {};\r\n const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior;\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const onSizeChangedCallbackProxy = (directionCache?: Cache) => {\r\n if (direction) {\r\n const rtl = getDirection(sizeObserver) === 'rtl';\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n onSizeChangedCallback(isString((directionCache || {})._value) ? directionCache : undefined);\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | null = appear ? onSizeChangedCallbackProxy : null;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = appear ? () => onScroll() : reset;\r\n }\r\n\r\n if (direction) {\r\n const updateDirectionCache = createCache(() => getDirection(sizeObserver));\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionCache = updateDirectionCache();\r\n const { _value, _changed } = directionCache;\r\n if (_changed) {\r\n if (_value === 'rtl') {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionCache);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(offListeners, on(sizeObserver, animationStartEventName, appearCallback));\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n Cache,\r\n createDOM,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => any\r\n): (() => void) => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const updateHeightIntrinsicCache = createCache>(\r\n (ioEntryOrSize) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n push(\r\n offListeners,\r\n createSizeObserver(trinsicObserver, () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(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 off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype TruthyOrFalsy = boolean | '' | 0 | null | undefined;\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | ''\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: TruthyOrFalsy,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => TruthyOrFalsy;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => TruthyOrFalsy;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 80)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject, CSSDirection } from 'typings';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { Cache, appendChildren, addClass, contents, is, isHTMLElement, createDiv, each, push } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { classNameHost, classNamePadding, classNameViewport, classNameContent } from 'classnames';\r\n\r\nconst normalizeTarget = (target: OSTarget): OSTargetObject => {\r\n if (isHTMLElement(target)) {\r\n const isTextarea = is(target, 'textarea');\r\n const host = (isTextarea ? createDiv() : target) as HTMLElement;\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n appendChildren(content, contents(target));\r\n appendChildren(target, padding);\r\n addClass(host, classNameHost);\r\n\r\n return {\r\n target,\r\n host,\r\n padding,\r\n viewport,\r\n content,\r\n };\r\n }\r\n\r\n const { host, padding, viewport, content } = target;\r\n\r\n addClass(host, classNameHost);\r\n addClass(padding, classNamePadding);\r\n addClass(viewport, classNameViewport);\r\n addClass(content, classNameContent);\r\n\r\n return target;\r\n};\r\n\r\nconst OverlayScrollbars = (target: OSTarget, options?: any, extensions?: any): void => {\r\n const osTarget: OSTargetObject = normalizeTarget(target);\r\n const lifecycles: Lifecycle[] = [];\r\n const { host, content } = osTarget;\r\n\r\n push(lifecycles, createStructureLifecycle(osTarget));\r\n\r\n // eslint-disable-next-line\r\n const onSizeChanged = (directionCache?: Cache) => {\r\n if (directionCache) {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onDirectionChanged && lifecycle._onDirectionChanged(directionCache);\r\n });\r\n } else {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onSizeChanged && lifecycle._onSizeChanged();\r\n });\r\n }\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onTrinsicChanged && lifecycle._onTrinsicChanged(widthIntrinsic, heightIntrinsicCache);\r\n });\r\n };\r\n\r\n createSizeObserver(host, onSizeChanged, { _appear: true, _direction: true });\r\n createTrinsicObserver(host, onTrinsicChanged);\r\n createDOMObserver(host, () => {\r\n return null;\r\n });\r\n createDOMObserver(\r\n content,\r\n () => {\r\n return null;\r\n },\r\n { _observeContent: true }\r\n );\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n getEnvironment(),\r\n OverlayScrollbars(document.body),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["ElementNodeType","Node","ELEMENT_NODE","Object","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","equalWH","equalXY","equalTRBL","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","property","finalProp","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","createCache","update","_equal","_initialValue","_value","_previous","force","context","curr","newVal","changed","_changed","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","Math","round","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollBarSize","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","getPropByPath","path","o","createLifecycleBase","defaultOptionsWithTemplate","initialOptions","updateFunction","optionsTemplate","defaultOptions","hints","_force","_changedOptions","checkOption","newOptions","_update","overflowBehaviorAllowedValues","paddingAbsolute","oTypes","boolean","overflowBehavior","cssMarginEnd","cssBorderEnd","createStructureLifecycle","host","paddingElm","padding","viewport","content","destructFns","scrollbarsOverlaid","supportsScrollbarStyling","supportFlexboxGlue","directionObserverObsolete","updatePaddingCache","updateOverflowAmountCache","ctx","max","_contentScrollSize","_viewportSize","paddingAbsoluteChanged","paddingChanged","paddingStyle","viewportOffsetSize","contentClientSize","contentScrollSize","overflowAmuntCache","overflowAmount","overflowAmountChanged","log","onSizeChanged","onTrinsicChanged","widthIntrinsic","heightIntrinsicCache","height","_onSizeChanged","_onTrinsicChanged","_destruct","animationStartEventName","scrollEventName","scrollAmount","getDirection","createSizeObserver","onSizeChangedCallback","_direction","_appear","appear","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","onSizeChangedCallbackProxy","directionCache","rtl","appearCallback","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","width","updateDirectionCache","event","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","pop","root","newSize","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","_destroy","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreTargetAttrChange","_ignoreContentChange","Map","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","normalizeTarget","isTextarea","OverlayScrollbars","extensions","osTarget","lifecycles","lifecycle","_onDirectionChanged"],"mappings":";;;;;;;;;EAEA,IAAMA,eAAe,GAAGC,IAAI,CAACC,YAA7B;0BACqCC,MAAM,CAACC;IAApCC,6BAAAA;IAAUC,mCAAAA;WAEFC,YAAYC;EAC1B,SAAOA,GAAG,KAAKC,SAAf;EACD;WAEeC,OAAOF;EACrB,SAAOA,GAAG,KAAK,IAAf;EACD;EAEM,IAAMG,IAAI,GAAyB,SAA7BA,IAA6B,CAACH,GAAD;EACxC,SAAOD,WAAW,CAACC,GAAD,CAAX,IAAoBE,MAAM,CAACF,GAAD;AAA1B,aACAA;AADA,QAEHH;UAAQ,CACLO,IADH,CACQJ,GADR;WAEGK,OAFH,CAEW,mBAFX,EAEgC,IAFhC;WAGGC,WAHH,EAFJ;EAMD,CAPM;WASSC,SAASP;EACvB,SAAO,OAAOA,GAAP,KAAe,QAAtB;EACD;WAEeQ,SAASR;EACvB,SAAO,OAAOA,GAAP,KAAe,QAAtB;EACD;WAMeS,WAAWT;EACzB,SAAO,OAAOA,GAAP,KAAe,UAAtB;EACD;WAEeU,QAAQV;EACtB,SAAOW,KAAK,CAACD,OAAN,CAAcV,GAAd,CAAP;EACD;WAEeY,SAASZ;EACvB,SAAO,OAAOA,GAAP,KAAe,QAAf,IAA2B,CAACU,OAAO,CAACV,GAAD,CAAnC,IAA4C,CAACE,MAAM,CAACF,GAAD,CAA1D;EACD;WAMea,YAAyCb;EACvD,MAAMc,MAAM,GAAG,CAAC,CAACd,GAAF,IAASA,GAAG,CAACc,MAA5B;EACA,MAAMC,mBAAmB,GAAGR,QAAQ,CAACO,MAAD,CAAR,IAAoBA,MAAM,GAAG,CAAC,CAA9B,IAAmCA,MAAM,GAAG,CAAT,IAAc,CAA7E;EAEA,SAAOJ,OAAO,CAACV,GAAD,CAAP,KAAiB,CAACS,UAAU,CAACT,GAAD,CAAX,IAAoBe,oBAArC,IAA6DD,MAAM,GAAG,CAAT,IAAcF,QAAQ,CAACZ,GAAD,CAAtB,GAA8Bc,MAAM,GAAG,CAAT,IAAcd,GAA5C,GAAkD,KAA/G,GAAuH,KAA9H;EACD;WAMegB,cAAuBhB;EACrC,MAAI,CAACA,GAAD,IAAQ,CAACY,QAAQ,CAACZ,GAAD,CAAjB,IAA0BG,IAAI,CAACH,GAAD,CAAJ,KAAc,QAA5C,EAAsD,OAAO,KAAP;EAEtD,MAAIiB,GAAJ;EACA,MAAMC,IAAI,GAAG,aAAb;EACA,MAAMC,IAAI,GAAGnB,GAAG,CAACkB,IAAD,CAAhB;EACA,MAAME,SAAS,GAAGD,IAAI,IAAIA,IAAI,CAACvB,SAA/B;EACA,MAAMyB,iBAAiB,GAAGvB,cAAc,CAACM,IAAf,CAAoBJ,GAApB,EAAyBkB,IAAzB,CAA1B;EACA,MAAMI,gBAAgB,GAAGF,SAAS,IAAItB,cAAc,CAACM,IAAf,CAAoBgB,SAApB,EAA+B,eAA/B,CAAtC;;EAEA,MAAID,IAAI,IAAI,CAACE,iBAAT,IAA8B,CAACC,gBAAnC,EAAqD;EACnD,WAAO,KAAP;EACD;;EAGD,OAAKL,GAAL,IAAYjB,GAAZ,EAAiB;;;EAKjB,SAAOD,WAAW,CAACkB,GAAD,CAAX,IAAoBnB,cAAc,CAACM,IAAf,CAAoBJ,GAApB,EAAyBiB,GAAzB,CAA3B;EACD;WAMeM,cAAcvB;EAC5B,MAAMwB,aAAa,GAAGC,MAAM,CAACC,WAA7B;EACA,SAAO1B,GAAG,IAAIwB,aAAa,GAAGxB,GAAG,YAAYwB,aAAlB,GAAkCxB,GAAG,CAAC2B,QAAJ,KAAiBnC,gBAApE,GAAuF,KAAjG;EACD;WAMeoC,UAAU5B;EACxB,MAAMwB,aAAa,GAAGC,MAAM,CAACI,OAA7B;EACA,SAAO7B,GAAG,IAAIwB,aAAa,GAAGxB,GAAG,YAAYwB,aAAlB,GAAkCxB,GAAG,CAAC2B,QAAJ,KAAiBnC,gBAApE,GAAuF,KAAjG;EACD;;EChGD,SAASsC,UAAT,CACEC,OADF,EAEEC,QAFF,EAGEC,GAHF,EAIEC,KAJF;EAME,MAAInC,WAAW,CAACmC,KAAD,CAAf,EAAwB;EACtB,WAAOD,GAAG,GAAGA,GAAG,CAACF,OAAD,CAAN,GAAkBC,QAA5B;EACD;;EACDC,EAAAA,GAAG,KAAKA,GAAG,CAACF,OAAD,CAAH,GAAeG,KAApB,CAAH;EACD;;WAWeC,KAAKF,KAAyBG,UAAkBF;EAC9D,MAAInC,WAAW,CAACmC,KAAD,CAAf,EAAwB;EACtB,WAAOD,GAAG,GAAGA,GAAG,CAACI,YAAJ,CAAiBD,QAAjB,CAAH,GAAgC,IAA1C;EACD;;EACDH,EAAAA,GAAG,IAAIA,GAAG,CAACK,YAAJ,CAAiBF,QAAjB,EAA2BF,KAA3B,CAAP;EACD;EAOM,IAAMK,UAAU,GAAG,SAAbA,UAAa,CAACN,GAAD,EAAsBG,QAAtB;EACxBH,EAAAA,GAAG,IAAIA,GAAG,CAACO,eAAJ,CAAoBJ,QAApB,CAAP;EACD,CAFM;WAWSK,WAAWR,KAAyBC;EAClD,SAAOJ,UAAU,CAAC,YAAD,EAAe,CAAf,EAAkBG,GAAlB,EAAuBC,KAAvB,CAAjB;EACD;WASeQ,UAAUT,KAAyBC;EACjD,SAAOJ,UAAU,CAAC,WAAD,EAAc,CAAd,EAAiBG,GAAjB,EAAsBC,KAAtB,CAAjB;EACD;;WC5BeS,KACdC,QACAC;EAEA,MAAIhC,WAAW,CAAC+B,MAAD,CAAf,EAAyB;EACvB,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAAM,CAAC9B,MAA3B,EAAmCgC,CAAC,EAApC,EAAwC;EACtC,UAAID,QAAQ,CAACD,MAAM,CAACE,CAAD,CAAP,EAAYA,CAAZ,EAAeF,MAAf,CAAR,KAAmC,KAAvC,EAA8C;EAC5C;EACD;EACF;EACF,GAND,MAMO,IAAIA,MAAJ,EAAY;EACjBD,IAAAA,IAAI,CAAChD,MAAM,CAACoD,IAAP,CAAYH,MAAZ,CAAD,EAAsB,UAAC3B,GAAD;EAAA,aAAS4B,QAAQ,CAACD,MAAM,CAAC3B,GAAD,CAAP,EAAcA,GAAd,EAAmB2B,MAAnB,CAAjB;EAAA,KAAtB,CAAJ;EACD;;EACD,SAAOA,MAAP;EACD;EAQM,IAAMI,OAAO,GAAG,SAAVA,OAAU,CAAUC,GAAV,EAAyBC,IAAzB,EAAkCC,SAAlC;EAAA,SAAiEF,GAAG,CAACD,OAAJ,CAAYE,IAAZ,EAAkBC,SAAlB,CAAjE;EAAA,CAAhB;EAOA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAAIC,KAAJ,EAAqBC,KAArB,EAA8CC,iBAA9C;EAClB,GAACA,iBAAD,IAAsB,CAAC/C,QAAQ,CAAC8C,KAAD,CAA/B,IAA0CzC,WAAW,CAACyC,KAAD,CAArD,GAA+D3C,KAAK,CAACf,SAAN,CAAgBwD,IAAhB,CAAqBI,KAArB,CAA2BH,KAA3B,EAAkCC,KAAlC,CAA/D,GAAsHD,KAAK,CAACD,IAAN,CAAWE,KAAX,CAAtH;EACA,SAAOD,KAAP;EACD,CAHM;EASA,IAAMI,IAAI,GAAG,SAAPA,IAAO,CAAUR,GAAV;EAClB,MAAItC,KAAK,CAAC8C,IAAV,EAAgB;EACd,WAAO9C,KAAK,CAAC8C,IAAN,CAAWR,GAAX,CAAP;EACD;;EACD,MAAMS,MAAM,GAAa,EAAzB;EAEAf,EAAAA,IAAI,CAACM,GAAD,EAAM,UAAChB,GAAD;EACRmB,IAAAA,IAAI,CAACM,MAAD,EAASzB,GAAT,CAAJ;EACD,GAFG,CAAJ;EAIA,SAAOyB,MAAP;EACD,CAXM;EAiBA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACN,KAAD;EAAA,SAA0CA,KAAK,IAAIA,KAAK,CAACvC,MAAN,KAAiB,CAApE;EAAA,CAArB;EAOA,IAAM8C,OAAO,GAAG,SAAVA,OAAU,CAACX,GAAD,EAAiDY,EAAjD;EACrB,MAAMC,KAAK,GAAG,SAARA,KAAQ,CAACC,EAAD;EAAA,WAAqBA,EAAE,IAAIA,EAAE,CAACF,EAAD,CAA7B;EAAA,GAAd;;EACA,MAAIZ,GAAG,YAAYe,GAAnB,EAAwB;EACtBf,IAAAA,GAAG,CAACgB,OAAJ,CAAYH,KAAZ;EACD,GAFD,MAEO;EACLnB,IAAAA,IAAI,CAACM,GAAD,EAAMa,KAAN,CAAJ;EACD;EACF,CAPM;;ECvFA,IAAMhE,gBAAc,GAAG,SAAjBA,cAAiB,CAACE,GAAD,EAAWkE,IAAX;EAAA,SAAuDvE,MAAM,CAACC,SAAP,CAAiBE,cAAjB,CAAgCM,IAAhC,CAAqCJ,GAArC,EAA0CkE,IAA1C,CAAvD;EAAA,CAAvB;EAMA,IAAMnB,IAAI,GAAG,SAAPA,IAAO,CAAC/C,GAAD;EAAA,SAA8BA,GAAG,GAAGL,MAAM,CAACoD,IAAP,CAAY/C,GAAZ,CAAH,GAAsB,EAAvD;EAAA,CAAb;WAQSmE,WACdC,QACAC,SACAC,SACAC,SACAC,SACAC,SACAC;EAEA,MAAMC,OAAO,GAAe,CAACN,OAAD,EAAUC,OAAV,EAAmBC,OAAnB,EAA4BC,OAA5B,EAAqCC,OAArC,EAA8CC,OAA9C,CAA5B;;EAGA,MAAI,CAAC,OAAON,MAAP,KAAkB,QAAlB,IAA8BlE,MAAM,CAACkE,MAAD,CAArC,KAAkD,CAAC3D,UAAU,CAAC2D,MAAD,CAAjE,EAA2E;EACzEA,IAAAA,MAAM,GAAG,EAAT;EACD;;EAEDzB,EAAAA,IAAI,CAACgC,OAAD,EAAU,UAAC/B,MAAD;EAEZD,IAAAA,IAAI,CAACI,IAAI,CAACH,MAAD,CAAL,EAAe,UAAC3B,GAAD;EACjB,UAAM2D,IAAI,GAAQhC,MAAM,CAAC3B,GAAD,CAAxB;;EAIA,UAAImD,MAAM,KAAKQ,IAAf,EAAqB;EACnB,eAAO,IAAP;EACD;;EAED,UAAMC,WAAW,GAAGnE,OAAO,CAACkE,IAAD,CAA3B;;EAGA,UAAIA,IAAI,KAAK5D,aAAa,CAAC4D,IAAD,CAAb,IAAuBC,WAA5B,CAAR,EAAkD;EAChD,YAAMC,GAAG,GAAGV,MAAM,CAACnD,GAAD,CAAlB;EACA,YAAI8D,KAAK,GAAQD,GAAjB;;EAGA,YAAID,WAAW,IAAI,CAACnE,OAAO,CAACoE,GAAD,CAA3B,EAAkC;EAChCC,UAAAA,KAAK,GAAG,EAAR;EACD,SAFD,MAEO,IAAI,CAACF,WAAD,IAAgB,CAAC7D,aAAa,CAAC8D,GAAD,CAAlC,EAAyC;EAC9CC,UAAAA,KAAK,GAAG,EAAR;EACD;;EAGDX,QAAAA,MAAM,CAACnD,GAAD,CAAN,GAAckD,UAAU,CAACY,KAAD,EAAQH,IAAR,CAAxB;EACD,OAbD,MAaO;EACLR,QAAAA,MAAM,CAACnD,GAAD,CAAN,GAAc2D,IAAd;EACD;EACF,KA5BG,CAAJ;EA6BD,GA/BG,CAAJ;EAkCA,SAAOR,MAAP;EACD;WAMeY,cAAchF;EAE5B,OAAK,IAAMiF,IAAX,IAAmBjF,GAAnB;EAAwB,WAAO,KAAP;EAAxB;;EACA,SAAO,IAAP;EAED;;EChFD,IAAMkF,aAAa,GAAG,mBAAtB;;EACA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAAClD,GAAD,EAAsBmD,SAAtB,EAAyCC,MAAzC;EACtB,MAAIC,KAAJ;EACA,MAAIxC,CAAC,GAAG,CAAR;EACA,MAAIY,MAAM,GAAG,KAAb;;EAEA,MAAIzB,GAAG,IAAIzB,QAAQ,CAAC4E,SAAD,CAAnB,EAAgC;EAC9B,QAAMG,OAAO,GAAkBH,SAAS,CAACI,KAAV,CAAgBN,aAAhB,KAAkC,EAAjE;EACAxB,IAAAA,MAAM,GAAG6B,OAAO,CAACzE,MAAR,GAAiB,CAA1B;;EACA,YAAQwE,KAAK,GAAGC,OAAO,CAACzC,CAAC,EAAF,CAAvB,GAA+B;EAC7BY,MAAAA,MAAM,GAAG,CAAC,CAAC2B,MAAM,CAACpD,GAAG,CAACwD,SAAL,EAAgBH,KAAhB,CAAR,IAAkC5B,MAA3C;EACD;EACF;;EACD,SAAOA,MAAP;EACD,CAbD;EA4BO,IAAMgC,QAAQ,GAAG,SAAXA,QAAW,CAACzD,GAAD,EAAsBmD,SAAtB;EACtBD,EAAAA,eAAe,CAAClD,GAAD,EAAMmD,SAAN,EAAiB,UAACK,SAAD,EAAYH,KAAZ;EAAA,WAAsBG,SAAS,CAACE,GAAV,CAAcL,KAAd,CAAtB;EAAA,GAAjB,CAAf;EACD,CAFM;;EC3BP,IAAMM,YAAY,GAAG/D,OAAO,CAACjC,SAA7B;;EAOA,IAAMiG,IAAI,GAAG,SAAPA,IAAO,CAACC,QAAD,EAAmB7D,GAAnB;EACX,MAAMgB,GAAG,GAAmB,EAA5B;EACA,MAAM8C,OAAO,GAAG9D,GAAG,IAAIL,SAAS,CAACK,GAAD,CAAT,GAAiBA,GAAjB,GAAuB,KAA3B,GAAmC+D,QAAtD;EAEA,SAAOD,OAAO,GAAG3C,IAAI,CAACH,GAAD,EAAM8C,OAAO,CAACE,gBAAR,CAAyBH,QAAzB,CAAN,CAAP,GAAmD7C,GAAjE;EACD,CALD;;EAuBA,IAAMiD,EAAE,GAAG,SAALA,EAAK,CAACjE,GAAD,EAAwB6D,QAAxB;EACT,MAAIlE,SAAS,CAACK,GAAD,CAAb,EAAoB;EAIlB,QAAM8B,EAAE,GAA8B6B,YAAY,CAACO,OAAb,IAAwBP,YAAY,CAACQ,iBAA3E;EACA,WAAOrC,EAAE,CAAC3D,IAAH,CAAQ6B,GAAR,EAAa6D,QAAb,CAAP;EACD;;EACD,SAAO,KAAP;EACD,CATD;;EA+BA,IAAMO,QAAQ,GAAG,SAAXA,QAAW,CAACpE,GAAD;EAAA,SAAsDA,GAAG,GAAGwB,IAAI,CAACxB,GAAG,CAACqE,UAAL,CAAP,GAA0B,EAAnF;EAAA,CAAjB;;EAMA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACtE,GAAD;EAAA,SAA+CA,GAAG,GAAGA,GAAG,CAACuE,aAAP,GAAuB,IAAzE;EAAA,CAAf;;EC7DA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACC,SAAD,EAAyBC,eAAzB,EAAuDC,YAAvD;EACb,MAAIA,YAAJ,EAAkB;EAChB,QAAIC,MAAM,GAAgBF,eAA1B;EACA,QAAIG,QAAJ;;EAGA,QAAIJ,SAAJ,EAAe;EACb,UAAI7F,WAAW,CAAC+F,YAAD,CAAf,EAA+B;EAC7BE,QAAAA,QAAQ,GAAGd,QAAQ,CAACe,sBAAT,EAAX;EAGApE,QAAAA,IAAI,CAACiE,YAAD,EAAe,UAACI,WAAD;EACjB,cAAIA,WAAW,KAAKH,MAApB,EAA4B;EAC1BA,YAAAA,MAAM,GAAGG,WAAW,CAACC,eAArB;EACD;;EACDH,UAAAA,QAAS,CAACI,WAAV,CAAsBF,WAAtB;EACD,SALG,CAAJ;EAMD,OAVD,MAUO;EACLF,QAAAA,QAAQ,GAAGF,YAAX;EACD;;EAGD,UAAID,eAAJ,EAAqB;EACnB,YAAI,CAACE,MAAL,EAAa;EACXA,UAAAA,MAAM,GAAGH,SAAS,CAACS,UAAnB;EACD,SAFD,MAEO,IAAIN,MAAM,KAAKF,eAAf,EAAgC;EACrCE,UAAAA,MAAM,GAAGA,MAAM,CAACO,WAAhB;EACD;EACF;;EAEDV,MAAAA,SAAS,CAACW,YAAV,CAAuBP,QAAvB,EAAiCD,MAAjC;EACD;EACF;EACF,CAjCD;;EAwCO,IAAMS,cAAc,GAAG,SAAjBA,cAAiB,CAACC,IAAD,EAAoBC,QAApB;EAC5Bf,EAAAA,MAAM,CAACc,IAAD,EAAO,IAAP,EAAaC,QAAb,CAAN;EACD,CAFM;EASA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACF,IAAD,EAAoBC,QAApB;EAC7Bf,EAAAA,MAAM,CAACc,IAAD,EAAOA,IAAI,IAAIA,IAAI,CAACJ,UAApB,EAAgCK,QAAhC,CAAN;EACD,CAFM;EA0BA,IAAME,cAAc,GAAG,SAAjBA,cAAiB,CAACC,KAAD;EAC5B,MAAI9G,WAAW,CAAC8G,KAAD,CAAf,EAAwB;EACtBhF,IAAAA,IAAI,CAACc,IAAI,CAACkE,KAAD,CAAL,EAAc,UAACC,CAAD;EAAA,aAAOF,cAAc,CAACE,CAAD,CAArB;EAAA,KAAd,CAAJ;EACD,GAFD,MAEO,IAAID,KAAJ,EAAW;EAChB,QAAMjB,SAAS,GAAGH,MAAM,CAACoB,KAAD,CAAxB;;EACA,QAAIjB,SAAJ,EAAe;EACbA,MAAAA,SAAS,CAACmB,WAAV,CAAsBF,KAAtB;EACD;EACF;EACF,CATM;;EC/EA,IAAMG,SAAS,GAAG,SAAZA,SAAY,CAACC,UAAD;EACvB,MAAMC,GAAG,GAAGhC,QAAQ,CAACiC,aAAT,CAAuB,KAAvB,CAAZ;;EACA,MAAIF,UAAJ,EAAgB;EACd5F,IAAAA,IAAI,CAAC6F,GAAD,EAAM,OAAN,EAAeD,UAAf,CAAJ;EACD;;EACD,SAAOC,GAAP;EACD,CANM;EAYA,IAAME,SAAS,GAAG,SAAZA,SAAY,CAACC,IAAD;EACvB,MAAMC,UAAU,GAAGN,SAAS,EAA5B;EACAM,EAAAA,UAAU,CAACC,SAAX,GAAuBF,IAAI,CAACG,IAAL,EAAvB;EAEA,SAAO3F,IAAI,CAAC0D,QAAQ,CAAC+B,UAAD,CAAT,EAAuB,UAACnG,GAAD;EAAA,WAASyF,cAAc,CAACzF,GAAD,CAAvB;EAAA,GAAvB,CAAX;EACD,CALM;;ECdP,IAAMsG,OAAO,GAAO;EAClBC,EAAAA,CAAC,EAAE,CADe;EAElBC,EAAAA,CAAC,EAAE;EAFe,CAApB;EAQO,IAAMC,UAAU,GAAG,SAAbA,UAAa;EAAA,SAAW;EACnCF,IAAAA,CAAC,EAAE/G,MAAM,CAACkH,UADyB;EAEnCF,IAAAA,CAAC,EAAEhH,MAAM,CAACmH;EAFyB,GAAX;EAAA,CAAnB;EASA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAC5G,GAAD;EAAA,SACxBA;AAAG,QACC;EACEuG,QAAAA,CAAC,EAAEvG,GAAG,CAAC6G,WADT;EAEEL,QAAAA,CAAC,EAAExG,GAAG,CAAC8G;EAFT;AADD,QAKCR,OANoB;EAAA,CAAnB;EAYA,IAAMS,UAAU,GAAG,SAAbA,UAAa,CAAC/G,GAAD;EAAA,SACxBA;AAAG,QACC;EACEuG,QAAAA,CAAC,EAAEvG,GAAG,CAACgH,WADT;EAEER,QAAAA,CAAC,EAAExG,GAAG,CAACiH;EAFT;AADD,QAKCX,OANoB;EAAA,CAAnB;EAYA,IAAMY,UAAU,GAAG,SAAbA,UAAa,CAAClH,GAAD;EAAA,SACxBA;AAAG,QACC;EACEuG,QAAAA,CAAC,EAAEvG,GAAG,CAACmH,WADT;EAEEX,QAAAA,CAAC,EAAExG,GAAG,CAACoH;EAFT;AADD,QAKCd,OANoB;EAAA,CAAnB;EAYA,IAAMe,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACrH,GAAD;EAAA,SAA+BA,GAAG,CAACqH,qBAAJ,EAA/B;EAAA,CAA9B;;ECxDP,IAAIC,oBAAJ;;EACA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB;EAC3B,MAAIzJ,WAAW,CAACwJ,oBAAD,CAAf,EAAuC;EACrCA,IAAAA,oBAAoB,GAAG,KAAvB;;EACA,QAAI;EAGF9H,MAAAA,MAAM,CAACgI,gBAAP;UACE,MADF;UAEE,IAFF;UAGE9J,MAAM,CAAC+J,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;EACnCC,UAAAA,GAAG,EAAE;EACHJ,YAAAA,oBAAoB,GAAG,IAAvB;EACD;EAHkC,SAArC;QAHF;EAUD,KAbD,CAaE,OAAO3B,CAAP,EAAU;EACb;;EACD,SAAO2B,oBAAP;EACD,CAnBD;;EAoBA,IAAMK,eAAe,GAAG,SAAlBA,eAAkB,CAACC,UAAD;EAAA,SAAwBA,UAAU,CAACC,KAAX,CAAiB,GAAjB,CAAxB;EAAA,CAAxB;;EAeO,IAAMC,GAAG,GAAG,SAANA,GAAM,CAAC3F,MAAD,EAAsByF,UAAtB,EAA0CG,QAA1C,EAAmEC,OAAnE;EACjBtH,EAAAA,IAAI,CAACiH,eAAe,CAACC,UAAD,CAAhB,EAA8B,UAACK,SAAD;EAChC9F,IAAAA,MAAM,CAAC+F,mBAAP,CAA2BD,SAA3B,EAAsCF,QAAtC,EAAgDC,OAAhD;EACD,GAFG,CAAJ;EAGD,CAJM;EAaA,IAAMG,EAAE,GAAG,SAALA,EAAK,CAAChG,MAAD,EAAsByF,UAAtB,EAA0CG,QAA1C,EAAmEK,OAAnE;EAChB,MAAMC,sBAAsB,GAAGd,oBAAoB,EAAnD;EACA,MAAMe,OAAO,IAAID,sBAAsB,IAAID,OAA1B,IAAqCA,OAAO,CAACG,SAA9C,IAA2D,KAA3E;EACA,MAAMP,OAAO,IAAII,OAAO,IAAIA,OAAO,CAACI,SAApB,IAAiC,KAAjD;EACA,MAAMC,IAAI,IAAIL,OAAO,IAAIA,OAAO,CAACM,MAApB,IAA8B,KAA3C;EACA,MAAMC,YAAY,GAAmB,EAArC;EACA,MAAMC,aAAa,GAAsCP;AAAsB,QAC3E;EACEC,QAAAA,OAAO,EAAPA,OADF;EAEEN,QAAAA,OAAO,EAAPA;EAFF;AAD2E,QAK3EA,OALJ;EAOAtH,EAAAA,IAAI,CAACiH,eAAe,CAACC,UAAD,CAAhB,EAA8B,UAACK,SAAD;EAChC,QAAMY,aAAa,GAAGJ;AAAI,UACtB,UAACK,GAAD;EACE3G,UAAAA,MAAM,CAAC+F,mBAAP,CAA2BD,SAA3B,EAAsCY,aAAtC,EAAqDb,OAArD;EACAD,UAAAA,QAAQ,IAAIA,QAAQ,CAACe,GAAD,CAApB;EACD;AAJqB,UAKtBf,QALJ;EAOA5G,IAAAA,IAAI,CAACwH,YAAD,EAAeb,GAAG,CAACiB,IAAJ,CAAS,IAAT,EAAe5G,MAAf,EAAuB8F,SAAvB,EAAkCY,aAAlC,EAAiDb,OAAjD,CAAf,CAAJ;EACA7F,IAAAA,MAAM,CAACqF,gBAAP,CAAwBS,SAAxB,EAAmCY,aAAnC,EAAkDD,aAAlD;EACD,GAVG,CAAJ;EAYA,SAAOjH,OAAO,CAACoH,IAAR,CAAa,CAAb,EAAgBJ,YAAhB,CAAP;EACD,CA1BM;EAgCA,IAAMK,eAAe,GAAG,SAAlBA,eAAkB,CAACF,GAAD;EAAA,SAAgBA,GAAG,CAACE,eAAJ,EAAhB;EAAA,CAAxB;EAMA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACH,GAAD;EAAA,SAAgBA,GAAG,CAACG,cAAJ,EAAhB;EAAA,CAAvB;;EChFA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAwBC,CAAxB,EAA0CC,CAA1C,EAA4DC,KAA5D;EACnB,MAAIF,CAAC,IAAIC,CAAT,EAAY;EACV,QAAI3H,MAAM,GAAG,IAAb;EACAf,IAAAA,IAAI,CAAC2I,KAAD,EAAQ,UAACpH,IAAD;EACV,UAAIkH,CAAC,CAAClH,IAAD,CAAD,KAAYmH,CAAC,CAACnH,IAAD,CAAjB,EAAyB;EACvBR,QAAAA,MAAM,GAAG,KAAT;EACD;EACF,KAJG,CAAJ;EAKA,WAAOA,MAAP;EACD;;EACD,SAAO,KAAP;EACD,CAXM;EAmBA,IAAM6H,OAAO,GAAG,SAAVA,OAAU,CAACH,CAAD,EAASC,CAAT;EAAA,SAAoBF,KAAK,CAAKC,CAAL,EAAQC,CAAR,EAAW,CAAC,GAAD,EAAM,GAAN,CAAX,CAAzB;EAAA,CAAhB;EAQA,IAAMG,OAAO,GAAG,SAAVA,OAAU,CAACJ,CAAD,EAASC,CAAT;EAAA,SAAoBF,KAAK,CAAKC,CAAL,EAAQC,CAAR,EAAW,CAAC,GAAD,EAAM,GAAN,CAAX,CAAzB;EAAA,CAAhB;EAQA,IAAMI,SAAS,GAAG,SAAZA,SAAY,CAACL,CAAD,EAAWC,CAAX;EAAA,SAAwBF,KAAK,CAAOC,CAAP,EAAUC,CAAV,EAAa,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,CAAb,CAA7B;EAAA,CAAlB;;ECzCP,IAAMK,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,GAAD;EAAA,SAAyBA,GAAG,CAACC,MAAJ,CAAW,CAAX,EAAcC,WAAd,KAA8BF,GAAG,CAACG,KAAJ,CAAU,CAAV,CAAvD;EAAA,CAA3B;;EACA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB;EAAA,SAA2BjE,SAAS,GAAGkE,KAAvC;EAAA,CAAtB;;EAIO,IAAMC,WAAW,GAA0B,CAAC,UAAD,EAAa,OAAb,EAAsB,KAAtB,EAA6B,MAA7B,CAA3C;EACA,IAAMC,UAAU,GAA0B,CAAC,QAAD,EAAW,KAAX,EAAkB,GAAlB,EAAuB,IAAvB,EAA6B,QAA7B,EAAuC,KAAvC,EAA8C,GAA9C,EAAmD,IAAnD,CAA1C;EAEA,IAAMC,OAAO,GAA2B,EAAxC;EACA,IAAMC,QAAQ,GAA8B,EAA5C;EAMA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACpH,IAAD;EACzB,MAAIvB,MAAM,GAAuB0I,QAAQ,CAACnH,IAAD,CAAzC;;EAEA,MAAInF,gBAAc,CAACsM,QAAD,EAAWnH,IAAX,CAAlB,EAAoC;EAClC,WAAOvB,MAAP;EACD;;EAED,MAAM4I,cAAc,GAAWZ,kBAAkB,CAACzG,IAAD,CAAjD;EACA,MAAMsH,QAAQ,GAAwBR,aAAa,EAAnD;EAEApJ,EAAAA,IAAI,CAACsJ,WAAD,EAAc,UAACO,MAAD;EAChB,QAAMC,mBAAmB,GAAWD,MAAM,CAACnM,OAAP,CAAe,IAAf,EAAqB,EAArB,CAApC;EACA,QAAMqM,mBAAmB,GAAkB,CACzCzH,IADyC,EAEzCuH,MAAM,GAAGvH,IAFgC,EAGzCwH,mBAAmB,GAAGH,cAHmB,EAIzCZ,kBAAkB,CAACe,mBAAD,CAAlB,GAA0CH,cAJD,CAA3C;EAMA5I,IAAAA,MAAM,GAAGgJ,mBAAmB,CAAC7G,IAApB,CAAyB,UAAC8G,iBAAD;EAAA,aAA+BJ,QAAQ,CAACI,iBAAD,CAAR,KAAgC1M,SAA/D;EAAA,KAAzB,CAAT;EACA,WAAO,CAACyD,MAAR;EACD,GAVG,CAAJ;EAYA0I,EAAAA,QAAQ,CAACnH,IAAD,CAAR,GAAiBvB,MAAjB;EACA,SAAOA,MAAP;EACD,CAxBM;EAiEA,IAAMkJ,KAAK,GAAG,SAARA,KAAQ,CAAU3H,IAAV;EACnB,MAAIvB,MAAM,GAAQyI,OAAO,CAAClH,IAAD,CAAP,IAAiBxD,MAAM,CAACwD,IAAD,CAAzC;;EAEA,MAAInF,gBAAc,CAACqM,OAAD,EAAUlH,IAAV,CAAlB,EAAmC;EACjC,WAAOvB,MAAP;EACD;;EAEDf,EAAAA,IAAI,CAACuJ,UAAD,EAAa,UAACM,MAAD;EACf9I,IAAAA,MAAM,GAAGA,MAAM,IAAIjC,MAAM,CAAC+K,MAAM,GAAGd,kBAAkB,CAACzG,IAAD,CAA5B,CAAzB;EACA,WAAO,CAACvB,MAAR;EACD,GAHG,CAAJ;EAKAyI,EAAAA,OAAO,CAAClH,IAAD,CAAP,GAAgBvB,MAAhB;EACA,SAAOA,MAAP;EACD,CAdM;;EClFA,IAAMmJ,2BAA2B,GAAGD,KAAK,CAA0B,kBAA1B,CAAzC;EACA,IAAME,+BAA+B,GAAGF,KAAK,CAA8B,sBAA9B,CAA7C;EACA,IAAMG,yBAAyB,GAAoBH,KAAK,CAAC,gBAAD,CAAxD;EACA,IAAMI,GAAG,GAAGJ,KAAK,CAA8B,sBAA9B,CAAjB;EACA,IAAMK,GAAG,GAAGL,KAAK,CAA+B,uBAA/B,CAAjB;;ECHA,IAAMM,IAAI,GAAG,SAAPA,IAAO,KAAb;EAQA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAACC,kBAAD,EAA4CC,OAA5C,EAA8DC,OAA9D;EACtB,MAAIC,SAAJ;EACA,MAAIC,YAAJ;EACA,MAAMC,UAAU,GAAGlN,QAAQ,CAAC8M,OAAD,CAAR,IAAqBA,OAAO,GAAG,CAAlD;EACA,MAAMK,UAAU,GAAGnN,QAAQ,CAAC+M,OAAD,CAAR,IAAqBA,OAAO,GAAG,CAAlD;EACA,MAAMK,MAAM,GAAGF,UAAU,GAAGhM,MAAM,CAACmM,YAAV,GAAyBZ,GAAlD;EACA,MAAMa,GAAG,GAAGJ,UAAU,GAAGhM,MAAM,CAACqM,UAAV,GAAuBb,GAA7C;;EACA,MAAMc,KAAK,GAAG,SAARA,KAAQ,CAAUC,IAAV;EACZR,IAAAA,YAAY,GAAGE,UAAU,GAAGO,WAAW,CAACC,GAAZ,EAAH,GAAuB,CAAhD;EACAX,IAAAA,SAAS,IAAII,MAAM,CAACJ,SAAD,CAAnB;EAGAH,IAAAA,kBAAkB,CAAC5J,KAAnB,CAAyB,IAAzB,EAA+BwK,IAA/B;EACD,GAND;;EAQA,SAAO;EAGL,QAAMG,UAAU,GAAGJ,KAAK,CAAC/C,IAAN,CAAW,IAAX,EAAiBoD,SAAjB,CAAnB;EACA,QAAMC,SAAS,GAAGX,UAAU,GAAGO,WAAW,CAACC,GAAZ,KAAoBV,YAApB,IAAoCF,OAAvC,GAAkD,KAA9E;EAEAC,IAAAA,SAAS,IAAII,MAAM,CAACJ,SAAD,CAAnB;EACAA,IAAAA,SAAS,GAAGc,SAAS,GAAGF,UAAU,EAAb,GAAmBN,GAAG,CAACM,UAAD,EAAad,OAAb,CAA3C;EACD,GARD;EASD,CAxBM;;ECCP,IAAMiB,SAAS,GAAG;EAChBC,EAAAA,uBAAuB,EAAE,CADT;EAEhBC,EAAAA,WAAW,EAAE,CAFG;EAGhBC,EAAAA,WAAW,EAAE,CAHG;EAIhBC,EAAAA,QAAQ,EAAE,CAJM;EAKhBC,EAAAA,UAAU,EAAE,CALI;EAMhBC,EAAAA,UAAU,EAAE,CANI;EAOhBC,EAAAA,UAAU,EAAE,CAPI;EAQhBC,EAAAA,OAAO,EAAE,CARO;EAShBC,EAAAA,KAAK,EAAE,CATS;EAUhBC,EAAAA,OAAO,EAAE,CAVO;EAWhBC,EAAAA,MAAM,EAAE,CAXQ;EAYhBC,EAAAA,MAAM,EAAE,CAZQ;EAahBC,EAAAA,IAAI,EAAE;EAbU,CAAlB;;EAgBA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAClN,KAAD,EAAgBmN,OAAhB;EAE1B,MAAMC,GAAG,GAAGD,OAAO,GAAGE,UAAU,CAACrN,KAAD,CAAb,GAAuBsN,QAAQ,CAACtN,KAAD,EAAQ,EAAR,CAAlD;EAEA,SAAOuN,MAAM,CAACC,KAAP,CAAaJ,GAAb,IAAoB,CAApB,GAAwBA,GAA/B;EACD,CALD;;EAMA,IAAMK,WAAW,GAAG,SAAdA,WAAc,CAACzL,IAAD,EAAe0L,GAAf;EAAA,SAA0D,CAACtB,SAAS,CAACpK,IAAI,CAAC5D,WAAL,EAAD,CAAV,IAAkCC,QAAQ,CAACqP,GAAD,CAA1C,GAAqDA,GAArD,UAA+DA,GAAzH;EAAA,CAApB;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAC5N,GAAD,EAAmB6N,aAAnB,EAAuD5L,IAAvD;EAAA,SAEhB4L,aAAa,IAAI,IAAjB,GAAwBA,aAAa,CAACC,gBAAd,CAA+B7L,IAA/B,CAAxB,GAA+DjC,GAAG,CAAC+J,KAAJ,CAAU9H,IAAV,CAF/C;EAAA,CAAlB;;EAGA,IAAM8L,SAAS,GAAG,SAAZA,SAAY,CAAC/N,GAAD,EAA0BiC,IAA1B,EAAwC0L,GAAxC;EAChB,MAAI;EACF,QAAI3N,GAAG,IAAIA,GAAG,CAAC+J,KAAJ,CAAU9H,IAAV,MAAoBjE,SAA/B,EAA0C;EACxCgC,MAAAA,GAAG,CAAC+J,KAAJ,CAAU9H,IAAV,IAAkByL,WAAW,CAACzL,IAAD,EAAO0L,GAAP,CAA7B;EACD;EACF,GAJD,CAIE,OAAOhI,CAAP,EAAU;EACb,CAND;;WAgBgBoE,MAAM/J,KAAyBgO;EAC7C,MAAMC,cAAc,GAAG1P,QAAQ,CAACyP,MAAD,CAA/B;EACA,MAAME,SAAS,GAAGzP,OAAO,CAACuP,MAAD,CAAP,IAAmBC,cAArC;;EAEA,MAAIC,SAAJ,EAAe;EACb,QAAIC,eAAe,GAAyBF,cAAc,GAAG,EAAH,GAAQ,EAAlE;;EACA,QAAIjO,GAAJ,EAAS;EACP,UAAM6N,aAAa,GAAwBrO,MAAM,CAAC4O,gBAAP,CAAwBpO,GAAxB,EAA6B,IAA7B,CAA3C;EACAmO,MAAAA,eAAe,GAAGF;AAAc,YAC5BL,SAAS,CAAC5N,GAAD,EAAM6N,aAAN,EAAqBG,MAArB;AADmB,YAE3BA,MAAwB,CAACK,MAAzB,CAAgC,UAAC5M,MAAD,EAASzC,GAAT;EAC/ByC,YAAAA,MAAM,CAACzC,GAAD,CAAN,GAAc4O,SAAS,CAAC5N,GAAD,EAAM6N,aAAN,EAAqB7O,GAArB,CAAvB;EACA,mBAAOyC,MAAP;EACD,WAHA,EAGE0M,eAHF,CAFL;EAMD;;EACD,WAAOA,eAAP;EACD;;EACDzN,EAAAA,IAAI,CAACI,IAAI,CAACkN,MAAD,CAAL,EAAe,UAAChP,GAAD;EAAA,WAAS+O,SAAS,CAAC/N,GAAD,EAAMhB,GAAN,EAAWgP,MAAM,CAAChP,GAAD,CAAjB,CAAlB;EAAA,GAAf,CAAJ;EACD;EAuBM,IAAMsP,kBAAkB,GAAG,SAArBA,kBAAqB,CAACtO,GAAD,EAA0BuO,QAA1B;EAChC,MAAMC,SAAS,GAAGD,QAAQ,IAAI,EAA9B;EACA,MAAME,GAAG,GAAMD,SAAN,SAAT;EACA,MAAME,KAAK,GAAMF,SAAN,WAAX;EACA,MAAMG,MAAM,GAAMH,SAAN,YAAZ;EACA,MAAMI,IAAI,GAAMJ,SAAN,UAAV;EACA,MAAM/M,MAAM,GAAGsI,KAAK,CAAC/J,GAAD,EAAM,CAACyO,GAAD,EAAMC,KAAN,EAAaC,MAAb,EAAqBC,IAArB,CAAN,CAApB;EACA,SAAO;EACLC,IAAAA,CAAC,EAAE1B,mBAAmB,CAAC1L,MAAM,CAACgN,GAAD,CAAP,CADjB;EAELK,IAAAA,CAAC,EAAE3B,mBAAmB,CAAC1L,MAAM,CAACiN,KAAD,CAAP,CAFjB;EAGLtF,IAAAA,CAAC,EAAE+D,mBAAmB,CAAC1L,MAAM,CAACkN,MAAD,CAAP,CAHjB;EAILI,IAAAA,CAAC,EAAE5B,mBAAmB,CAAC1L,MAAM,CAACmN,IAAD,CAAP;EAJjB,GAAP;EAMD,CAbM;;ECxFP,IAAMtI,SAAO,GAAO;EAClB0I,EAAAA,CAAC,EAAE,CADe;EAElBC,EAAAA,CAAC,EAAE;EAFe,CAApB;EASO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAClP,GAAD;EACjC,MAAMmP,IAAI,GAAGnP,GAAG,GAAGqH,qBAAqB,CAACrH,GAAD,CAAxB,GAAgC,CAAhD;EACA,SAAOmP;AAAI,QACP;EACEH,QAAAA,CAAC,EAAEG,IAAI,CAACP,IAAL,GAAYpP,MAAM,CAAC4P,WADxB;EAEEH,QAAAA,CAAC,EAAEE,IAAI,CAACV,GAAL,GAAWjP,MAAM,CAAC6P;EAFvB;AADO,QAKP/I,SALJ;EAMD,CARM;;ECCA,IAAMgJ,WAAW,GAAG,SAAdA,WAAc,CAAmBC,MAAnB,EAA0DnH,OAA1D;eACSA,OAAO,IAAI;MAArCoH,cAAAA;MAAQC,qBAAAA;;EAChB,MAAIC,MAAM,GAAkBD,aAA5B;;EACA,MAAIE,SAAJ;;EACA,SAAO,UAACC,KAAD,EAAQC,OAAR;EACL,QAAMC,IAAI,GAAGJ,MAAb;EACA,QAAMK,MAAM,GAAGR,MAAM,CAACM,OAAD,EAAUH,MAAV,EAAkBC,SAAlB,CAArB;EACA,QAAMK,OAAO,GAAGJ,KAAK,KAAKJ,MAAM,GAAG,CAACA,MAAM,CAACM,IAAD,EAAOC,MAAP,CAAV,GAA2BD,IAAI,KAAKC,MAA/C,CAArB;;EAEA,QAAIC,OAAJ,EAAa;EACXN,MAAAA,MAAM,GAAGK,MAAT;EACAJ,MAAAA,SAAS,GAAGG,IAAZ;EACD;;EAED,WAAO;EACLJ,MAAAA,MAAM,EAANA,MADK;EAELC,MAAAA,SAAS,EAATA,SAFK;EAGLM,MAAAA,QAAQ,EAAED;EAHL,KAAP;EAKD,GAfD;EAgBD,CApBM;;;;;;;;ECjBP,WAASE,QAAT,GAAoB;EAClBC,IAAAA,cAAA,GAAiBD,QAAQ;QAAGxS,MAAM,CAAC0S,MAAP;QAAiB,UAAUjO,MAAV,EAAkB;EAC7D,aAAK,IAAItB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsL,SAAS,CAACtN,MAA9B,EAAsCgC,CAAC,EAAvC,EAA2C;EACzC,cAAIF,MAAM,GAAGwL,SAAS,CAACtL,CAAD,CAAtB;;EAEA,eAAK,IAAI7B,GAAT,IAAgB2B,MAAhB,EAAwB;EACtB,gBAAIjD,MAAM,CAACC,SAAP,CAAiBE,cAAjB,CAAgCM,IAAhC,CAAqCwC,MAArC,EAA6C3B,GAA7C,CAAJ,EAAuD;EACrDmD,cAAAA,MAAM,CAACnD,GAAD,CAAN,GAAc2B,MAAM,CAAC3B,GAAD,CAApB;EACD;EACF;EACF;;EAED,eAAOmD,MAAP;EACD,OAZD;;EAcA,WAAO+N,QAAQ,CAAC3O,KAAT,CAAe,IAAf,EAAqB4K,SAArB,CAAP;EACD;;EAEDgE,EAAAA,cAAA,GAAiBD,QAAjB;;;MCbQG,YAAcC,KAAdD;EAKR,IAAME,wBAAwB,GAA8B,CAAC,QAAD,EAAW,SAAX,CAA5D;EAMA,IAAMC,oBAAoB,GAAmC,CAAC,SAAD,EAAY,QAAZ,EAAsB,QAAtB,EAAgC,OAAhC,EAAyC,QAAzC,EAAmD,UAAnD,EAA+D,MAA/D,EAAuEnC,MAAvE,CAC3D,UAAC5M,MAAD,EAASR,IAAT;EACEQ,EAAAA,MAAM,CAACR,IAAD,CAAN,GAAesP,wBAAwB,CAAC,CAAD,CAAxB,GAA8BtP,IAA9B,GAAqCsP,wBAAwB,CAAC,CAAD,CAA5E;EACA,SAAO9O,MAAP;EACD,CAJ0D,EAK3D,EAL2D,CAA7D;;EA0BA,IAAMgP,iBAAiB,GAAG,SAApBA,iBAAoB,CACxBrI,OADwB,EAExBsI,QAFwB,EAGxBC,WAHwB,EAIxBC,aAJwB,EAKxBC,QALwB;EAOxB,MAAMC,gBAAgB,GAAwB,EAA9C;;EACA,MAAMC,WAAW,kBAAW3I,OAAX,CAAjB;;EACA,MAAMiB,KAAK,GAAGvI,IAAI,CAAC4P,QAAD,CAAJ,CAAeM,MAAf,CAAsB,UAAC/O,IAAD;EAAA,WAAUpE,gBAAc,CAACuK,OAAD,EAAUnG,IAAV,CAAxB;EAAA,GAAtB,CAAd;EAEAvB,EAAAA,IAAI,CAAC2I,KAAD,EAAQ,UAACpH,IAAD;EACV,QAAMgP,gBAAgB,GAAQnT,WAAW,CAAC6S,WAAW,CAAC1O,IAAD,CAAZ,CAAX,GAAiC,EAAjC,GAAsC0O,WAAW,CAAC1O,IAAD,CAA/E;EACA,QAAMiP,YAAY,GAAQ9I,OAAO,CAACnG,IAAD,CAAjC;EACA,QAAMkP,aAAa,GAA8ET,QAAQ,CAACzO,IAAD,CAAzG;EACA,QAAMmP,iBAAiB,GAAGrS,aAAa,CAACoS,aAAD,CAAvC;EACA,QAAME,UAAU,GAAGR,QAAQ,GAAMA,QAAN,SAAoB,EAA/C;;EAGA,QAAIO,iBAAiB,IAAIrS,aAAa,CAACmS,YAAD,CAAtC,EAAsD;EACpD,UAAMI,eAAe,GAAGb,iBAAiB,CAACS,YAAD,EAAeC,aAAf,EAA6CF,gBAA7C,EAA+DL,aAA/D,EAA8ES,UAAU,GAAGpP,IAA3F,CAAzC;EACA6O,MAAAA,gBAAgB,CAAC7O,IAAD,CAAhB,GAAyBqP,eAAe,CAACC,UAAzC;EACAR,MAAAA,WAAW,CAAC9O,IAAD,CAAX,GAAoBqP,eAAe,CAACE,QAApC;EAEA9Q,MAAAA,IAAI,CAAC,CAACqQ,WAAD,EAAcD,gBAAd,CAAD,EAAkC,UAAC7Q,KAAD;EACpC,YAAI8C,aAAa,CAAC9C,KAAK,CAACgC,IAAD,CAAN,CAAjB,EAAgC;EAC9B,iBAAOhC,KAAK,CAACgC,IAAD,CAAZ;EACD;EACF,OAJG,CAAJ;EAKD,KAVD,MAUO,IAAI,CAACmP,iBAAL,EAAwB;EAC7B,UAAIK,OAAO,GAAG,KAAd;EACA,UAAMC,gBAAgB,GAAkB,EAAxC;EACA,UAAMC,kBAAkB,GAAkB,EAA1C;EACA,UAAMC,gBAAgB,GAAG1T,IAAI,CAACgT,YAAD,CAA7B;EACA,UAAMW,gBAAgB,GAAyC,CAACpT,OAAO,CAAC0S,aAAD,CAAR,GAC3D,CAACA,aAAD,CAD2D,GAE1DA,aAFL;EAIAzQ,MAAAA,IAAI,CAACmR,gBAAD,EAAmB,UAACC,gBAAD;EAErB,YAAIC,UAAJ;EACArR,QAAAA,IAAI,CAAC8P,oBAAD,EAAuB,UAACvQ,KAAD,EAAgBjB,GAAhB;EACzB,cAAIiB,KAAK,KAAK6R,gBAAd,EAAgC;EAC9BC,YAAAA,UAAU,GAAG/S,GAAb;EACD;EACF,SAJG,CAAJ;EAKA,YAAMgT,YAAY,GAAGlU,WAAW,CAACiU,UAAD,CAAhC;;EACA,YAAIC,YAAY,IAAIzT,QAAQ,CAAC2S,YAAD,CAA5B,EAA4C;EAE1C,cAAMe,eAAe,GAAGH,gBAAgB,CAACjK,KAAjB,CAAuB,GAAvB,CAAxB;EACA4J,UAAAA,OAAO,GAAG,CAAC,CAACQ,eAAe,CAACrO,IAAhB,CAAqB,UAACsO,WAAD;EAAA,mBAAiBA,WAAW,KAAKhB,YAAjC;EAAA,WAArB,CAAZ;EAGA/P,UAAAA,IAAI,CAACuQ,gBAAD,EAAmBO,eAAnB,CAAJ;EACD,SAPD,MAOO;EACLR,UAAAA,OAAO,GAAGjB,oBAAoB,CAACoB,gBAAD,CAApB,KAA2CE,gBAArD;EACD;;EAGD3Q,QAAAA,IAAI,CAACwQ,kBAAD,EAAqBK,YAAY,GAAGxB,oBAAoB,CAAC2B,MAAxB,GAAiCJ,UAAlE,CAAJ;EAGA,eAAO,CAACN,OAAR;EACD,OAzBG,CAAJ;;EA2BA,UAAIA,OAAJ,EAAa;EACX,YAAMW,qBAAqB,GAAG3T,OAAO,CAACyS,YAAD,CAAP,IAAyBnS,aAAa,CAACmS,YAAD,CAApE;;EACA,YAAIkB,qBAAqB,GAAG/B,SAAS,CAACa,YAAD,CAAT,KAA4Bb,SAAS,CAACY,gBAAD,CAAxC,GAA6DC,YAAY,KAAKD,gBAAvG,EAAyH;EACvHH,UAAAA,gBAAgB,CAAC7O,IAAD,CAAhB,GAAyBiP,YAAzB;EACD;EACF,OALD,MAKO,IAAIN,aAAJ,EAAmB;EACxByB,QAAAA,OAAO,CAACC,IAAR;;;gBAEmBjB,UAAf;gBAA4BpP,IAA5B;;gBAAsF2P,gBAAgB,CAAChI,WAAjB,EAAtF;;gBAA6IsH,YAA7I;;4CACyBS,kBAAkB,CAACY,IAAnB,CAAwB,IAAxB,EAA8B3I,WAA9B,EADzB,aAFJ;eAIK8H,gBAAgB,CAAC7S,MAAjB,GAA0B,CAA1B,iCAA0D6S,gBAAgB,CAACa,IAAjB,CAAsB,IAAtB,CAA1D,WAA6F,EAJlG;;EAMD;;EAED,aAAOxB,WAAW,CAAC9O,IAAD,CAAlB;EACD;EACF,GAtEG,CAAJ;EAwEA,SAAO;EACLuP,IAAAA,QAAQ,EAAET,WADL;EAELQ,IAAAA,UAAU,EAAET;EAFP,GAAP;EAID,CAvFD;;EA0GA,IAAM0B,eAAe,GAAG,SAAlBA,eAAkB,CACtBpK,OADsB,EAEtBsI,QAFsB,EAGtBC,WAHsB,EAItBC,aAJsB;EAetB,SAAOH,iBAAiB,CAAIrI,OAAJ,EAAasI,QAAb,EAAuBC,WAAW,IAAK,EAAvC,EAAiDC,aAAa,IAAI,KAAlE,CAAxB;EACD,CAhBD;;WCrIgB6B,iBACdC;EAEA,MAAMjR,MAAM,GAAQ;EAClBkR,IAAAA,SAAS,EAAE,EADO;EAElBC,IAAAA,QAAQ,EAAE;EAFQ,GAApB;EAKAlS,EAAAA,IAAI,CAACI,IAAI,CAAC4R,0BAAD,CAAL,EAAmC,UAAC1T,GAAD;EACrC,QAAM2O,GAAG,GAAqE+E,0BAA0B,CAAC1T,GAAD,CAAxG;;EAEA,QAAIP,OAAO,CAACkP,GAAD,CAAX,EAAkB;EAChBlM,MAAAA,MAAM,CAACkR,SAAP,CAAiB3T,GAAjB,IAAwB2O,GAAG,CAAC,CAAD,CAA3B;EACAlM,MAAAA,MAAM,CAACmR,QAAP,CAAgB5T,GAAhB,IAAuB2O,GAAG,CAAC,CAAD,CAA1B;EACD,KAHD,MAGO;EAEL,UAAMkF,SAAS,GAAGJ,gBAAgB,CAAC9E,GAAD,CAAlC;EACAlM,MAAAA,MAAM,CAACkR,SAAP,CAAiB3T,GAAjB,IAAwB6T,SAAS,CAACF,SAAlC;EACAlR,MAAAA,MAAM,CAACmR,QAAP,CAAgB5T,GAAhB,IAAuB6T,SAAS,CAACD,QAAjC;EACD;EACF,GAZG,CAAJ;EAcA,SAAOnR,MAAP;EACD;;ECtCM,IAAMqR,oBAAoB,GAAG,gBAA7B;EACA,IAAMC,+BAA+B,GAAMD,oBAAN,kBAArC;EACA,IAAME,kCAAkC,GAAMD,+BAAN,SAAxC;EAEA,IAAME,aAAa,GAAG,SAAtB;EACA,IAAMC,gBAAgB,GAAG,YAAzB;EACA,IAAMC,iBAAiB,GAAG,aAA1B;EACA,IAAMC,gBAAgB,GAAG,YAAzB;EACA,IAAMC,iCAAiC,GAAMF,iBAAN,sBAAvC;EAEA,IAAMG,qBAAqB,GAAG,kBAA9B;EACA,IAAMC,2BAA2B,GAAMD,qBAAN,YAAjC;EACA,IAAME,6BAA6B,GAAMF,qBAAN,cAAnC;EACA,IAAMG,mCAAmC,GAAMD,6BAAN,YAAzC;EACA,IAAME,iCAAiC,GAAMF,6BAAN,UAAvC;EACA,IAAMG,sCAAsC,GAAMD,iCAAN,WAA5C;EAEA,IAAME,wBAAwB,GAAG,qBAAjC;;ECkBP,IAAIC,mBAAJ;MACQC,MAAeC,KAAfD;IAAKE,QAAUD,KAAVC;;EAEb,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,IAAD,EAAoBC,UAApB;EAC7B9O,EAAAA,cAAc,CAAC6O,IAAD,EAAOC,UAAP,CAAd;EACA,MAAMC,KAAK,GAAGrN,UAAU,CAACoN,UAAD,CAAxB;EACA,MAAME,KAAK,GAAGzN,UAAU,CAACuN,UAAD,CAAxB;EAEA,SAAO;EACLnF,IAAAA,CAAC,EAAEqF,KAAK,CAAC7N,CAAN,GAAU4N,KAAK,CAAC5N,CADd;EAELyI,IAAAA,CAAC,EAAEoF,KAAK,CAAC9N,CAAN,GAAU6N,KAAK,CAAC7N;EAFd,GAAP;EAID,CATD;;EAWA,IAAM+N,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACC,OAAD;EAChC,MAAI9S,MAAM,GAAG,KAAb;EACAgC,EAAAA,QAAQ,CAAC8Q,OAAD,EAAUlB,iCAAV,CAAR;;EACA,MAAI;EACF5R,IAAAA,MAAM;QACJsI,KAAK,CAACwK,OAAD,EAAU,iBAAV,CAAL,KAAsC,MAAtC;QAAgD/U,MAAM,CAAC4O,gBAAP,CAAwBmG,OAAxB,EAAiC,qBAAjC,EAAwDzG,gBAAxD,CAAyE,SAAzE,MAAwF,MAD1I;EAED,GAHD,CAGE,OAAO0G,EAAP,EAAW;;EAEb,SAAO/S,MAAP;EACD,CATD;;EAWA,IAAMgT,oBAAoB,GAAG,SAAvBA,oBAAuB,CAAChQ,SAAD,EAAyBiQ,QAAzB;EAC3B,MAAMC,SAAS,GAAG,QAAlB;EACA5K,EAAAA,KAAK,CAACtF,SAAD,EAAY;EAAEmQ,IAAAA,SAAS,EAAED,SAAb;EAAwBE,IAAAA,SAAS,EAAEF,SAAnC;EAA8CG,IAAAA,SAAS,EAAE;EAAzD,GAAZ,CAAL;EACAtU,EAAAA,UAAU,CAACiE,SAAD,EAAY,CAAZ,CAAV;EAEA,MAAMsQ,YAAY,GAAG7F,mBAAmB,CAACzK,SAAD,CAAxC;EACA,MAAMuQ,WAAW,GAAG9F,mBAAmB,CAACwF,QAAD,CAAvC;EACAlU,EAAAA,UAAU,CAACiE,SAAD,EAAY,CAAC,GAAb,CAAV;EACA,MAAMwQ,sBAAsB,GAAG/F,mBAAmB,CAACwF,QAAD,CAAlD;EACA,SAAO;EAOL7T,IAAAA,CAAC,EAAEkU,YAAY,CAAC/F,CAAb,KAAmBgG,WAAW,CAAChG,CAP7B;EAcLkG,IAAAA,CAAC,EAAEF,WAAW,CAAChG,CAAZ,KAAkBiG,sBAAsB,CAACjG;EAdvC,GAAP;EAgBD,CAzBD;;EA2BA,IAAMmG,cAAc,GAAG,SAAjBA,cAAiB,CAAC1Q,SAAD,EAAyBiQ,QAAzB;EACrBjR,EAAAA,QAAQ,CAACgB,SAAD,EAAYsO,+BAAZ,CAAR;EACA,MAAMqC,mBAAmB,GAAGxO,UAAU,CAACnC,SAAD,CAAtC;EACA,MAAM4Q,aAAa,GAAGzO,UAAU,CAAC8N,QAAD,CAAhC;EACA,MAAMY,WAAW,GAAGhM,OAAO,CAAC+L,aAAD,EAAgBD,mBAAhB,CAA3B;EAEA3R,EAAAA,QAAQ,CAACgB,SAAD,EAAYuO,kCAAZ,CAAR;EACA,MAAMuC,mBAAmB,GAAG3O,UAAU,CAACnC,SAAD,CAAtC;EACA,MAAM+Q,aAAa,GAAG5O,UAAU,CAAC8N,QAAD,CAAhC;EACA,MAAMe,WAAW,GAAGnM,OAAO,CAACkM,aAAD,EAAgBD,mBAAhB,CAA3B;EAEA,SAAOD,WAAW,IAAIG,WAAtB;EACD,CAZD;;EAcA,IAAMC,YAAY,GAAG,SAAfA,YAAe;EAGnB,MAAMC,IAAI,GAAGnW,MAAM,CAACoW,MAAP,CAAcC,UAAd,IAA4B,CAAzC;EAGA,MAAMC,IAAI,GAAGtW,MAAM,CAACoW,MAAP,CAAcG,WAAd,IAA6B,CAA1C;EACA,SAAOvW,MAAM,CAACwW,gBAAP,IAA2BL,IAAI,GAAGG,IAAzC;EACD,CARD;;EAUA,IAAMG,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,MAAD,EAAiBC,MAAjB;EACxB,MAAMC,SAAS,GAAGtC,GAAG,CAACoC,MAAD,CAArB;EACA,MAAMG,SAAS,GAAGvC,GAAG,CAACqC,MAAD,CAArB;EACA,SAAO,EAAEC,SAAS,KAAKC,SAAd,IAA2BD,SAAS,GAAG,CAAZ,KAAkBC,SAA7C,IAA0DD,SAAS,GAAG,CAAZ,KAAkBC,SAA9E,CAAP;EACD,CAJD;;EAMA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB;oBACPvS;MAATmQ,iBAAAA;EACR,MAAMqC,MAAM,GAAGtQ,SAAS,kBAAgB6M,oBAAhB,yBAAxB;EACA,MAAM0D,MAAM,GAAGD,MAAM,CAAC,CAAD,CAArB;EACA,MAAME,WAAW,GAAGD,MAAM,CAACtR,UAA3B;EAEA,MAAMwR,iBAAiB,GAA8B,IAAI3U,GAAJ,EAArD;EACA,MAAM4U,mBAAmB,GAAG1C,sBAAsB,CAACC,IAAD,EAAOsC,MAAP,CAAlD;EACA,MAAMI,yBAAyB,GAAG;EAChC5H,IAAAA,CAAC,EAAE2H,mBAAmB,CAAC3H,CAApB,KAA0B,CADG;EAEhCC,IAAAA,CAAC,EAAE0H,mBAAmB,CAAC1H,CAApB,KAA0B;EAFG,GAAlC;EAKA,MAAM4H,GAAG,GAAgB;EACvBC,IAAAA,eAAe,EAAE,KADM;EAEvBC,IAAAA,oBAAoB,EAAEJ,mBAFC;EAGvBK,IAAAA,0BAA0B,EAAEJ,yBAHL;EAIvBK,IAAAA,uBAAuB,EAAE3C,yBAAyB,CAACkC,MAAD,CAJ3B;EAKvBU,IAAAA,kBAAkB,EAAEzC,oBAAoB,CAAC+B,MAAD,EAASC,WAAT,CALjB;EAMvBU,IAAAA,YAAY,EAAEhC,cAAc,CAACqB,MAAD,EAASC,WAAT,CANL;EAOvBW,IAAAA,YAPuB,wBAOVrP,QAPU;EAQrB2O,MAAAA,iBAAiB,CAAChT,GAAlB,CAAsBqE,QAAtB;EACD,KATsB;EAUvBsP,IAAAA,eAVuB,2BAUPtP,QAVO;EAWrB2O,MAAAA,iBAAiB,CAACY,MAAlB,CAAyBvP,QAAzB;EACD;EAZsB,GAAzB;EAeAzH,EAAAA,UAAU,CAACkW,MAAD,EAAS,OAAT,CAAV;EACAlW,EAAAA,UAAU,CAACkW,MAAD,EAAS,OAAT,CAAV;EACA/Q,EAAAA,cAAc,CAAC+Q,MAAD,CAAd;;EAEA,MAAI,CAACI,yBAAyB,CAAC5H,CAA3B,IAAgC,CAAC4H,yBAAyB,CAAC3H,CAA/D,EAAkE;EAChE,QAAIsI,IAAI,GAAG9Q,UAAU,EAArB;EACA,QAAI+Q,GAAG,GAAG9B,YAAY,EAAtB;EACA,QAAI+B,aAAa,GAAGd,mBAApB;EAEAnX,IAAAA,MAAM,CAACgI,gBAAP,CAAwB,QAAxB,EAAkC;EAChC,UAAIkP,iBAAiB,CAACa,IAAtB,EAA4B;EAC1B,YAAMG,OAAO,GAAGjR,UAAU,EAA1B;EACA,YAAMkR,SAAS,GAAG;EAChBpR,UAAAA,CAAC,EAAEmR,OAAO,CAACnR,CAAR,GAAYgR,IAAI,CAAChR,CADJ;EAEhBC,UAAAA,CAAC,EAAEkR,OAAO,CAAClR,CAAR,GAAY+Q,IAAI,CAAC/Q;EAFJ,SAAlB;EAKA,YAAImR,SAAS,CAACpR,CAAV,KAAgB,CAAhB,IAAqBoR,SAAS,CAACnR,CAAV,KAAgB,CAAzC,EAA4C;EAE5C,YAAMoR,YAAY,GAAG;EACnBrR,UAAAA,CAAC,EAAEuN,GAAG,CAAC6D,SAAS,CAACpR,CAAX,CADa;EAEnBC,UAAAA,CAAC,EAAEsN,GAAG,CAAC6D,SAAS,CAACnR,CAAX;EAFa,SAArB;EAIA,YAAMqR,aAAa,GAAG;EACpBtR,UAAAA,CAAC,EAAEuN,GAAG,CAACE,KAAK,CAAC0D,OAAO,CAACnR,CAAR,IAAagR,IAAI,CAAChR,CAAL,GAAS,KAAtB,CAAD,CAAN,CADc;EAEpBC,UAAAA,CAAC,EAAEsN,GAAG,CAACE,KAAK,CAAC0D,OAAO,CAAClR,CAAR,IAAa+Q,IAAI,CAAC/Q,CAAL,GAAS,KAAtB,CAAD,CAAN;EAFc,SAAtB;EAIA,YAAMsR,MAAM,GAAGpC,YAAY,EAA3B;EACA,YAAMqC,aAAa,GAAGH,YAAY,CAACrR,CAAb,GAAiB,CAAjB,IAAsBqR,YAAY,CAACpR,CAAb,GAAiB,CAA7D;EACA,YAAMwR,UAAU,GAAG,CAAC/B,iBAAiB,CAAC4B,aAAa,CAACtR,CAAf,EAAkBsR,aAAa,CAACrR,CAAhC,CAArC;EACA,YAAMyR,UAAU,GAAGH,MAAM,KAAKN,GAAX,IAAkBA,GAAG,GAAG,CAA3C;EACA,YAAMU,MAAM,GAAGH,aAAa,IAAIC,UAAjB,IAA+BC,UAA9C;;EAEA,YAAIC,MAAJ,EAAY;EACV,cAAMC,gBAAgB,IAAItE,mBAAmB,CAACkD,oBAApB,GAA2C9C,sBAAsB,CAACC,IAAD,EAAOsC,MAAP,EAA3F;EACA/Q,UAAAA,cAAc,CAAC+Q,MAAD,CAAd;;EAEA,cAAIiB,aAAa,CAACzI,CAAd,KAAoBmJ,gBAAgB,CAACnJ,CAArC,IAA0CyI,aAAa,CAACxI,CAAd,KAAoBkJ,gBAAgB,CAAClJ,CAAnF,EAAsF;EACpFtN,YAAAA,OAAO,CAAC+U,iBAAD,CAAP;EACD;;EAEDe,UAAAA,aAAa,GAAGU,gBAAhB;EACD;;EAEDZ,QAAAA,IAAI,GAAGG,OAAP;EACAF,QAAAA,GAAG,GAAGM,MAAN;EACD;EACF,KAtCD;EAuCD;;EAED,SAAOjB,GAAP;EACD,CA/ED;;EAiFO,IAAMuB,cAAc,GAAG,SAAjBA,cAAiB;EAC5B,MAAI,CAACvE,mBAAL,EAA0B;EACxBA,IAAAA,mBAAmB,GAAGyC,iBAAiB,EAAvC;EACD;;EACD,SAAOzC,mBAAP;EACD,CALM;;EClKP,IAAMwE,aAAa,GAAG,SAAhBA,aAAgB,CAAIta,GAAJ,EAAcua,IAAd;EAAA;MACpBva,GAAG;MAAIua,IAAI,CAACzQ,KAAL,CAAW,GAAX,EAAgBwG,MAAhB,CAAuB,UAACkK,CAAD,EAAItW,IAAJ;EAAA,aAAcsW,CAAC,IAAI1a,gBAAc,CAAC0a,CAAD,EAAItW,IAAJ,CAAnB,GAA+BsW,CAAC,CAACtW,IAAD,CAAhC,GAAyCjE,SAAvD;EAAA,KAAvB,EAA0FD,GAA1F;KADa;EAAA,CAAtB;;EASO,IAAMya,mBAAmB,GAAG,SAAtBA,mBAAsB,CACjCC,0BADiC,EAEjCC,cAFiC,EAGjCC,cAHiC;4BAKgClG,gBAAgB,CAAcgG,0BAAd;MAA9DG,oCAAXjG;MAAsCkG,mCAAVjG;;EACpC,MAAMxK,OAAO,GAAgBlG,UAAU,CACrC,EADqC,EAErC2W,cAFqC,EAGrCrG,eAAe,CAAIkG,cAAc,IAAK,EAAvB,EAAiCE,eAAjC,EAAkD,IAAlD,EAAwD,IAAxD,CAAf,CAA6ErH,UAHxC,CAAvC;;EAMA,MAAMhC,MAAM,GAAG,SAATA,MAAS,CAACuJ,KAAD;UACLC,SAA4BD,MAA5BC;QAAQC,kBAAoBF,MAApBE;;EAChB,QAAMC,WAAW,GAAyB,SAApCA,WAAoC,CAACX,IAAD;EAAA,aAAW;EACnD5I,QAAAA,MAAM,EAAE2I,aAAa,CAACjQ,OAAD,EAAUkQ,IAAV,CAD8B;EAEnDrI,QAAAA,QAAQ,EAAE8I,MAAM,IAAIV,aAAa,CAACW,eAAD,EAAkBV,IAAlB,CAAb,KAAyCta;EAFV,OAAX;EAAA,KAA1C;;EAIA2a,IAAAA,cAAc,CAAC,CAAC,CAACI,MAAH,EAAWE,WAAX,CAAd;EACD,GAPD;;EASA1J,EAAAA,MAAM,CAAC;EAAEwJ,IAAAA,MAAM,EAAE;EAAV,GAAD,CAAN;EAEA,SAAO;EACLnG,IAAAA,QADK,oBACIsG,UADJ;EAEH,UAAIA,UAAJ,EAAgB;EAAA,+BAC0B1G,eAAe,CAAC0G,UAAD,EAAaN,eAAb,EAA8BxQ,OAA9B,EAAuC,IAAvC,CADzC;EAAA,UACM4Q,eADN,oBACNzH,UADM;;EAGd,YAAI,CAACxO,aAAa,CAACiW,eAAD,CAAlB,EAAqC;EACnC9W,UAAAA,UAAU,CAACkG,OAAD,EAAU4Q,eAAV,CAAV;EACAzJ,UAAAA,MAAM,CAAC;EAAEyJ,YAAAA,eAAe,EAAfA;EAAF,WAAD,CAAN;EACD;EACF;;EACD,aAAO5Q,OAAP;EACD,KAXI;EAYL+Q,IAAAA,OAAO,EAAE,iBAACJ,MAAD;EACPxJ,MAAAA,MAAM,CAAC;EAAEwJ,QAAAA,MAAM,EAANA;EAAF,OAAD,CAAN;EACD;EAdI,GAAP;EAgBD,CAvCM;;ECdP,IAAMK,6BAA6B,GAA2C,6CAA9E;EACA,IAAMX,0BAA0B,GAAoE;EAClGY,EAAAA,eAAe,EAAE,CAAC,KAAD,EAAQC,oBAAM,CAACC,OAAf,CADiF;EAElGC,EAAAA,gBAAgB,EAAE;EAChBxK,IAAAA,CAAC,EAAE,CAAC,QAAD,EAAWoK,6BAAX,CADa;EAEhBnK,IAAAA,CAAC,EAAE,CAAC,QAAD,EAAWmK,6BAAX;EAFa;EAFgF,CAApG;EAQA,IAAMK,YAAY,GAAGrP,WAAW,CAAC,mBAAD,CAAhC;EACA,IAAMsP,YAAY,GAAGtP,WAAW,CAAC,mBAAD,CAAhC;EAEO,IAAMuP,wBAAwB,GAAG,SAA3BA,wBAA2B,CACtCxX,MADsC,EAEtCuW,cAFsC;QAI9BkB,OAAiDzX,OAAjDyX;MAAeC,aAAkC1X,OAA3C2X;MAAqBC,WAAsB5X,OAAtB4X;MAAUC,UAAY7X,OAAZ6X;EAC7C,MAAMC,WAAW,GAAkB,EAAnC;EACA,MAAMpD,GAAG,GAAgBuB,cAAc,EAAvC;EACA,MAAM8B,kBAAkB,GAAGrD,GAAG,CAACG,0BAA/B;EACA,MAAMmD,wBAAwB,GAAGtD,GAAG,CAACI,uBAArC;EACA,MAAMmD,kBAAkB,GAAGvD,GAAG,CAACM,YAA/B;EAEA,MAAMkD,yBAAyB,IAAIZ,YAAY,IAAIC,aAAjB,IAAkCS,wBAAlC,IAA8DD,kBAAkB,CAACjL,CAAnH;EAEA,MAAMqL,kBAAkB,GAAGhL,WAAW;MAAC;EAAA,aAAMhB,kBAAkB,CAACsL,IAAD,EAAO,SAAP,CAAxB;EAAA,KAAD;MAA4C;EAAEpK,MAAAA,MAAM,EAAEhG;EAAV;IAA5C,CAAtC;EACA,MAAM+Q,yBAAyB,GAAGjL,WAAW;MAC3C,UAACkL,GAAD;EAAA,aAAU;EACRxL,QAAAA,CAAC,EAAE+E,IAAI,CAAC0G,GAAL,CAAS,CAAT,EAAY1G,IAAI,CAACC,KAAL,CAAW,CAACwG,GAAI,CAACE,kBAAL,CAAwBnU,CAAxB,GAA4BiU,GAAI,CAACG,aAAL,CAAmBpU,CAAhD,IAAqD,GAAhE,IAAuE,GAAnF,CADK;EAER0I,QAAAA,CAAC,EAAE8E,IAAI,CAAC0G,GAAL,CAAS,CAAT,EAAY1G,IAAI,CAACC,KAAL,CAAW,CAACwG,GAAI,CAACE,kBAAL,CAAwBlU,CAAxB,GAA4BgU,GAAI,CAACG,aAAL,CAAmBnU,CAAhD,IAAqD,GAAhE,IAAuE,GAAnF;EAFK,OAAV;EAAA,KAD2C;MAK3C;EAAEgJ,MAAAA,MAAM,EAAEjG;EAAV;IAL2C,CAA7C;;+BAQ8BiP,mBAAmB,CAA4BC,0BAA5B,EAAwDC,cAAxD,EAAwE,UAAC9I,KAAD,EAAQqJ,WAAR;2BACjDA,WAAW,CAAC,iBAAD;UAAjEI,+BAAR3J;UAAmCkL,sCAAV3K;;kCACqBqK,kBAAkB,CAAC1K,KAAD;UAAxDkK,8BAARpK;UAA2BmL,qCAAV5K;;EAEzB,UAAI2K,sBAAsB,IAAIC,cAA9B,EAA8C;EAC5C,YAAMC,YAAY,GAAS;EACzBjM,UAAAA,CAAC,EAAE,CADsB;EAEzBC,UAAAA,CAAC,EAAE,CAFsB;EAGzB1F,UAAAA,CAAC,EAAE,CAHsB;EAIzB2F,UAAAA,CAAC,EAAE;EAJsB,SAA3B;;EAOA,YAAI,CAACsK,eAAL,EAAsB;EACpByB,UAAAA,YAAY,CAACjM,CAAb,GAAiB,CAACiL,OAAQ,CAACjL,CAA3B;EACAiM,UAAAA,YAAY,CAAChM,CAAb,GAAiB,EAAEgL,OAAQ,CAAChL,CAAT,GAAagL,OAAQ,CAAC/K,CAAxB,CAAjB;EACA+L,UAAAA,YAAY,CAAC1R,CAAb,GAAiB,EAAE0Q,OAAQ,CAAC1Q,CAAT,GAAa0Q,OAAQ,CAACjL,CAAxB,CAAjB;EACAiM,UAAAA,YAAY,CAAC/L,CAAb,GAAiB,CAAC+K,OAAQ,CAAC/K,CAA3B;EACD;;EAEDhF,QAAAA,KAAK,CAAC8P,UAAD,EAAa;EAChBpL,UAAAA,GAAG,EAAEqM,YAAY,CAACjM,CADF;EAEhBD,UAAAA,IAAI,EAAEkM,YAAY,CAAC/L,CAFH;EAGhB,0BAAgB+L,YAAY,CAAChM,CAHb;EAIhB,2BAAiBgM,YAAY,CAAC1R,CAJd;EAKhB,wCAA4B0R,YAAY,CAAChM,CAAb,GAAiB,CAAC,CAA9C;EALgB,SAAb,CAAL;EAOD;;EAED,UAAMiM,kBAAkB,GAAGnU,UAAU,CAACiT,UAAD,CAArC;EACA,UAAMmB,iBAAiB,GAAGpU,UAAU,CAACoT,OAAD,CAApC;EACA,UAAMiB,iBAAiB,GAAG/T,UAAU,CAAC8S,OAAD,CAApC;EACA,UAAMkB,kBAAkB,GAAGX,yBAAyB,CAAC3K,KAAD,EAAQ;EAC1D8K,QAAAA,kBAAkB,EAAEO,iBADsC;EAE1DN,QAAAA,aAAa,EAAE;EACbpU,UAAAA,CAAC,EAAEwU,kBAAkB,CAACxU,CAAnB,GAAuBwN,IAAI,CAAC0G,GAAL,CAAS,CAAT,EAAYO,iBAAiB,CAACzU,CAAlB,GAAsB0U,iBAAiB,CAAC1U,CAApD,CADb;EAEbC,UAAAA,CAAC,EAAEuU,kBAAkB,CAACvU,CAAnB,GAAuBuN,IAAI,CAAC0G,GAAL,CAAS,CAAT,EAAYO,iBAAiB,CAACxU,CAAlB,GAAsByU,iBAAiB,CAACzU,CAApD;EAFb;EAF2C,OAAR,CAApD;YAOgB2U,iBAAoDD,mBAA5DxL;UAAkC0L,wBAA0BF,mBAApCjL;EAEhCoC,MAAAA,OAAO,CAACgJ,GAAR,CAAY,gBAAZ,EAA8BF,cAA9B;EACA9I,MAAAA,OAAO,CAACgJ,GAAR,CAAY,uBAAZ,EAAqCD,qBAArC;EAuCD,KAhFgD;MAAzCxI,gCAAAA;MAAUuG,+BAAAA;;EAkFlB,MAAMmC,aAAa,GAAG,SAAhBA,aAAgB;EACpBnC,IAAAA,OAAO;EACR,GAFD;;EAGA,MAAMoC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,cAAD,EAA0BC,oBAA1B;UACfxL,WAAqBwL,qBAArBxL;QAAUP,SAAW+L,qBAAX/L;;EAClB,QAAIO,QAAJ,EAAc;EACZlG,MAAAA,KAAK,CAACiQ,OAAD,EAAU;EAAE0B,QAAAA,MAAM,EAAEhM,MAAM,GAAG,MAAH,GAAY;EAA5B,OAAV,CAAL;EACD;EACF,GALD;;EAOA,SAAO;EACLkD,IAAAA,QAAQ,EAARA,QADK;EAELuG,IAAAA,OAAO,EAAPA,OAFK;EAGLwC,IAAAA,cAAc,EAAEL,aAHX;EAILM,IAAAA,iBAAiB,EAAEL,gBAJd;EAKLM,IAAAA,SALK;EAMHla,MAAAA,OAAO,CAACsY,WAAD,CAAP;EACD;EAPI,GAAP;EASD,CA3HM;;ECTP,IAAM6B,uBAAuB,GAAG,gBAAhC;EACA,IAAMC,eAAe,GAAG,QAAxB;EACA,IAAMC,YAAY,GAAG,OAArB;;EACA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACjc,GAAD;EAAA,SAAoC+J,KAAK,CAAC/J,GAAD,EAAM,WAAN,CAAzC;EAAA,CAArB;;EAGO,IAAMkc,kBAAkB,GAAG,SAArBA,kBAAqB,CAChC/Z,MADgC,EAEhCga,qBAFgC,EAGhC/T,OAHgC;eAKmCA,OAAO,IAAI;6BAAtEgU;MAAYtH,yCAAY;0BAAOuH;MAASC,mCAAS;;EACzD,MAAMC,iBAAiB,GAAGnE,cAAc,GAAGlB,kBAA3C;;EACA,MAAMsF,YAAY,GAAGvW,SAAS,kBAAgBqN,qBAAhB,sBAAsDE,6BAAtD,oBAA9B;EACA,MAAMiJ,YAAY,GAAGD,YAAY,CAAC,CAAD,CAAjC;EACA,MAAME,eAAe,GAAGD,YAAY,CAACvX,UAArC;;EACA,MAAMyX,0BAA0B,GAAG,SAA7BA,0BAA6B,CAACC,cAAD;EACjC,QAAI9H,SAAJ,EAAe;EACb,UAAM+H,GAAG,GAAGZ,YAAY,CAACQ,YAAD,CAAZ,KAA+B,KAA3C;EACAjc,MAAAA,UAAU,CAACic,YAAD,EAAeI,GAAG,IAAIN,iBAAiB,CAACrH,CAAlB,GAAsB,CAAC8G,YAAvB,GAAsCO,iBAAiB,CAAC1b,CAAlB,GAAsB,CAAtB,GAA0Bmb,aAApE,GAAoFA,YAAtG,CAAV;EACAvb,MAAAA,SAAS,CAACgc,YAAD,EAAeT,YAAf,CAAT;EACD;;EACDG,IAAAA,qBAAqB,CAAC5d,QAAQ,CAAC,CAACqe,cAAc,IAAI,EAAnB,EAAuBlN,MAAxB,CAAR,GAA0CkN,cAA1C,GAA2D5e,SAA5D,CAArB;EACD,GAPD;;EAQA,MAAM2K,YAAY,GAAmB,EAArC;EACA,MAAImU,cAAc,GAAmCR,MAAM,GAAGK,0BAAH,GAAgC,IAA3F;;EAEA,MAAI7R,yBAAJ,EAA+B;EAC7B,QAAMiS,sBAAsB,GAAG,IAAIjS,yBAAJ,CAA8B6R,0BAA9B,CAA/B;EACAI,IAAAA,sBAAsB,CAACC,OAAvB,CAA+BN,eAA/B;EACAvb,IAAAA,IAAI,CAACwH,YAAD,EAAe;EAAA,aAAMoU,sBAAsB,CAACE,UAAvB,EAAN;EAAA,KAAf,CAAJ;EACD,GAJD,MAIO;EACL,QAAMC,uBAAuB,GAAGjX,SAAS;;UACxByN,iCADwB;;UACoCA,iCADpC;;UACsFC,sCADtF;;UACyJD,iCADzJ;;UAC2MC,sCAD3M;;OAAzC;EAGAtO,IAAAA,cAAc,CAACqX,eAAD,EAAkBQ,uBAAlB,CAAd;EACAzZ,IAAAA,QAAQ,CAACiZ,eAAD,EAAkBjJ,mCAAlB,CAAR;EACA,QAAM0J,2BAA2B,GAAGD,uBAAuB,CAAC,CAAD,CAA3D;EACA,QAAME,aAAa,GAAGD,2BAA2B,CAACE,SAAlD;EACA,QAAMC,aAAa,GAAGH,2BAA2B,CAACjY,UAAlD;EACA,QAAMqY,kBAAkB,GAAGD,aAAH,oBAAGA,aAAa,CAAEpY,UAA1C;EAEA,QAAIsY,SAAS,GAAG5W,UAAU,CAAC8V,eAAD,CAA1B;EACA,QAAIe,QAAQ,GAAGD,SAAf;EACA,QAAIE,OAAO,GAAG,KAAd;EACA,QAAIC,KAAJ;;EAEA,QAAMC,KAAK,GAAG,SAARA,KAAQ;EACZpd,MAAAA,UAAU,CAAC8c,aAAD,EAAgBtB,YAAhB,CAAV;EACAvb,MAAAA,SAAS,CAAC6c,aAAD,EAAgBtB,YAAhB,CAAT;EACAxb,MAAAA,UAAU,CAAC4c,aAAD,EAAgBpB,YAAhB,CAAV;EACAvb,MAAAA,SAAS,CAAC2c,aAAD,EAAgBpB,YAAhB,CAAT;EACD,KALD;;EAMA,QAAM6B,SAAS,GAAG,SAAZA,SAAY;EAChBF,MAAAA,KAAK,GAAG,CAAR;;EACA,UAAID,OAAJ,EAAa;EACXF,QAAAA,SAAS,GAAGC,QAAZ;EACAd,QAAAA,0BAA0B;EAC3B;EACF,KAND;;EAOA,QAAMmB,QAAQ,GAAG,SAAXA,QAAW,CAACC,WAAD;EACfN,MAAAA,QAAQ,GAAG7W,UAAU,CAAC8V,eAAD,CAArB;EACAgB,MAAAA,OAAO,GAAG,CAACK,WAAD,IAAgB,CAACzU,OAAO,CAACmU,QAAD,EAAWD,SAAX,CAAlC;;EAEA,UAAIO,WAAW,IAAIL,OAAf,IAA0B,CAACC,KAA/B,EAAsC;EACpC5S,QAAAA,GAAI,CAAC4S,KAAD,CAAJ;EACAA,QAAAA,KAAK,GAAG3S,GAAI,CAAC6S,SAAD,CAAZ;EACD,OAHD,MAGO,IAAI,CAACE,WAAL,EAAkB;EACvBF,QAAAA,SAAS;EACV;;EAEDD,MAAAA,KAAK;;EAEL,UAAIG,WAAJ,EAAiB;EACf9U,QAAAA,cAAc,CAAC8U,WAAD,CAAd;EACA/U,QAAAA,eAAe,CAAC+U,WAAD,CAAf;EACD;;EACD,aAAO,KAAP;EACD,KAlBD;;EAoBA5c,IAAAA,IAAI,CAACwH,YAAD,EAAe,CAACR,EAAE,CAACmV,aAAD,EAAgBvB,eAAhB,EAAiC+B,QAAjC,CAAH,EAA+C3V,EAAE,CAACiV,aAAD,EAAgBrB,eAAhB,EAAiC+B,QAAjC,CAAjD,CAAf,CAAJ;EAGA/T,IAAAA,KAAK,CAACwT,kBAAD,EAAqB;EACxBS,MAAAA,KAAK,EAAEhC,YADiB;EAExBN,MAAAA,MAAM,EAAEM;EAFgB,KAArB,CAAL;EAIA4B,IAAAA,KAAK;EACLd,IAAAA,cAAc,GAAGR;AAAM,UAAG;EAAA,iBAAMwB,QAAQ,EAAd;EAAA;AAAH,UAAsBF,KAA7C;EACD;;EAED,MAAI9I,SAAJ,EAAe;EACb,QAAMmJ,oBAAoB,GAAG3O,WAAW,CAAC;EAAA,aAAM2M,YAAY,CAACQ,YAAD,CAAlB;EAAA,KAAD,CAAxC;EACAtb,IAAAA,IAAI;QACFwH,YADE;QAEFR,EAAE,CAACsU,YAAD,EAAeV,eAAf,EAAgC,UAACmC,KAAD;EAChC,YAAMtB,cAAc,GAAGqB,oBAAoB,EAA3C;cACQvO,SAAqBkN,eAArBlN;YAAQO,WAAa2M,eAAb3M;;EAChB,YAAIA,QAAJ,EAAc;EACZ,cAAIP,MAAM,KAAK,KAAf,EAAsB;EACpB3F,YAAAA,KAAK,CAAC2S,eAAD,EAAkB;EAAE9N,cAAAA,IAAI,EAAE,MAAR;EAAgBF,cAAAA,KAAK,EAAE;EAAvB,aAAlB,CAAL;EACD,WAFD,MAEO;EACL3E,YAAAA,KAAK,CAAC2S,eAAD,EAAkB;EAAE9N,cAAAA,IAAI,EAAE,CAAR;EAAWF,cAAAA,KAAK,EAAE;EAAlB,aAAlB,CAAL;EACD;;EACDiO,UAAAA,0BAA0B,CAACC,cAAD,CAA1B;EACD;;EAED3T,QAAAA,cAAc,CAACiV,KAAD,CAAd;EACAlV,QAAAA,eAAe,CAACkV,KAAD,CAAf;EACA,eAAO,KAAP;EACD,OAfC;MAFA,CAAJ;EAmBD;;EAGD,MAAIpB,cAAJ,EAAoB;EAClBrZ,IAAAA,QAAQ,CAACgZ,YAAD,EAAelJ,2BAAf,CAAR;EACApS,IAAAA,IAAI,CAACwH,YAAD,EAAeR,EAAE,CAACsU,YAAD,EAAeX,uBAAf,EAAwCgB,cAAxC,CAAjB,CAAJ;EACD;;EAEDtX,EAAAA,eAAe,CAACrD,MAAD,EAASsa,YAAT,CAAf;EAEA,SAAO;EACL9a,IAAAA,OAAO,CAACgH,YAAD,CAAP;EACAlD,IAAAA,cAAc,CAACgX,YAAD,CAAd;EACD,GAHD;EAID,CAxHM;;ECzBA,IAAM0B,qBAAqB,GAAG,SAAxBA,qBAAwB,CACnChc,MADmC,EAEnCic,wBAFmC;EAInC,MAAMC,eAAe,GAAGpY,SAAS,kBAAgB2N,wBAAhB,cAAT,CAA6D,CAA7D,CAAxB;EACA,MAAMjL,YAAY,GAAmB,EAArC;EACA,MAAM2V,0BAA0B,GAAGhP,WAAW;MAC5C,UAACiP,aAAD;EAAA,aACGA,aAA6B,CAAC/X,CAA9B,KAAoC,CAApC,IACA+X,aAA4C,CAACC,cAD7C,IAEAD,aAA4C,CAACE,iBAA7C,GAAiE,CAHpE;EAAA,KAD4C;MAK5C;EACEhP,MAAAA,aAAa,EAAE;EADjB;IAL4C,CAA9C;;EAUA,MAAI5E,+BAAJ,EAAqC;EACnC,QAAM6T,4BAA4B,GAAyB,IAAI7T,+BAAJ;QACzD,UAAC8T,OAAD;EACE,YAAIA,OAAO,IAAIA,OAAO,CAAC9f,MAAR,GAAiB,CAAhC,EAAmC;EACjC,cAAM+f,IAAI,GAAGD,OAAO,CAACE,GAAR,EAAb;;EACA,cAAID,IAAJ,EAAU;EACR,gBAAMnD,oBAAoB,GAAG6C,0BAA0B,CAAC,CAAD,EAAIM,IAAJ,CAAvD;;EAEA,gBAAInD,oBAAoB,CAACxL,QAAzB,EAAmC;EACjCmO,cAAAA,wBAAwB,CAAC,KAAD,EAAQ3C,oBAAR,CAAxB;EACD;EACF;EACF;EACF,OAZwD;QAazD;EAAEqD,QAAAA,IAAI,EAAE3c;EAAR;MAbyD,CAA3D;EAeAuc,IAAAA,4BAA4B,CAAC1B,OAA7B,CAAqCqB,eAArC;EACAld,IAAAA,IAAI,CAACwH,YAAD,EAAe;EAAA,aAAM+V,4BAA4B,CAACzB,UAA7B,EAAN;EAAA,KAAf,CAAJ;EACD,GAlBD,MAkBO;EACL9b,IAAAA,IAAI;QACFwH,YADE;QAEFuT,kBAAkB,CAACmC,eAAD,EAAkB;EAClC,YAAMU,OAAO,GAAGnY,UAAU,CAACyX,eAAD,CAA1B;EACA,YAAM5C,oBAAoB,GAAG6C,0BAA0B,CAAC,CAAD,EAAIS,OAAJ,CAAvD;;EAEA,YAAItD,oBAAoB,CAACxL,QAAzB,EAAmC;EACjCmO,UAAAA,wBAAwB,CAAC,KAAD,EAAQ3C,oBAAR,CAAxB;EACD;EACF,OAPiB;MAFhB,CAAJ;EAWD;;EAEDjW,EAAAA,eAAe,CAACrD,MAAD,EAASkc,eAAT,CAAf;EAEA,SAAO;EACL1c,IAAAA,OAAO,CAACgH,YAAD,CAAP;EACAlD,IAAAA,cAAc,CAAC4Y,eAAD,CAAd;EACD,GAHD;EAID,CAtDM;;ECyCP,IAAMW,wBAAwB,GAAG,SAA3BA,wBAA2B,CAC/B7c,MAD+B,EAE/B8c,kBAF+B,EAG/BC,GAH+B,EAI/Bte,QAJ+B;EAM/B,MAAIue,qBAAJ;;EACA,MAAMC,QAAQ,GAAG,SAAXA,QAAW,CAACpf,GAAD,EAAYiI,SAAZ;EACf,QAAMoX,KAAK,GAAGH,GAAG,CAACxX,GAAJ,CAAQ1H,GAAR,CAAd;EACA,QAAMsf,QAAQ,GAAGxhB,WAAW,CAACuhB,KAAD,CAA5B;;EACA,QAAME,aAAa,GAAG,SAAhBA,aAAgB;EACpBL,MAAAA,GAAG,CAACtT,GAAJ,CAAQ5L,GAAR,EAAaiI,SAAb;EACAE,MAAAA,EAAE,CAACnI,GAAD,EAAMiI,SAAN,EAAiBrH,QAAjB,CAAF;EACD,KAHD;;EAKA,QAAI,CAAC0e,QAAD,IAAarX,SAAS,KAAKoX,KAA/B,EAAsC;EACpCvX,MAAAA,GAAG,CAAC9H,GAAD,EAAMqf,KAAN,EAAcze,QAAd,CAAH;EACA2e,MAAAA,aAAa;EACd,KAHD,MAGO,IAAID,QAAJ,EAAc;EACnBC,MAAAA,aAAa;EACd;EACF,GAdD;;EAeA,MAAMC,QAAQ,GAAG,SAAXA,QAAW;EACfN,IAAAA,GAAG,CAACld,OAAJ,CAAY,UAACiG,SAAD,EAAoBjI,GAApB;EACV8H,MAAAA,GAAG,CAAC9H,GAAD,EAAMiI,SAAN,EAAiBrH,QAAjB,CAAH;EACD,KAFD;EAGAse,IAAAA,GAAG,CAACO,KAAJ;EACD,GALD;;EAMA,MAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,WAAD;EACtB,QAAIR,qBAAJ,EAA2B;EACzB,UAAMS,YAAY,GAAGT,qBAAqB,CAAC9Q,MAAtB,CAAsD,UAACrN,GAAD,EAAMC,IAAN;EACzE,YAAIA,IAAJ,EAAU;EACR,cAAM4C,QAAQ,GAAG5C,IAAI,CAAC,CAAD,CAArB;EACA,cAAMgH,SAAS,GAAGhH,IAAI,CAAC,CAAD,CAAtB;EACA,cAAM4e,QAAQ,GAAG5X,SAAS,IAAIpE,QAAb,KAA0B8b,WAAW,GAAGA,WAAW,CAAC9b,QAAD,CAAd,GAA2BD,IAAI,CAACC,QAAD,EAAW1B,MAAX,CAApE,CAAjB;;EAEA,cAAI0d,QAAJ,EAAc;EACZ1e,YAAAA,IAAI,CAACH,GAAD,EAAM,CAAC6e,QAAD,EAAWrhB,UAAU,CAACyJ,SAAD,CAAV,GAAwBA,SAAS,CAAC4X,QAAD,CAAjC,GAA8C5X,SAAzD,CAAN,EAA4E,IAA5E,CAAJ;EACD;EACF;;EACD,eAAOjH,GAAP;EACD,OAXoB,EAWlB,EAXkB,CAArB;EAaAN,MAAAA,IAAI,CAACkf,YAAD,EAAe,UAAC3e,IAAD;EACjB,YAAM4e,QAAQ,GAAG5e,IAAI,CAAC,CAAD,CAArB;EACA,YAAMgH,SAAS,GAAGhH,IAAI,CAAC,CAAD,CAAtB;EAEAP,QAAAA,IAAI,CAACmf,QAAD,EAAW,UAAC7f,GAAD;EACbof,UAAAA,QAAQ,CAACpf,GAAD,EAAMiI,SAAN,CAAR;EACD,SAFG,CAAJ;EAGD,OAPG,CAAJ;EAQD;EACF,GAxBD;;EAyBA,MAAMkR,OAAO,GAAG,SAAVA,OAAU,CAAC2G,qBAAD;EACdX,IAAAA,qBAAqB,GAAGW,qBAAxB;;EACAN,IAAAA,QAAQ;;EACRE,IAAAA,eAAe;EAChB,GAJD;;EAMA,MAAIT,kBAAJ,EAAwB;EACtB9F,IAAAA,OAAO,CAAC8F,kBAAD,CAAP;EACD;;EAED,SAAO;EACLO,IAAAA,QAAQ,EAARA,QADK;EAELE,IAAAA,eAAe,EAAfA,eAFK;EAGLvG,IAAAA,OAAO,EAAPA;EAHK,GAAP;EAKD,CApED;;EAsEO,IAAM4G,iBAAiB,GAAG,SAApBA,iBAAoB,CAC/B5d,MAD+B,EAE/BvB,QAF+B,EAG/BwH,OAH+B;EAK/B,MAAI4X,WAAW,GAAG,KAAlB;;eASI5X,OAAO,IAAI;MAPb6X,uBAAAA;MACAC,mBAAAA;MACAC,gCAAAA;MACAC,2BAAAA;MACAC,6BAAAA;MACyBC,2BAAzBC;MACAC,4BAAAA;;gCAMExB,wBAAwB;QAC1B7c,MAD0B;QAE1B8d,eAAe,IAAIG,mBAFO;QAG1B,IAAIK,GAAJ,EAH0B;QAI1BvV,QAAQ,CAAC;EACP,YAAI8U,WAAJ,EAAiB;EACfpf,UAAAA,QAAQ,CAAC,EAAD,EAAK,KAAL,EAAY,IAAZ,CAAR;EACD;EACF,OAJO,EAIL,EAJK;MAJkB;MAHT8f,yDAAjBhB;MACUiB,kDAAVnB;MACSoB,iDAATzH;;EAaF,MAAM0H,eAAe,GAAGX,WAAW,IAAI,EAAvC;EACA,MAAMY,4BAA4B,GAAGX,wBAAwB,IAAI,EAAjE;EACA,MAAMY,kBAAkB,GAAGF,eAAe,CAACG,MAAhB,CAAuBF,4BAAvB,CAA3B;;EACA,MAAMG,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,SAAD;EACvB,QAAMC,kBAAkB,GAAGb,mBAAmB,IAAIrV,IAAlD;EACA,QAAMmW,mBAAmB,GAAGZ,oBAAoB,IAAIvV,IAApD;EACA,QAAMoW,kBAAkB,GAAa,EAArC;EACA,QAAMC,eAAe,GAAW,EAAhC;EACA,QAAIC,kBAAkB,GAAG,KAAzB;EACA,QAAIC,cAAc,GAAG,KAArB;EACA,QAAIC,gBAAgB,GAAG,KAAvB;EACA/gB,IAAAA,IAAI,CAACwgB,SAAD,EAAY,UAACQ,QAAD;YACNC,gBAAsED,SAAtEC;UAAuBC,iBAA+CF,SAAvDvf;UAAwBjE,OAA+BwjB,SAA/BxjB;UAAM2jB,WAAyBH,SAAzBG;UAAUC,aAAeJ,SAAfI;EAC/D,UAAMC,gBAAgB,GAAG7jB,IAAI,KAAK,YAAlC;EACA,UAAM8jB,eAAe,GAAG9jB,IAAI,KAAK,WAAjC;EACA,UAAM+jB,sBAAsB,GAAG9f,MAAM,KAAKyf,cAA1C;EACA,UAAMM,cAAc,GAAGH,gBAAgB,IAAIxjB,QAAQ,CAACojB,aAAD,CAA5B,GAA8CzhB,IAAI,CAAC0hB,cAAD,EAAgCD,aAAhC,CAAlD,GAAoG,CAA3H;EACA,UAAMQ,gBAAgB,GAAGD,cAAc,KAAK,CAAnB,IAAwBL,QAAQ,KAAKK,cAA9D;EACA,UAAME,iBAAiB;UACrBD,gBAAgB;UAChBF,sBADA;UAEA,CAAChC,eAFD;UAGA,CAACkB,kBAAkB,CAACS,cAAD,EAAiBD,aAAjB,EAAiCE,QAAjC,EAA2CK,cAA3C,CAJrB;EAKA,UAAMG,wBAAwB,GAAGthB,OAAO,CAAC+f,4BAAD,EAA+Ba,aAA/B,CAAP,GAAuD,CAAC,CAAxD,IAA6DQ,gBAA9F;;EAEA,UAAIC,iBAAJ,EAAuB;EACrBjhB,QAAAA,IAAI,CAACkgB,kBAAD,EAAqBM,aAArB,CAAJ;EACD;;EACD,UAAI1B,eAAJ,EAAqB;EACnB,YAAMqC,kBAAkB,GAAG,CAACP,gBAA5B;EACA,YAAMQ,kBAAkB,GAAGR,gBAAgB,IAAIM,wBAApB,IAAgD,CAACJ,sBAA5E;EACA,YAAMO,cAAc,GAAGD,kBAAkB,IAAIlC,qBAAtB,IAA+Cpc,EAAE,CAAC2d,cAAD,EAAiBvB,qBAAjB,CAAxE;EACA,YAAMoC,aAAa,GAAGD;AAAc,cAChC,CAACrB,kBAAkB,CAACS,cAAD,EAAiBD,aAAjB,EAAiCE,QAAjC,EAA2CK,cAA3C;AADa,cAEhCI,kBAAkB,IAAIC,kBAF1B;EAGA,YAAMG,mBAAmB,GAAGD,aAAa,IAAI,CAACrB,mBAAmB,CAACM,QAAD,EAAWc,cAAX,EAA2BrgB,MAA3B,EAAmCiG,OAAnC,CAAjE;EAEAjH,QAAAA,IAAI,CAACmgB,eAAD,EAAkBQ,UAAlB,CAAJ;EAEAN,QAAAA,cAAc,GAAGA,cAAc,IAAIkB,mBAAnC;EACAjB,QAAAA,gBAAgB,GAAGA,gBAAgB,IAAIO,eAAvC;EACD;;EACDT,MAAAA,kBAAkB,GAAGA,kBAAkB,KAAKa,iBAAiB,IAAIC,yBAAjE;EACD,KAhCG,CAAJ;;EAkCA,QAAIZ,gBAAgB,IAAI,CAAC/f,YAAY,CAAC4f,eAAD,CAArC,EAAwD;EACtDZ,MAAAA,gCAAgC,CAAC,UAAC7c,QAAD;EAAA,eAC/Byd,eAAe,CAACjT,MAAhB,CAA+B,UAACrN,GAAD,EAAMsE,IAAN;EAC7BnE,UAAAA,IAAI,CAACH,GAAD,EAAM4C,IAAI,CAACC,QAAD,EAAWyB,IAAX,CAAV,CAAJ;EACA,iBAAOrB,EAAE,CAACqB,IAAD,EAAOzB,QAAP,CAAF,GAAqB1C,IAAI,CAACH,GAAD,EAAMsE,IAAN,CAAzB,GAAuCtE,GAA9C;EACD,SAHD,EAGG,EAHH,CAD+B;EAAA,OAAD,CAAhC;EAMD;;EACD,QAAI,CAACU,YAAY,CAAC2f,kBAAD,CAAb,IAAqCE,kBAArC,IAA2DC,cAA/D,EAA+E;EAC7E5gB,MAAAA,QAAQ,CAACygB,kBAAD,EAAqBE,kBAArB,EAAyCC,cAAzC,CAAR;EACD;EACF,GArDD;;EAsDA,MAAMmB,gBAAgB,GAAqB,IAAI/X,2BAAJ,CAAiCqW,gBAAjC,CAA3C;EAGA0B,EAAAA,gBAAgB,CAAC3F,OAAjB,CAAyB7a,MAAzB,EAAiC;EAC/BygB,IAAAA,UAAU,EAAE,IADmB;EAE/BC,IAAAA,iBAAiB,EAAE,IAFY;EAG/BC,IAAAA,eAAe,EAAE/B,kBAHc;EAI/BgC,IAAAA,OAAO,EAAE9C,eAJsB;EAK/B+C,IAAAA,SAAS,EAAE/C,eALoB;EAM/BgD,IAAAA,aAAa,EAAEhD;EANgB,GAAjC;EAQAD,EAAAA,WAAW,GAAG,IAAd;EAEA,SAAO;EACLkD,IAAAA,WAAW,EAAE;EACX,UAAIlD,WAAJ,EAAiB;EACfW,QAAAA,yBAAyB;EACzBgC,QAAAA,gBAAgB,CAAC1F,UAAjB;EACA+C,QAAAA,WAAW,GAAG,KAAd;EACD;EACF,KAPI;EAQLmD,IAAAA,yBAAyB,EAAE,mCAACrD,qBAAD;EACzBc,MAAAA,wBAAwB,CAACZ,WAAW,IAAIC,eAAf,IAAkCH,qBAAnC,CAAxB;EACD,KAVI;EAWL3G,IAAAA,OAAO,EAAE;EACP,UAAI6G,WAAJ,EAAiB;EACfiB,QAAAA,gBAAgB,CAAC0B,gBAAgB,CAACS,WAAjB,EAAD,CAAhB;EACD;EACF;EAfI,GAAP;EAiBD,CAtHM;;ECrHP,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAAClhB,MAAD;EACtB,MAAI7C,aAAa,CAAC6C,MAAD,CAAjB,EAA2B;EACzB,QAAMmhB,UAAU,GAAGrf,EAAE,CAAC9B,MAAD,EAAS,UAAT,CAArB;;EACA,QAAMyX,KAAI,GAAI0J,UAAU,GAAGzd,SAAS,EAAZ,GAAiB1D,MAAzC;;EACA,QAAM2X,QAAO,GAAGjU,SAAS,CAACqN,gBAAD,CAAzB;;EACA,QAAM6G,SAAQ,GAAGlU,SAAS,CAACsN,iBAAD,CAA1B;;EACA,QAAM6G,QAAO,GAAGnU,SAAS,CAACuN,gBAAD,CAAzB;;EAEA/N,IAAAA,cAAc,CAACyU,QAAD,EAAUC,SAAV,CAAd;EACA1U,IAAAA,cAAc,CAAC0U,SAAD,EAAWC,QAAX,CAAd;EACA3U,IAAAA,cAAc,CAAC2U,QAAD,EAAU5V,QAAQ,CAACjC,MAAD,CAAlB,CAAd;EACAkD,IAAAA,cAAc,CAAClD,MAAD,EAAS2X,QAAT,CAAd;EACArW,IAAAA,QAAQ,CAACmW,KAAD,EAAO3G,aAAP,CAAR;EAEA,WAAO;EACL9Q,MAAAA,MAAM,EAANA,MADK;EAELyX,MAAAA,IAAI,EAAJA,KAFK;EAGLE,MAAAA,OAAO,EAAPA,QAHK;EAILC,MAAAA,QAAQ,EAARA,SAJK;EAKLC,MAAAA,OAAO,EAAPA;EALK,KAAP;EAOD;;QAEOJ,OAAqCzX,OAArCyX;MAAME,UAA+B3X,OAA/B2X;MAASC,WAAsB5X,OAAtB4X;MAAUC,UAAY7X,OAAZ6X;EAEjCvW,EAAAA,QAAQ,CAACmW,IAAD,EAAO3G,aAAP,CAAR;EACAxP,EAAAA,QAAQ,CAACqW,OAAD,EAAU5G,gBAAV,CAAR;EACAzP,EAAAA,QAAQ,CAACsW,QAAD,EAAW5G,iBAAX,CAAR;EACA1P,EAAAA,QAAQ,CAACuW,OAAD,EAAU5G,gBAAV,CAAR;EAEA,SAAOjR,MAAP;EACD,CA/BD;;EAiCA,IAAMohB,iBAAiB,GAAG,SAApBA,iBAAoB,CAACphB,MAAD,EAAmBiG,OAAnB,EAAkCob,UAAlC;EACxB,MAAMC,QAAQ,GAAmBJ,eAAe,CAAClhB,MAAD,CAAhD;EACA,MAAMuhB,UAAU,GAAqB,EAArC;QACQ9J,OAAkB6J,SAAlB7J;MAAMI,UAAYyJ,SAAZzJ;EAEd7Y,EAAAA,IAAI,CAACuiB,UAAD,EAAa/J,wBAAwB,CAAC8J,QAAD,CAArC,CAAJ;;EAGA,MAAMnI,aAAa,GAAG,SAAhBA,aAAgB,CAACsB,cAAD;EACpB,QAAIA,cAAJ,EAAoB;EAClBlc,MAAAA,IAAI,CAACgjB,UAAD,EAAa,UAACC,SAAD;EACfA,QAAAA,SAAS,CAACC,mBAAV,IAAiCD,SAAS,CAACC,mBAAV,CAA8BhH,cAA9B,CAAjC;EACD,OAFG,CAAJ;EAGD,KAJD,MAIO;EACLlc,MAAAA,IAAI,CAACgjB,UAAD,EAAa,UAACC,SAAD;EACfA,QAAAA,SAAS,CAAChI,cAAV,IAA4BgI,SAAS,CAAChI,cAAV,EAA5B;EACD,OAFG,CAAJ;EAGD;EACF,GAVD;;EAWA,MAAMJ,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,cAAD,EAA0BC,oBAA1B;EACvB/a,IAAAA,IAAI,CAACgjB,UAAD,EAAa,UAACC,SAAD;EACfA,MAAAA,SAAS,CAAC/H,iBAAV,IAA+B+H,SAAS,CAAC/H,iBAAV,CAA4BJ,cAA5B,EAA4CC,oBAA5C,CAA/B;EACD,KAFG,CAAJ;EAGD,GAJD;;EAMAS,EAAAA,kBAAkB,CAACtC,IAAD,EAAO0B,aAAP,EAAsB;EAAEe,IAAAA,OAAO,EAAE,IAAX;EAAiBD,IAAAA,UAAU,EAAE;EAA7B,GAAtB,CAAlB;EACA+B,EAAAA,qBAAqB,CAACvE,IAAD,EAAO2B,gBAAP,CAArB;EACAwE,EAAAA,iBAAiB,CAACnG,IAAD,EAAO;EACtB,WAAO,IAAP;EACD,GAFgB,CAAjB;EAGAmG,EAAAA,iBAAiB;MACf/F,OADe;MAEf;EACE,aAAO,IAAP;EACD,KAJc;MAKf;EAAEiG,MAAAA,eAAe,EAAE;EAAnB;IALe,CAAjB;EAOD,CArCD;;AChCA,cAAe;EACb,SAAO;MACL7H,cAAc,EADT;MAELmL,iBAAiB,CAACxf,QAAQ,CAACmQ,IAAV,CAFZ;MAGLjO,SAAS;QACP;;;;;;;;;;;;;;;;;;;;;;MADO;IAHJ,CAAP;EA4BD;;;;"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/class.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/environment/environment.ts","../src/lifecycles/lifecycleBase.ts","../src/lifecycles/structureLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { 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 = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | null, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | undefined | null;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null = preferredAnchor;\r\n let fragment: DocumentFragment | Node | undefined | null;\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);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | null): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: EventListener, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener, 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 = (target: EventTarget, eventNames: string, listener: EventListener, options?: OnOptions): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = once\r\n ? (evt: Event) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEach.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event) => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event) => evt.preventDefault();\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (a: T | undefined, b: T | undefined, props: Array): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n if (a[prop] !== b[prop]) {\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","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } 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\ntype CssStyles = { [key: string]: string | number };\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | null, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null, styles: string): string;\r\nexport function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | null, property?: string): TRBL => {\r\n const finalProp = property || '';\r\n const top = `${finalProp}-top`;\r\n const right = `${finalProp}-right`;\r\n const bottom = `${finalProp}-bottom`;\r\n const left = `${finalProp}-left`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null): 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): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","export interface Cache {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n readonly _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C ? (force?: boolean | 0, context?: C) => Cache : (force: boolean | 0, context: C) => Cache;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): CacheUpdate => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return cacheUpdate;\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidationResult, OptionsValidated } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType>;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n","import { OptionsTemplate, OptionsWithOptionsTemplate, OptionsTemplateTypes } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation> {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport function transformOptions>(\r\n optionsWithOptionsTemplate: OptionsWithOptionsTemplate\r\n): OptionsWithOptionsTemplateTransformation {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n runEach,\r\n equalWH,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\r\n _autoUpdateLoop: boolean;\r\n _nativeScrollbarSize: XY;\r\n _nativeScrollbarIsOverlaid: XY;\r\n _nativeScrollbarStyling: boolean;\r\n _rtlScrollBehavior: { n: boolean; i: boolean };\r\n _flexboxGlue: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = offsetSize(parentElm);\r\n const minOffsetsize = offsetSize(childElm);\r\n const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = offsetSize(parentElm);\r\n const maxOffsetsize = offsetSize(childElm);\r\n const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent);\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst createEnvironment = (): Environment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n\r\n const onChangedListener: Set = new Set();\r\n const nativeScrollBarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollBarSize.x === 0,\r\n y: nativeScrollBarSize.y === 0,\r\n };\r\n\r\n const env: Environment = {\r\n _autoUpdateLoop: false,\r\n _nativeScrollbarSize: nativeScrollBarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: getNativeScrollbarStyling(envElm),\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeAttr(envElm, 'class');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n let scrollbarSize = nativeScrollBarSize;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const newScrollbarSize = (environmentInstance._nativeScrollbarSize = getNativeScrollbarSize(body, envElm));\r\n removeElements(envElm);\r\n\r\n if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) {\r\n runEach(onChangedListener);\r\n }\r\n\r\n scrollbarSize = newScrollbarSize;\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nexport const getEnvironment = (): Environment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n","import {\r\n Cache,\r\n OptionsValidated,\r\n OptionsWithOptionsTemplate,\r\n transformOptions,\r\n validateOptions,\r\n assignDeep,\r\n hasOwnProperty,\r\n isEmptyObject,\r\n} from 'support';\r\nimport { CSSDirection, PlainObject } from 'typings';\r\n\r\ninterface LifecycleBaseUpdateHints {\r\n _force?: boolean;\r\n _changedOptions?: OptionsValidated;\r\n}\r\n\r\nexport interface LifecycleBase {\r\n _options(newOptions?: O): O;\r\n _update(force?: boolean): void;\r\n}\r\n\r\nexport interface Lifecycle extends LifecycleBase {\r\n _destruct(): void;\r\n _onSizeChanged?(): void;\r\n _onDirectionChanged?(directionCache: Cache): void;\r\n _onTrinsicChanged?(widthIntrinsic: boolean, heightIntrinsicCache: Cache): void;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\n/**\r\n * Creates a object which can be seen as the base of a lifecycle because it provides all the tools to manage a lifecycle and its options, cache and base functions.\r\n * @param defaultOptionsWithTemplate A object which describes the options and the default options of the lifecycle.\r\n * @param initialOptions The initialOptions for the lifecylce. (Can be undefined)\r\n * @param updateFunction The update function where cache and options updates are handled. Has two arguments which are the changedOptions and the changedCache objects.\r\n */\r\nexport const createLifecycleBase = (\r\n defaultOptionsWithTemplate: OptionsWithOptionsTemplate>,\r\n initialOptions: O | undefined,\r\n updateFunction: (force: boolean, checkOption: LifecycleCheckOption) => any\r\n): LifecycleBase => {\r\n const { _template: optionsTemplate, _options: defaultOptions } = transformOptions>(defaultOptionsWithTemplate);\r\n const options: Required = assignDeep(\r\n {},\r\n defaultOptions,\r\n validateOptions(initialOptions || ({} as O), optionsTemplate, null, true)._validated\r\n );\r\n\r\n const update = (hints: LifecycleBaseUpdateHints) => {\r\n const { _force, _changedOptions } = hints;\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: _force || getPropByPath(_changedOptions, path) !== undefined,\r\n });\r\n updateFunction(!!_force, checkOption);\r\n };\r\n\r\n update({ _force: true });\r\n\r\n return {\r\n _options(newOptions?: O) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, options, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(options, _changedOptions);\r\n update({ _changedOptions });\r\n }\r\n }\r\n return options;\r\n },\r\n _update: (_force?: boolean) => {\r\n update({ _force });\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n cssProperty,\r\n runEach,\r\n createCache,\r\n topRightBottomLeft,\r\n TRBL,\r\n WH,\r\n XY,\r\n equalTRBL,\r\n equalXY,\r\n optionsTemplateTypes as oTypes,\r\n OptionsTemplateValue,\r\n style,\r\n OptionsWithOptionsTemplate,\r\n scrollSize,\r\n offsetSize,\r\n} from 'support';\r\nimport { OSTargetObject } from 'typings';\r\nimport { createLifecycleBase, Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { getEnvironment, Environment } from 'environment';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\nexport interface StructureLifecycleOptions {\r\n paddingAbsolute: boolean;\r\n overflowBehavior?: {\r\n x?: OverflowBehavior;\r\n y?: OverflowBehavior;\r\n };\r\n}\r\n\r\nconst overflowBehaviorAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate> = {\r\n paddingAbsolute: [false, oTypes.boolean],\r\n overflowBehavior: {\r\n x: ['scroll', overflowBehaviorAllowedValues],\r\n y: ['scroll', overflowBehaviorAllowedValues],\r\n },\r\n};\r\n\r\nconst cssMarginEnd = cssProperty('margin-inline-end');\r\nconst cssBorderEnd = cssProperty('border-inline-end');\r\n\r\nexport const createStructureLifecycle = (\r\n target: OSTargetObject,\r\n initialOptions?: StructureLifecycleOptions\r\n): Lifecycle => {\r\n const { host, padding: paddingElm, viewport, content } = target;\r\n const destructFns: (() => any)[] = [];\r\n const env: Environment = getEnvironment();\r\n const scrollbarsOverlaid = env._nativeScrollbarIsOverlaid;\r\n const supportsScrollbarStyling = env._nativeScrollbarStyling;\r\n const supportFlexboxGlue = env._flexboxGlue;\r\n // direction change is only needed to update scrollbar hiding, therefore its not needed if css can do it, scrollbars are invisible or overlaid on y axis\r\n const directionObserverObsolete = (cssMarginEnd && cssBorderEnd) || supportsScrollbarStyling || scrollbarsOverlaid.y;\r\n\r\n const updatePaddingCache = createCache(() => topRightBottomLeft(host, 'padding'), { _equal: equalTRBL });\r\n const updateOverflowAmountCache = createCache, { _contentScrollSize: WH; _viewportSize: WH }>(\r\n (ctx) => ({\r\n x: Math.max(0, Math.round((ctx!._contentScrollSize.w - ctx!._viewportSize.w) * 100) / 100),\r\n y: Math.max(0, Math.round((ctx!._contentScrollSize.h - ctx!._viewportSize.h) * 100) / 100),\r\n }),\r\n { _equal: equalXY }\r\n );\r\n\r\n const { _options, _update } = createLifecycleBase(defaultOptionsWithTemplate, initialOptions, (force, checkOption) => {\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n const { _value: padding, _changed: paddingChanged } = updatePaddingCache(force);\r\n\r\n if (paddingAbsoluteChanged || paddingChanged) {\r\n const paddingStyle: TRBL = {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n };\r\n\r\n if (!paddingAbsolute) {\r\n paddingStyle.t = -padding!.t;\r\n paddingStyle.r = -(padding!.r + padding!.l);\r\n paddingStyle.b = -(padding!.b + padding!.t);\r\n paddingStyle.l = -padding!.l;\r\n }\r\n\r\n style(paddingElm, {\r\n top: paddingStyle.t,\r\n left: paddingStyle.l,\r\n 'margin-right': paddingStyle.r,\r\n 'margin-bottom': paddingStyle.b,\r\n 'max-width': `calc(100% + ${paddingStyle.r * -1}px)`,\r\n });\r\n }\r\n\r\n const viewportOffsetSize = offsetSize(paddingElm);\r\n const contentClientSize = offsetSize(content);\r\n const contentScrollSize = scrollSize(content);\r\n const overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: contentScrollSize,\r\n _viewportSize: {\r\n w: viewportOffsetSize.w + Math.max(0, contentClientSize.w - contentScrollSize.w),\r\n h: viewportOffsetSize.h + Math.max(0, contentClientSize.h - contentScrollSize.h),\r\n },\r\n });\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n console.log('overflowAmount', overflowAmount);\r\n console.log('overflowAmountChanged', overflowAmountChanged);\r\n\r\n /*\r\n var setOverflowVariables = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xyI = scrollbarVarsInverted._x_y;\r\n var xy = scrollbarVars._x_y;\r\n var wh = scrollbarVars._w_h;\r\n var widthHeight = scrollbarVars._width_height;\r\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\r\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\r\n var checkFractionalOverflowAmount = previousOverflowAmount && previousOverflowAmount[xy] > 0 && _viewportElementNative[scrollMax] === 0;\r\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\r\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\r\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\r\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\r\n overflowAmount[xy] *=\r\n hideOverflowForceTextarea || (checkFractionalOverflowAmount && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1) ? 0 : 1;\r\n hasOverflow[xy] = overflowAmount[xy] > 0;\r\n\r\n //hideOverflow:\r\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\r\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\r\n hideOverflow[xy] =\r\n overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy]\r\n ? hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]\r\n : hasOverflow[xy];\r\n hideOverflow[xy + 's'] = hideOverflow[xy] ? overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy] : false;\r\n\r\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\r\n };\r\n*/\r\n /*\r\n if (!supportsScrollbarStyling) {\r\n paddingStyle.r -= env._nativeScrollbarSize.y;\r\n paddingStyle.b -= env._nativeScrollbarSize.x;\r\n }\r\n */\r\n });\r\n\r\n const onSizeChanged = () => {\r\n _update();\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n const { _changed, _value } = heightIntrinsicCache;\r\n if (_changed) {\r\n style(content, { height: _value ? 'auto' : '100%' });\r\n }\r\n };\r\n\r\n return {\r\n _options,\r\n _update,\r\n _onSizeChanged: onSizeChanged,\r\n _onTrinsicChanged: onTrinsicChanged,\r\n _destruct() {\r\n runEach(destructFns);\r\n },\r\n };\r\n};\r\n","import {\r\n Cache,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n} from 'support';\r\nimport { CSSDirection } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getDirection = (elm: HTMLElement): CSSDirection => style(elm, 'direction') as CSSDirection;\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height > 0 || rect.width > 0);\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionCache?: Cache) => any,\r\n options?: SizeObserverOptions\r\n): (() => void) => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior;\r\n const baseElements = createDOM(`
`);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const updateResizeObserverContentRectCache = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: Cache | SizeObserverEntry[] | Event) => {\r\n const directionCacheValue = sizeChangedContext && (sizeChangedContext as Cache)._value;\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (directionCacheValue) {\r\n doDirectionScroll = (sizeChangedContext as Cache)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = (directionCacheValue || getDirection(sizeObserver)) === 'rtl';\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(directionCacheValue ? (sizeChangedContext as Cache) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const updateDirectionCache = createCache(() => getDirection(sizeObserver));\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionCache = updateDirectionCache();\r\n const { _value, _changed } = directionCache;\r\n if (_changed) {\r\n if (_value === 'rtl') {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionCache);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n Cache,\r\n createDOM,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => any\r\n): (() => void) => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const updateHeightIntrinsicCache = createCache>(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n push(\r\n offListeners,\r\n createSizeObserver(trinsicObserver, () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(false, heightIntrinsicCache);\r\n }\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(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 off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 80)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject, CSSDirection } from 'typings';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { Cache, appendChildren, addClass, contents, is, isHTMLElement, createDiv, each, push } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { Lifecycle } from 'lifecycles/lifecycleBase';\r\nimport { classNameHost, classNamePadding, classNameViewport, classNameContent } from 'classnames';\r\n\r\nconst normalizeTarget = (target: OSTarget): OSTargetObject => {\r\n if (isHTMLElement(target)) {\r\n const isTextarea = is(target, 'textarea');\r\n const host = (isTextarea ? createDiv() : target) as HTMLElement;\r\n const padding = createDiv(classNamePadding);\r\n const viewport = createDiv(classNameViewport);\r\n const content = createDiv(classNameContent);\r\n\r\n appendChildren(padding, viewport);\r\n appendChildren(viewport, content);\r\n appendChildren(content, contents(target));\r\n appendChildren(target, padding);\r\n addClass(host, classNameHost);\r\n\r\n return {\r\n target,\r\n host,\r\n padding,\r\n viewport,\r\n content,\r\n };\r\n }\r\n\r\n const { host, padding, viewport, content } = target;\r\n\r\n addClass(host, classNameHost);\r\n addClass(padding, classNamePadding);\r\n addClass(viewport, classNameViewport);\r\n addClass(content, classNameContent);\r\n\r\n return target;\r\n};\r\n\r\nconst OverlayScrollbars = (target: OSTarget, options?: any, extensions?: any): void => {\r\n const osTarget: OSTargetObject = normalizeTarget(target);\r\n const lifecycles: Lifecycle[] = [];\r\n const { host, content } = osTarget;\r\n\r\n push(lifecycles, createStructureLifecycle(osTarget));\r\n\r\n // eslint-disable-next-line\r\n const onSizeChanged = (directionCache?: Cache) => {\r\n if (directionCache) {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onDirectionChanged && lifecycle._onDirectionChanged(directionCache);\r\n });\r\n } else {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onSizeChanged && lifecycle._onSizeChanged();\r\n });\r\n }\r\n };\r\n const onTrinsicChanged = (widthIntrinsic: boolean, heightIntrinsicCache: Cache) => {\r\n each(lifecycles, (lifecycle) => {\r\n lifecycle._onTrinsicChanged && lifecycle._onTrinsicChanged(widthIntrinsic, heightIntrinsicCache);\r\n });\r\n };\r\n\r\n createSizeObserver(host, onSizeChanged, { _appear: true, _direction: true });\r\n createTrinsicObserver(host, onTrinsicChanged);\r\n createDOMObserver(host, () => {\r\n return null;\r\n });\r\n createDOMObserver(\r\n content,\r\n () => {\r\n return null;\r\n },\r\n { _observeContent: true }\r\n );\r\n};\r\n\r\nexport { OverlayScrollbars };\r\n","import { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverlayScrollbars } from 'overlayscrollbars/overlayscrollbars';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n getEnvironment(),\r\n OverlayScrollbars(document.body),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["ElementNodeType","Node","ELEMENT_NODE","Object","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","equalWH","equalXY","equalTRBL","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","style","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","property","finalProp","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","createCache","update","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","environmentInstance","abs","Math","round","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollBarSize","nativeScrollbarIsOverlaid","env","_autoUpdateLoop","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","getPropByPath","path","o","createLifecycleBase","defaultOptionsWithTemplate","initialOptions","updateFunction","optionsTemplate","defaultOptions","hints","_force","_changedOptions","checkOption","newOptions","_update","overflowBehaviorAllowedValues","paddingAbsolute","oTypes","boolean","overflowBehavior","cssMarginEnd","cssBorderEnd","createStructureLifecycle","host","paddingElm","padding","viewport","content","destructFns","scrollbarsOverlaid","supportsScrollbarStyling","supportFlexboxGlue","directionObserverObsolete","updatePaddingCache","updateOverflowAmountCache","ctx","max","_contentScrollSize","_viewportSize","paddingAbsoluteChanged","paddingChanged","paddingStyle","viewportOffsetSize","contentClientSize","contentScrollSize","overflowAmuntCache","overflowAmount","overflowAmountChanged","log","onSizeChanged","onTrinsicChanged","widthIntrinsic","heightIntrinsicCache","height","_onSizeChanged","_onTrinsicChanged","_destruct","animationStartEventName","scrollEventName","scrollAmount","getDirection","domRectHasDimensions","width","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","directionCacheValue","skip","doDirectionScroll","pop","contentRect","rtl","appearCallback","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionCache","event","directionCache","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","newSize","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","_destroy","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreTargetAttrChange","_ignoreContentChange","Map","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","normalizeTarget","isTextarea","OverlayScrollbars","extensions","osTarget","lifecycles","lifecycle","_onDirectionChanged"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index a81e5bf..5b65670 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=r()}(this,(function(){"use strict";var n=Node.ELEMENT_NODE,r=Object.prototype,t=r.toString,i=r.hasOwnProperty;function e(n){return void 0===n}function o(n){return null===n}var u=function(n){return e(n)||o(n)?""+n:t.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function a(n){return"string"==typeof n}function f(n){return"function"==typeof n}function s(n){return Array.isArray(n)}function l(n){return"object"==typeof n&&!s(n)&&!o(n)}function v(n){var r=!!n&&n.length,t=c(r)&&r>-1&&r%1==0;return!!(s(n)||!f(n)&&t)&&(!(r>0&&l(n))||r-1 in n)}function d(n){if(!n||!l(n)||"object"!==u(n))return!1;var r,t=n.constructor,o=t&&t.prototype,c=i.call(n,"constructor"),a=o&&i.call(o,"isPrototypeOf");if(t&&!c&&!a)return!1;for(r in n);return e(r)||i.call(n,r)}function h(r){var t=window.Element;return!!r&&(t?r instanceof t:r.nodeType===n)}function b(n,r,t,i){if(e(i))return t?t[n]:r;t&&(t[n]=i)}function w(n,r,t){if(e(t))return n?n.getAttribute(r):null;n&&n.setAttribute(r,t)}var p=function(n,r){n&&n.removeAttribute(r)};function _(n,r){return b("scrollLeft",0,n,r)}function m(n,r){return b("scrollTop",0,n,r)}function g(n,r){if(v(n))for(var t=0;t0;i=u[e++];)o=!!t(n.classList,i)&&o}}(n,r,(function(n,r){return n.add(r)}))},C=Element.prototype,E=function(n,r){var t=[],i=r?h(r)?r:null:document;return i?y(t,i.querySelectorAll(n)):t},F=function(n,r){return!!h(n)&&(C.matches||C.msMatchesSelector).call(n,r)},q=function(n){return n?x(n.childNodes):[]},I=function(n,r,t){if(t){var i,e=r;n&&(v(t)?(i=document.createDocumentFragment(),g(t,(function(n){n===e&&(e=n.previousSibling),i.appendChild(n)}))):i=t,r&&(e?e!==r&&(e=e.nextSibling):e=n.firstChild),n.insertBefore(i,e))}},N=function(n,r){I(n,null,r)},P=function(n,r){I(n,n&&n.firstChild,r)},V=function n(r){if(v(r))g(x(r),(function(r){return n(r)}));else if(r){var t=(i=r)?i.parentElement:null;t&&t.removeChild(r)}var i},B=function(n){var r=document.createElement("div");return n&&w(r,"class",n),r},Y=function(n){var r=B();return r.innerHTML=n.trim(),g(q(r),(function(n){return V(n)}))},$={w:0,h:0},D=function(){return{w:window.innerWidth,h:window.innerHeight}},G=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:$},J=function(n){return n.split(" ")},K=function(n,r,t,i){g(J(r),(function(r){n.removeEventListener(r,t,i)}))},R=function(n,r,t,i){var o=function(){if(e(L)){L=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){L=!0}}))}catch(n){}}return L}(),u=o&&i&&i.o||!1,c=i&&i.u||!1,a=i&&i.s||!1,f=[],s=o?{passive:u,capture:c}:c;return g(J(r),(function(r){var i=a?function(e){n.removeEventListener(r,i,c),t&&t(e)}:t;y(f,K.bind(null,n,r,i,c)),n.addEventListener(r,i,s)})),O.bind(0,f)},U=function(n){return n.stopPropagation()},W=function(n){return n.preventDefault()},X=function(n,r,t){if(n&&r){var i=!0;return g(t,(function(t){n[t]!==r[t]&&(i=!1)})),i}return!1},H=function(n,r){return X(n,r,["w","h"])},Q=function(n,r){return X(n,r,["x","y"])},Z=function(n,r){return X(n,r,["t","r","b","l"])},nn=function(n){return n.charAt(0).toUpperCase()+n.slice(1)},rn=["-webkit-","-moz-","-o-","-ms-"],tn=["WebKit","Moz","O","MS","webkit","moz","o","ms"],en={},on={},un=function(n){var r=on[n];if(S(on,n))return r;var t=nn(n),i=B().style;return g(rn,(function(e){var o=e.replace(/-/g,""),u=[n,e+n,o+t,nn(o)+t];return!(r=u.find((function(n){return void 0!==i[n]})))})),on[n]=r,r},cn=function(n){var r=en[n]||window[n];return S(en,n)||(g(tn,(function(t){return!(r=r||window[t+nn(n)])})),en[n]=r),r},an=cn("MutationObserver"),fn=cn("IntersectionObserver"),sn=cn("ResizeObserver"),ln=cn("cancelAnimationFrame"),vn=cn("requestAnimationFrame"),dn=function(){},hn={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},bn=function(n,r){var t=r?parseFloat(n):parseInt(n,10);return Number.isNaN(t)?0:t},wn=function(n,r,t){return null!=r?r.getPropertyValue(t):n.style[t]},pn=function(n,r,t){try{n&&void 0!==n.style[r]&&(n.style[r]=function(n,r){return!hn[n.toLowerCase()]&&c(r)?r+"px":r}(r,t))}catch(i){}};function _n(n,r){var t=a(r);if(s(r)||t){var i=t?"":{};if(n){var e=window.getComputedStyle(n,null);i=t?wn(n,e,r):r.reduce((function(r,t){return r[t]=wn(n,e,t),r}),i)}return i}g(j(r),(function(t){return pn(n,t,r[t])}))}var mn={x:0,y:0},gn=function(n){var r=n?function(n){return n.getBoundingClientRect()}(n):0;return r?{x:r.left+window.pageYOffset,y:r.top+window.pageXOffset}:mn},yn=function(n,r){var t,i=r||{},e=i.v,o=i.p;return function(r,i){var u=o,c=n(i,o,t),a=r||(e?!e(u,c):u!==c);return a&&(o=c,t=u),{_:o,m:t,g:a}}};var xn=function(n){var r={exports:{}};return n(r,r.exports),r.exports}((function(n){function r(){return n.exports=r=Object.assign||function(n){for(var r=1;r0?"\r\nValid strings are: [ "+z.join(", ")+" ].":""));delete l[v]}})),{S:l,O:f}}(n,r,t||{},i||!1)};var Mn,An=Math.abs,Ln=Math.round,Tn=function(n,r){N(n,r);var t,i=(t=r)?{w:t.clientWidth,h:t.clientHeight}:$,e=G(r);return{x:e.h-i.h,y:e.w-i.w}},kn=function(n){var r=!1;k(n,"os-viewport-scrollbar-styled");try{r="none"===_n(n,"scrollbar-width")||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(t){}return r},Cn=function(n,r){_n(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),_(n,0);var t=gn(n),i=gn(r);_(n,-999);var e=gn(r);return{i:t.x===i.x,n:i.x!==e.x}},En=function(n,r){k(n,"os-environment-flexbox-glue");var t=G(n),i=G(r),e=H(i,t);k(n,"os-environment-flexbox-glue-max");var o=G(n),u=G(r),c=H(u,o);return e&&c},Fn=function(){var n=window.screen.deviceXDPI||0,r=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/r},qn=function(){var n=document.body,r=Y('
')[0],t=r.firstChild,i=new Set,e=Tn(n,r),o={x:0===e.x,y:0===e.y},u={j:!1,M:e,A:o,L:kn(r),T:Cn(r,t),k:En(r,t),C:function(n){i.add(n)},F:function(n){i.delete(n)}};if(p(r,"style"),p(r,"class"),V(r),!o.x||!o.y){var c=D(),a=Fn(),f=e;window.addEventListener("resize",(function(){if(i.size){var t=D(),e={w:t.w-c.w,h:t.h-c.h};if(0===e.w&&0===e.h)return;var o={w:An(e.w),h:An(e.h)},u={w:An(Ln(t.w/(c.w/100))),h:An(Ln(t.h/(c.h/100)))},s=Fn(),l=o.w>2&&o.h>2,v=(h=u.h,b=An(u.w),w=An(h),!(b!==w&&b+1!==w&&b-1!==w));if(l&&v&&(s!==a&&a>0)){var d=Mn.M=Tn(n,r);V(r),f.x===d.x&&f.y===d.y||O(i),f=d}c=t,a=s}var h,b,w}))}return u},In=function(){return Mn||(Mn=qn()),Mn},Nn=function(n,r){return n&&r.split(".").reduce((function(n,r){return n&&S(n,r)?n[r]:void 0}),n)},Pn=function(n,r,t){var i=function n(r){var t={q:{},I:{}};return g(j(r),(function(i){var e=r[i];if(s(e))t.q[i]=e[1],t.I[i]=e[0];else{var o=n(e);t.q[i]=o.q,t.I[i]=o.I}})),t}(n),e=i.q,o=M({},i.I,jn(r||{},e,null,!0).O),u=function(n){var r=n.N,i=n.P;t(!!r,(function(n){return{_:Nn(o,n),g:r||void 0!==Nn(i,n)}}))};return u({N:!0}),{I:function(n){if(n){var r=jn(n,e,o,!0).O;A(r)||(M(o,r),u({P:r}))}return o},V:function(n){u({N:n})}}},Vn={paddingAbsolute:[!1,Sn.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},Bn=un("margin-inline-end"),Yn=un("border-inline-end"),$n=function(n,r){var t=n.host,i=n.padding,e=(n.viewport,n.content),o=[],u=In(),c=u.A,a=u.L,f=(u.k,Bn&&Yn||a||c.y,yn((function(){return u=_n(t,[r=(n="padding"||"")+"-top",i=n+"-right",e=n+"-bottom",o=n+"-left"]),{t:bn(u[r]),r:bn(u[i]),b:bn(u[e]),l:bn(u[o])};var n,r,i,e,o,u}),{v:Z})),s=yn((function(n){return{x:Math.max(0,Math.round(100*(n.B.w-n.Y.w))/100),y:Math.max(0,Math.round(100*(n.B.h-n.Y.h))/100)}}),{v:Q}),l=Pn(Vn,r,(function(n,r){var t=r("paddingAbsolute"),o=t._,u=t.g,c=f(n),a=c._,l=c.g;if(u||l){var v={t:0,r:0,b:0,l:0};o||(v.t=-a.t,v.r=-(a.r+a.l),v.b=-(a.b+a.t),v.l=-a.l),_n(i,{top:v.t,left:v.l,"margin-right":v.r,"margin-bottom":v.b,"max-width":"calc(100% + "+-1*v.r+"px)"})}var d,h=G(i),b=G(e),w=(d=e)?{w:d.scrollWidth,h:d.scrollHeight}:$,p=s(n,{B:w,Y:{w:h.w+Math.max(0,b.w-w.w),h:h.h+Math.max(0,b.h-w.h)}}),_=p._,m=p.g;console.log("overflowAmount",_),console.log("overflowAmountChanged",m)})),v=l.I,d=l.V;return{I:v,V:d,$:function(){d()},D:function(n,r){var t=r.g,i=r._;t&&_n(e,{height:i?"auto":"100%"})},G:function(){O(o)}}},Dn=function(n){return _n(n,"direction")},Gn=function(n,r,t){var i=t||{},e=i.J,o=void 0!==e&&e,u=i.K,c=void 0!==u&&u,f=In().T,s=Y('
')[0],l=s.firstChild,v=function(n){if(o){var t="rtl"===Dn(s);_(s,t?f.n?-3333333:f.i?0:3333333:3333333),m(s,3333333)}r(a((n||{})._)?n:void 0)},d=[],h=c?v:null;if(sn){var b=new sn(v);b.observe(l),y(d,(function(){return b.disconnect()}))}else{var w=Y('
');N(l,w),k(l,"os-size-observer-listener-scroll");var p,g=w[0],x=g.lastChild,z=g.firstChild,S=null==z?void 0:z.firstChild,j=G(l),M=j,A=!1,L=function(){_(z,3333333),m(z,3333333),_(x,3333333),m(x,3333333)},T=function(){p=0,A&&(j=M,v())},C=function(n){return M=G(l),A=!n||!H(M,j),n&&A&&!p?(ln(p),p=vn(T)):n||T(),L(),n&&(W(n),U(n)),!1};y(d,[R(z,"scroll",C),R(x,"scroll",C)]),_n(S,{width:3333333,height:3333333}),L(),h=c?function(){return C()}:L}if(o){var E=yn((function(){return Dn(s)}));y(d,R(s,"scroll",(function(n){var r=E(),t=r._;return r.g&&(_n(l,"rtl"===t?{left:"auto",right:0}:{left:0,right:"auto"}),v(r)),W(n),U(n),!1})))}return h&&(k(s,"os-size-observer-appear"),y(d,R(s,"animationstart",h))),P(n,s),function(){O(d),V(s)}},Jn=function(n,r,t,i){var o,u=function(){t.forEach((function(n,r){K(r,n,i)})),t.clear()},c=function(r){o&&g(o.reduce((function(t,i){if(i){var e=i[0],o=i[1],u=o&&e&&(r?r(e):E(e,n));u&&y(t,[u,f(o)?o(u):o],!0)}return t}),[]),(function(n){var r=n[0],o=n[1];g(r,(function(n){!function(n,r){var o=t.get(n),u=e(o),c=function(){t.set(n,r),R(n,r,i)};u||r===o?u&&c():(K(n,o,i),c())}(n,o)}))}))},a=function(n){o=n,u(),c()};return r&&a(r),{R:u,U:c,V:a}},Kn=function(n,r,t){var i,e,o,u,f,s,l,v,d,h,b=!1,p=t||{},_=p.W,m=p.X,x=p.H,O=p.Z,S=p.nn,j=p.rn,M=p.tn,A=Jn(n,_&&O,new Map,(i=function(){b&&r([],!1,!0)},s=c(e=80)&&e>0,l=c(o)&&o>0,v=s?window.clearTimeout:ln,d=s?window.setTimeout:vn,h=function(n){f=l?performance.now():0,u&&v(u),i.apply(this,n)},function(){var n=h.bind(this,arguments),r=!!l&&performance.now()-f>=o;u&&v(u),u=r?n():d(n,e)})),L=A.U,T=A.R,k=A.V,C=x||[],q=(m||[]).concat(C),I=function(i){var e=j||dn,o=M||dn,u=[],c=[],f=!1,s=!1,l=!1;g(i,(function(r){var i,v,d=r.attributeName,h=r.target,b=r.type,p=r.oldValue,m=r.addedNodes,g="attributes"===b,x="childList"===b,z=n===h,O=g&&a(d)?w(h,d):0,j=0!==O&&p!==O,M=j&&z&&!_&&!e(h,d,p,O),A=(i=d,C.indexOf(i,v)>-1&&j);if(M&&y(u,d),_){var L=!g,T=g&&A&&!z,k=T&&S&&F(h,S),E=(k?!e(h,d,p,O):L||T)&&!o(r,k,n,t);y(c,m),s=s||E,l=l||x}f=f||M&&A})),l&&!z(c)&&L((function(n){return c.reduce((function(r,t){return y(r,E(n,t)),F(t,n)?y(r,t):r}),[])})),(!z(u)||f||s)&&r(u,f,s)},N=new an(I);return N.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:q,subtree:_,childList:_,characterData:_}),b=!0,{in:function(){b&&(T(),N.disconnect(),b=!1)},en:function(n){k(b&&_&&n)},V:function(){b&&I(N.takeRecords())}}},Rn=function(r){if(u=r,c=window.HTMLElement,u&&(c?u instanceof c:u.nodeType===n)){var t=F(r,"textarea")?B():r,i=B("os-padding"),e=B("os-viewport"),o=B("os-content");return N(i,e),N(e,o),N(o,q(r)),N(r,i),k(t,"os-host"),{target:r,host:t,padding:i,viewport:e,content:o}}var u,c,a=r.host,f=r.padding,s=r.viewport,l=r.content;return k(a,"os-host"),k(f,"os-padding"),k(s,"os-viewport"),k(l,"os-content"),r},Un=function(n,r,t){var i=Rn(n),e=[],o=i.host,u=i.content;y(e,$n(i));Gn(o,(function(n){g(e,n?function(r){r.on&&r.on(n)}:function(n){n.$&&n.$()})}),{K:!0,J:!0}),function(n,r){var t=Y('
')[0],i=[],e=yn((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{p:!1});if(fn){var o=new fn((function(n){if(n&&n.length>0){var t=n.pop();if(t){var i=e(0,t);i.g&&r(!1,i)}}}),{root:n});o.observe(t),y(i,(function(){return o.disconnect()}))}else y(i,Gn(t,(function(){var n=G(t),i=e(0,n);i.g&&r(!1,i)})));P(n,t)}(o,(function(n,r){g(e,(function(t){t.D&&t.D(n,r)}))})),Kn(o,(function(){return null})),Kn(u,(function(){return null}),{W:!0})};return function(){return[In(),Un(document.body),Y('
fdfhdfgh
')]}})); \ No newline at end of file +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=r()}(this,(function(){"use strict";var n=Node.ELEMENT_NODE,r=Object.prototype,t=r.toString,i=r.hasOwnProperty;function e(n){return void 0===n}function o(n){return null===n}var u=function(n){return e(n)||o(n)?""+n:t.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function c(n){return"number"==typeof n}function a(n){return"string"==typeof n}function f(n){return"function"==typeof n}function s(n){return Array.isArray(n)}function l(n){return"object"==typeof n&&!s(n)&&!o(n)}function v(n){var r=!!n&&n.length,t=c(r)&&r>-1&&r%1==0;return!!(s(n)||!f(n)&&t)&&(!(r>0&&l(n))||r-1 in n)}function d(n){if(!n||!l(n)||"object"!==u(n))return!1;var r,t=n.constructor,o=t&&t.prototype,c=i.call(n,"constructor"),a=o&&i.call(o,"isPrototypeOf");if(t&&!c&&!a)return!1;for(r in n);return e(r)||i.call(n,r)}function h(r){var t=window.Element;return!!r&&(t?r instanceof t:r.nodeType===n)}function b(n,r,t,i){if(e(i))return t?t[n]:r;t&&(t[n]=i)}function w(n,r,t){if(e(t))return n?n.getAttribute(r):null;n&&n.setAttribute(r,t)}var p=function(n,r){n&&n.removeAttribute(r)};function _(n,r){return b("scrollLeft",0,n,r)}function m(n,r){return b("scrollTop",0,n,r)}function g(n,r){if(v(n))for(var t=0;t0;i=u[e++];)o=!!t(n.classList,i)&&o}}(n,r,(function(n,r){return n.add(r)}))},C=Element.prototype,q=function(n,r){var t=[],i=r?h(r)?r:null:document;return i?y(t,i.querySelectorAll(n)):t},E=function(n,r){return!!h(n)&&(C.matches||C.msMatchesSelector).call(n,r)},F=function(n){return n?x(n.childNodes):[]},V=function(n,r,t){if(t){var i,e=r;n&&(v(t)?(i=document.createDocumentFragment(),g(t,(function(n){n===e&&(e=n.previousSibling),i.appendChild(n)}))):i=t,r&&(e?e!==r&&(e=e.nextSibling):e=n.firstChild),n.insertBefore(i,e))}},I=function(n,r){V(n,null,r)},N=function(n,r){V(n,n&&n.firstChild,r)},P=function n(r){if(v(r))g(x(r),(function(r){return n(r)}));else if(r){var t=(i=r)?i.parentElement:null;t&&t.removeChild(r)}var i},B=function(n){var r=document.createElement("div");return n&&w(r,"class",n),r},U=function(n){var r=B();return r.innerHTML=n.trim(),g(F(r),(function(n){return P(n)}))},Y={w:0,h:0},$=function(){return{w:window.innerWidth,h:window.innerHeight}},D=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:Y},G=function(n){return n.split(" ")},J=function(n,r,t,i){g(G(r),(function(r){n.removeEventListener(r,t,i)}))},K=function(n,r,t,i){var o=function(){if(e(L)){L=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){L=!0}}))}catch(n){}}return L}(),u=o&&i&&i.o||!1,c=i&&i.u||!1,a=i&&i.s||!1,f=[],s=o?{passive:u,capture:c}:c;return g(G(r),(function(r){var i=a?function(e){n.removeEventListener(r,i,c),t&&t(e)}:t;y(f,J.bind(null,n,r,i,c)),n.addEventListener(r,i,s)})),O.bind(0,f)},R=function(n){return n.stopPropagation()},W=function(n){return n.preventDefault()},X=function(n,r,t){if(n&&r){var i=!0;return g(t,(function(t){n[t]!==r[t]&&(i=!1)})),i}return!1},H=function(n,r){return X(n,r,["w","h"])},Q=function(n,r){return X(n,r,["x","y"])},Z=function(n,r){return X(n,r,["t","r","b","l"])},nn=function(n){return n.charAt(0).toUpperCase()+n.slice(1)},rn=["-webkit-","-moz-","-o-","-ms-"],tn=["WebKit","Moz","O","MS","webkit","moz","o","ms"],en={},on={},un=function(n){var r=on[n];if(S(on,n))return r;var t=nn(n),i=B().style;return g(rn,(function(e){var o=e.replace(/-/g,""),u=[n,e+n,o+t,nn(o)+t];return!(r=u.find((function(n){return void 0!==i[n]})))})),on[n]=r,r},cn=function(n){var r=en[n]||window[n];return S(en,n)||(g(tn,(function(t){return!(r=r||window[t+nn(n)])})),en[n]=r),r},an=cn("MutationObserver"),fn=cn("IntersectionObserver"),sn=cn("ResizeObserver"),ln=cn("cancelAnimationFrame"),vn=cn("requestAnimationFrame"),dn=function(){},hn={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},bn=function(n,r){var t=r?parseFloat(n):parseInt(n,10);return Number.isNaN(t)?0:t},wn=function(n,r,t){return null!=r?r.getPropertyValue(t):n.style[t]},pn=function(n,r,t){try{n&&void 0!==n.style[r]&&(n.style[r]=function(n,r){return!hn[n.toLowerCase()]&&c(r)?r+"px":r}(r,t))}catch(i){}};function _n(n,r){var t=a(r);if(s(r)||t){var i=t?"":{};if(n){var e=window.getComputedStyle(n,null);i=t?wn(n,e,r):r.reduce((function(r,t){return r[t]=wn(n,e,t),r}),i)}return i}g(j(r),(function(t){return pn(n,t,r[t])}))}var mn={x:0,y:0},gn=function(n){var r=n?function(n){return n.getBoundingClientRect()}(n):0;return r?{x:r.left+window.pageYOffset,y:r.top+window.pageXOffset}:mn},yn=function(n,r){var t,i=r||{},e=i.v,o=i.p,u=i._,c=o;return function(r,i){var o=c,a=n?n(i,c,t):i,f=r||(e?!e(o,a):o!==a);return(f||u)&&(c=a,t=o),{m:c,g:t,O:f}}};var xn=function(n){var r={exports:{}};return n(r,r.exports),r.exports}((function(n){function r(){return n.exports=r=Object.assign||function(n){for(var r=1;r0?"\r\nValid strings are: [ "+z.join(", ")+" ].":""));delete l[v]}})),{j:l,S:f}}(n,r,t||{},i||!1)};var Mn,An=Math.abs,Ln=Math.round,Tn=function(n,r){I(n,r);var t,i=(t=r)?{w:t.clientWidth,h:t.clientHeight}:Y,e=D(r);return{x:e.h-i.h,y:e.w-i.w}},kn=function(n){var r=!1;k(n,"os-viewport-scrollbar-styled");try{r="none"===_n(n,"scrollbar-width")||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(t){}return r},Cn=function(n,r){_n(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),_(n,0);var t=gn(n),i=gn(r);_(n,-999);var e=gn(r);return{i:t.x===i.x,n:i.x!==e.x}},qn=function(n,r){k(n,"os-environment-flexbox-glue");var t=D(n),i=D(r),e=H(i,t);k(n,"os-environment-flexbox-glue-max");var o=D(n),u=D(r),c=H(u,o);return e&&c},En=function(){var n=window.screen.deviceXDPI||0,r=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/r},Fn=function(){var n=document.body,r=U('
')[0],t=r.firstChild,i=new Set,e=Tn(n,r),o={x:0===e.x,y:0===e.y},u={M:!1,A:e,L:o,T:kn(r),k:Cn(r,t),C:qn(r,t),q:function(n){i.add(n)},F:function(n){i.delete(n)}};if(p(r,"style"),p(r,"class"),P(r),!o.x||!o.y){var c=$(),a=En(),f=e;window.addEventListener("resize",(function(){if(i.size){var t=$(),e={w:t.w-c.w,h:t.h-c.h};if(0===e.w&&0===e.h)return;var o={w:An(e.w),h:An(e.h)},u={w:An(Ln(t.w/(c.w/100))),h:An(Ln(t.h/(c.h/100)))},s=En(),l=o.w>2&&o.h>2,v=(h=u.h,b=An(u.w),w=An(h),!(b!==w&&b+1!==w&&b-1!==w));if(l&&v&&(s!==a&&a>0)){var d=Mn.A=Tn(n,r);P(r),f.x===d.x&&f.y===d.y||O(i),f=d}c=t,a=s}var h,b,w}))}return u},Vn=function(){return Mn||(Mn=Fn()),Mn},In=function(n,r){return n&&r.split(".").reduce((function(n,r){return n&&S(n,r)?n[r]:void 0}),n)},Nn=function(n,r,t){var i=function n(r){var t={V:{},I:{}};return g(j(r),(function(i){var e=r[i];if(s(e))t.V[i]=e[1],t.I[i]=e[0];else{var o=n(e);t.V[i]=o.V,t.I[i]=o.I}})),t}(n),e=i.V,o=M({},i.I,jn(r||{},e,null,!0).S),u=function(n){var r=n.N,i=n.P;t(!!r,(function(n){return{m:In(o,n),O:r||void 0!==In(i,n)}}))};return u({N:!0}),{I:function(n){if(n){var r=jn(n,e,o,!0).S;A(r)||(M(o,r),u({P:r}))}return o},B:function(n){u({N:n})}}},Pn={paddingAbsolute:[!1,Sn.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},Bn=un("margin-inline-end"),Un=un("border-inline-end"),Yn=function(n,r){var t=n.host,i=n.padding,e=(n.viewport,n.content),o=[],u=Vn(),c=u.L,a=u.T,f=(u.C,Bn&&Un||a||c.y,yn((function(){return u=_n(t,[r=(n="padding"||"")+"-top",i=n+"-right",e=n+"-bottom",o=n+"-left"]),{t:bn(u[r]),r:bn(u[i]),b:bn(u[e]),l:bn(u[o])};var n,r,i,e,o,u}),{v:Z})),s=yn((function(n){return{x:Math.max(0,Math.round(100*(n.U.w-n.Y.w))/100),y:Math.max(0,Math.round(100*(n.U.h-n.Y.h))/100)}}),{v:Q}),l=Nn(Pn,r,(function(n,r){var t=r("paddingAbsolute"),o=t.m,u=t.O,c=f(n),a=c.m,l=c.O;if(u||l){var v={t:0,r:0,b:0,l:0};o||(v.t=-a.t,v.r=-(a.r+a.l),v.b=-(a.b+a.t),v.l=-a.l),_n(i,{top:v.t,left:v.l,"margin-right":v.r,"margin-bottom":v.b,"max-width":"calc(100% + "+-1*v.r+"px)"})}var d,h=D(i),b=D(e),w=(d=e)?{w:d.scrollWidth,h:d.scrollHeight}:Y,p=s(n,{U:w,Y:{w:h.w+Math.max(0,b.w-w.w),h:h.h+Math.max(0,b.h-w.h)}}),_=p.m,m=p.O;console.log("overflowAmount",_),console.log("overflowAmountChanged",m)})),v=l.I,d=l.B;return{I:v,B:d,$:function(){d()},D:function(n,r){var t=r.O,i=r.m;t&&_n(e,{height:i?"auto":"100%"})},G:function(){O(o)}}},$n=function(n){return _n(n,"direction")},Dn=function(n){return n&&(n.height>0||n.width>0)},Gn=function(n,r,t){var i=t||{},e=i.J,o=void 0!==e&&e,u=i.K,c=void 0!==u&&u,a=Vn().k,f=U('
')[0],l=f.firstChild,v=yn(0,{_:!0,v:function(n,r){return!(!n||!Dn(n)&&Dn(r))}}),d=function(n){var t=n&&n.m,i=!1,e=!0;if(s(n)&&n.length>0){var u=v(0,n.pop().contentRect),c=u.g,l=u.m,d=u.O;e=!(i=!c||!Dn(l))&&d}else t&&(e=n.O);if(o&&e){var h="rtl"===(t||$n(f));_(f,h?a.n?-3333333:a.i?0:3333333:3333333),m(f,3333333)}i||r(t?n:void 0)},h=[],b=!!c&&d;if(sn){var w=new sn(d);w.observe(l),y(h,(function(){return w.disconnect()}))}else{var p=U('
');I(l,p),k(l,"os-size-observer-listener-scroll");var g,x=p[0],z=x.lastChild,S=x.firstChild,j=null==S?void 0:S.firstChild,M=D(l),A=M,L=!1,T=function(){_(S,3333333),m(S,3333333),_(z,3333333),m(z,3333333)},C=function(){g=0,L&&(M=A,d())},q=function(n){return A=D(l),L=!n||!H(A,M),n&&L&&!g?(ln(g),g=vn(C)):n||C(),T(),n&&(W(n),R(n)),!1};y(h,[K(S,"scroll",q),K(z,"scroll",q)]),_n(j,{width:3333333,height:3333333}),T(),b=c?function(){return q()}:T}if(o){var E=yn((function(){return $n(f)}));y(h,K(f,"scroll",(function(n){var r=E(),t=r.m;return r.O&&(_n(l,"rtl"===t?{left:"auto",right:0}:{left:0,right:"auto"}),d(r)),W(n),R(n),!1})))}return b&&(k(f,"os-size-observer-appear"),y(h,K(f,"animationstart",b,{s:!!sn}))),N(n,f),function(){O(h),P(f)}},Jn=function(n,r,t,i){var o,u=function(){t.forEach((function(n,r){J(r,n,i)})),t.clear()},c=function(r){o&&g(o.reduce((function(t,i){if(i){var e=i[0],o=i[1],u=o&&e&&(r?r(e):q(e,n));u&&y(t,[u,f(o)?o(u):o],!0)}return t}),[]),(function(n){var r=n[0],o=n[1];g(r,(function(n){!function(n,r){var o=t.get(n),u=e(o),c=function(){t.set(n,r),K(n,r,i)};u||r===o?u&&c():(J(n,o,i),c())}(n,o)}))}))},a=function(n){o=n,u(),c()};return r&&a(r),{R:u,W:c,B:a}},Kn=function(n,r,t){var i,e,o,u,f,s,l,v,d,h,b=!1,p=t||{},_=p.X,m=p.H,x=p.Z,O=p.nn,S=p.rn,j=p.tn,M=p.in,A=Jn(n,_&&O,new Map,(i=function(){b&&r([],!1,!0)},s=c(e=80)&&e>0,l=c(o)&&o>0,v=s?window.clearTimeout:ln,d=s?window.setTimeout:vn,h=function(n){f=l?performance.now():0,u&&v(u),i.apply(this,n)},function(){var n=h.bind(this,arguments),r=!!l&&performance.now()-f>=o;u&&v(u),u=r?n():d(n,e)})),L=A.W,T=A.R,k=A.B,C=x||[],F=(m||[]).concat(C),V=function(i){var e=j||dn,o=M||dn,u=[],c=[],f=!1,s=!1,l=!1;g(i,(function(r){var i,v,d=r.attributeName,h=r.target,b=r.type,p=r.oldValue,m=r.addedNodes,g="attributes"===b,x="childList"===b,z=n===h,O=g&&a(d)?w(h,d):0,j=0!==O&&p!==O,M=j&&z&&!_&&!e(h,d,p,O),A=(i=d,C.indexOf(i,v)>-1&&j);if(M&&y(u,d),_){var L=!g,T=g&&A&&!z,k=T&&S&&E(h,S),q=(k?!e(h,d,p,O):L||T)&&!o(r,!!k,n,t);y(c,m),s=s||q,l=l||x}f=f||M&&A})),l&&!z(c)&&L((function(n){return c.reduce((function(r,t){return y(r,q(n,t)),E(t,n)?y(r,t):r}),[])})),(!z(u)||f||s)&&r(u,f,s)},I=new an(V);return I.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:F,subtree:_,childList:_,characterData:_}),b=!0,{en:function(){b&&(T(),I.disconnect(),b=!1)},on:function(n){k(b&&_&&n)},B:function(){b&&V(I.takeRecords())}}},Rn=function(r){if(u=r,c=window.HTMLElement,u&&(c?u instanceof c:u.nodeType===n)){var t=E(r,"textarea")?B():r,i=B("os-padding"),e=B("os-viewport"),o=B("os-content");return I(i,e),I(e,o),I(o,F(r)),I(r,i),k(t,"os-host"),{target:r,host:t,padding:i,viewport:e,content:o}}var u,c,a=r.host,f=r.padding,s=r.viewport,l=r.content;return k(a,"os-host"),k(f,"os-padding"),k(s,"os-viewport"),k(l,"os-content"),r},Wn=function(n,r,t){var i=Rn(n),e=[],o=i.host,u=i.content;y(e,Yn(i));Gn(o,(function(n){g(e,n?function(r){r.un&&r.un(n)}:function(n){n.$&&n.$()})}),{K:!0,J:!0}),function(n,r){var t=U('
')[0],i=[],e=yn((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{p:!1});if(fn){var o=new fn((function(n){if(n&&n.length>0){var t=n.pop();if(t){var i=e(0,t);i.O&&r(!1,i)}}}),{root:n});o.observe(t),y(i,(function(){return o.disconnect()}))}else y(i,Gn(t,(function(){var n=D(t),i=e(0,n);i.O&&r(!1,i)})));N(n,t)}(o,(function(n,r){g(e,(function(t){t.D&&t.D(n,r)}))})),Kn(o,(function(){return null})),Kn(u,(function(){return null}),{X:!0})};return function(){return[Vn(),Wn(document.body),U('
fdfhdfgh
')]}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/types/observers/domObserver.d.ts b/packages/overlayscrollbars/types/observers/domObserver.d.ts index 72c22bd..5a01e91 100644 --- a/packages/overlayscrollbars/types/observers/domObserver.d.ts +++ b/packages/overlayscrollbars/types/observers/domObserver.d.ts @@ -1,8 +1,7 @@ -declare type TruthyOrFalsy = boolean | '' | 0 | null | undefined; declare type StringNullUndefined = string | null | undefined; -export declare type DOMObserverEventContentChange = Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined> | false | '' | null | undefined; -export declare type DOMObserverIgnoreContentChange = (mutation: MutationRecord, isNestedTarget: TruthyOrFalsy, domObserverTarget: HTMLElement, domObserverOptions: DOMObserverOptions | undefined) => TruthyOrFalsy; -export declare type DOMObserverIgnoreTargetAttrChange = (target: Node, attributeName: string, oldAttributeValue: string | null, newAttributeValue: string | null) => TruthyOrFalsy; +export declare type DOMObserverEventContentChange = Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined> | false | null | undefined; +export declare type DOMObserverIgnoreContentChange = (mutation: MutationRecord, isNestedTarget: boolean, domObserverTarget: HTMLElement, domObserverOptions: DOMObserverOptions | undefined) => boolean; +export declare type DOMObserverIgnoreTargetAttrChange = (target: Node, attributeName: string, oldAttributeValue: string | null, newAttributeValue: string | null) => boolean; export interface DOMObserverOptions { _observeContent?: boolean; _attributes?: string[]; diff --git a/packages/overlayscrollbars/types/support/cache/cache.d.ts b/packages/overlayscrollbars/types/support/cache/cache.d.ts index f7fed0c..50640a8 100644 --- a/packages/overlayscrollbars/types/support/cache/cache.d.ts +++ b/packages/overlayscrollbars/types/support/cache/cache.d.ts @@ -6,8 +6,9 @@ export interface Cache { export interface CacheOptions { _equal?: EqualCachePropFunction; _initialValue?: T; + _alwaysUpdateValues?: boolean; } -export declare type CacheUpdate = (force?: boolean | 0, context?: C) => Cache; -export declare type UpdateCachePropFunction = (context?: C, current?: T, previous?: T) => T; +export declare type CacheUpdate = undefined extends C ? (force?: boolean | 0, context?: C) => Cache : (force: boolean | 0, context: C) => Cache; +export declare type UpdateCachePropFunction = undefined extends C ? (context?: C, current?: T, previous?: T) => T : C extends T ? ((context: C, current?: T, previous?: T) => T) | 0 : (context: C, current?: T, previous?: T) => T; export declare type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean; export declare const createCache: (update: UpdateCachePropFunction, options?: CacheOptions | undefined) => CacheUpdate;