diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index 99fe417..e1106d3 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -1,10 +1,12 @@ +const ElementNodeType = Node.ELEMENT_NODE; +const { toString, hasOwnProperty } = Object.prototype; const type = (obj) => { - if (obj === undefined) return `${obj}`; - if (obj === null) return `${obj}`; - return Object.prototype.toString - .call(obj) - .replace(/^\[object (.+)\]$/, '$1') - .toLowerCase(); + return obj === undefined || obj === null + ? `${obj}` + : toString + .call(obj) + .replace(/^\[object (.+)\]$/, '$1') + .toLowerCase(); }; function isNumber(obj) { return typeof obj === 'number'; @@ -29,17 +31,19 @@ function isObject(obj) { } function isArrayLike(obj) { const length = !!obj && obj.length; - return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); + const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; + return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false; } function isPlainObject(obj) { if (!obj || !isObject(obj) || type(obj) !== 'object') return false; let key; - const proto = 'prototype'; - const { hasOwnProperty } = Object[proto]; - const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor'); - const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf'); + const cstr = 'constructor'; + const ctor = obj[cstr]; + const ctorProto = ctor && ctor.prototype; + const hasOwnConstructor = hasOwnProperty.call(obj, cstr); + const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf'); - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) { return false; } @@ -49,14 +53,12 @@ function isPlainObject(obj) { return isUndefined(key) || hasOwnProperty.call(obj, key); } function isHTMLElement(obj) { - const instaceOfRightHandSide = window.HTMLElement; - const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide); - return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName)); + const instanceofObj = window.HTMLElement; + return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false; } -function isEmptyObject(obj) { - for (const name in obj) return false; - - return true; +function isElement(obj) { + const instanceofObj = window.Element; + return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false; } function getSetProp(topLeft, fallback, elm, value) { @@ -75,7 +77,7 @@ function attr(elm, attrName, value) { elm && elm.setAttribute(attrName, value); } const removeAttr = (elm, attrName) => { - elm == null ? void 0 : elm.removeAttribute(attrName); + elm && elm.removeAttribute(attrName); }; function scrollLeft(elm, value) { return getSetProp('scrollLeft', 0, elm, value); @@ -96,7 +98,7 @@ const classListAction = (elm, className, action) => { result = classes.length > 0; while ((clazz = classes[i++])) { - result = action(elm.classList, clazz) && result; + result = !!action(elm.classList, clazz) && result; } } @@ -119,6 +121,10 @@ function each(source, callback) { return source; } +const push = (array, items, arrayIsSingleItem) => { + !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items) : array.push(items); + return array; +}; const from = (arr) => { if (Array.from) { return Array.from(arr); @@ -126,22 +132,24 @@ const from = (arr) => { const result = []; each(arr, (elm) => { - result.push(elm); + push(result, elm); }); return result; }; const runEach = (arr, p1) => { + const runFn = (fn) => fn && fn(p1); + if (arr instanceof Set) { - arr.forEach((fn) => fn && fn(p1)); + arr.forEach(runFn); } else { - each(arr, (fn) => fn && fn(p1)); + each(arr, runFn); } }; const elmPrototype = Element.prototype; const is = (elm, selector) => { - if (elm) { + if (isElement(elm)) { const fn = elmPrototype.matches || elmPrototype.msMatchesSelector; return fn.call(elm, selector); } @@ -271,8 +279,10 @@ const supportPassiveEvents = () => { return passiveEventsSupport; }; +const splitEventNames = (eventNames) => eventNames.split(' '); + const off = (target, eventNames, listener, capture) => { - each(eventNames.split(' '), (eventName) => { + each(splitEventNames(eventNames), (eventName) => { target.removeEventListener(eventName, listener, capture); }); }; @@ -288,14 +298,14 @@ const on = (target, eventNames, listener, options) => { capture, } : capture; - each(eventNames.split(' '), (eventName) => { + each(splitEventNames(eventNames), (eventName) => { const finalListener = once ? (evt) => { target.removeEventListener(eventName, finalListener, capture); listener && listener(evt); } : listener; - offListeners.push(off.bind(null, target, eventName, finalListener, capture)); + push(offListeners, off.bind(null, target, eventName, finalListener, capture)); target.addEventListener(eventName, finalListener, nativeOptions); }); return runEach.bind(0, offListeners); @@ -320,7 +330,7 @@ const equalWH = (a, b) => equal(a, b, ['w', 'h']); const equalXY = (a, b) => equal(a, b, ['x', 'y']); const equalTRBL = (a, b) => equal(a, b, ['t', 'r', 'b', 'l']); -const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const hasOwnProperty$1 = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); const keys = (obj) => (obj ? Object.keys(obj) : []); function assignDeep(target, object1, object2, object3, object4, object5, object6) { const sources = [object1, object2, object3, object4, object5, object6]; @@ -357,6 +367,11 @@ function assignDeep(target, object1, object2, object3, object4, object5, object6 }); return target; } +function isEmptyObject(obj) { + for (const name in obj) return false; + + return true; +} const cssNumber = { animationiterationcount: 1, @@ -477,7 +492,7 @@ const cssCache = {}; const cssProperty = (name) => { let result = cssCache[name]; - if (hasOwnProperty(cssCache, name)) { + if (hasOwnProperty$1(cssCache, name)) { return result; } @@ -495,7 +510,7 @@ const cssProperty = (name) => { const jsAPI = (name) => { let result = jsCache[name] || window[name]; - if (hasOwnProperty(jsCache, name)) { + if (hasOwnProperty$1(jsCache, name)) { return result; } @@ -554,7 +569,7 @@ const validateRecursive = (options, template, optionsDiff, doWriteErrors, propPa const optionsCopy = _extends_1({}, options); - const props = keys(template).filter((prop) => hasOwnProperty(options, prop)); + const props = keys(template).filter((prop) => hasOwnProperty$1(options, prop)); each(props, (prop) => { const optionsDiffValue = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop]; const optionsValue = options[prop]; @@ -589,12 +604,12 @@ const validateRecursive = (options, template, optionsDiff, doWriteErrors, propPa if (isEnumString && isString(optionsValue)) { const enumStringSplit = currTemplateType.split(' '); isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue); - errorEnumStrings.push(...enumStringSplit); + push(errorEnumStrings, enumStringSplit); } else { isValid = optionsTemplateTypes[optionsValueType] === currTemplateType; } - errorPossibleTypes.push(isEnumString ? optionsTemplateTypes.string : typeString); + push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString); return !isValid; }); @@ -814,7 +829,7 @@ const getEnvironment = () => { return environmentInstance; }; -const getPropByPath = (obj, path) => obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj); +const getPropByPath = (obj, path) => obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty$1(o, prop) ? o[prop] : undefined), obj); const createLifecycleBase = (defaultOptionsWithTemplate, initialOptions, updateFunction) => { const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate); @@ -988,7 +1003,7 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { if (ResizeObserverConstructor) { const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); resizeObserverInstance.observe(listenerElement); - offListeners.push(() => resizeObserverInstance.disconnect()); + push(offListeners, () => resizeObserverInstance.disconnect()); } else { const observerElementChildren = createDOM( `
` @@ -1041,8 +1056,7 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { return false; }; - offListeners.push(on(expandElement, scrollEventName, onScroll)); - offListeners.push(on(shrinkElement, scrollEventName, onScroll)); + push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); style(expandElementChild, { width: scrollAmount, height: scrollAmount, @@ -1053,7 +1067,8 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { if (direction) { const updateDirectionCache = createCache(() => getDirection(sizeObserver)); - offListeners.push( + push( + offListeners, on(sizeObserver, scrollEventName, (event) => { const directionCache = updateDirectionCache(); const { _value, _changed } = directionCache; @@ -1083,7 +1098,7 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => { if (appearCallback) { addClass(sizeObserver, classNameSizeObserverAppear); - offListeners.push(on(sizeObserver, animationStartEventName, appearCallback)); + push(offListeners, on(sizeObserver, animationStartEventName, appearCallback)); } prependChildren(target, sizeObserver); @@ -1123,9 +1138,10 @@ const createTrinsicObserver = (target, onTrinsicChangedCallback) => { } ); intersectionObserverInstance.observe(trinsicObserver); - offListeners.push(() => intersectionObserverInstance.disconnect()); + push(offListeners, () => intersectionObserverInstance.disconnect()); } else { - offListeners.push( + push( + offListeners, createSizeObserver(trinsicObserver, () => { const newSize = offsetSize(trinsicObserver); const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); @@ -1182,7 +1198,7 @@ const OverlayScrollbars = (target, options, extensions) => { const osTarget = normalizeTarget(target); const lifecycles = []; const { host } = osTarget; - lifecycles.push(createStructureLifecycle(osTarget)); + push(lifecycles, createStructureLifecycle(osTarget)); const onSizeChanged = (directionCache) => { if (directionCache) { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 5dcc182..4f8b1e7 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/dom/class.ts","../src/support/utils/array.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/utils/object.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.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/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n if (obj === undefined) return `${obj}`;\r\n if (obj === null) return `${obj}`;\r\n return Object.prototype.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 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 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 return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); // eslint-disable-line eqeqeq\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 proto = 'prototype';\r\n const { hasOwnProperty } = Object[proto];\r\n const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\r\n const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\r\n\r\n if (obj.constructor && !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 instaceOfRightHandSide = window.HTMLElement;\r\n const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide);\r\n return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName));\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm?.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 { isString } from 'support/utils/types';\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) as boolean) && 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","import { isArrayLike } 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 * 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 each(arr, (elm) => {\r\n result.push(elm);\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 if (arr instanceof Set) {\r\n arr.forEach((fn) => fn && fn(p1));\r\n } else {\r\n each(arr, (fn) => fn && fn(p1));\r\n }\r\n};\r\n","import { each, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | 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): ReadonlyArray => {\r\n const arr: Array = [];\r\n\r\n each((elm || document).querySelectorAll(selector), (e: Element) => {\r\n arr.push(e);\r\n });\r\n\r\n return 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 => (elm || document).querySelector(selector);\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 (elm) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn = 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 each(elm && elm.children, (child: Element) => {\r\n if (selector) {\r\n if (is(child, selector)) {\r\n childs.push(child);\r\n }\r\n } else {\r\n childs.push(child);\r\n }\r\n });\r\n\r\n return 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 (elm) {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n if (elmPrototype.closest) {\r\n return elm.closest(selector);\r\n }\r\n do {\r\n if (is(elm, selector)) {\r\n return elm;\r\n }\r\n elm = parent(elm);\r\n } while (elm !== null && elm.nodeType === 1);\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 = closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = 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 as Element), 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 as Element), 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 as Element);\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 { each, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (passiveEventsSupport === undefined) {\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\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(eventNames.split(' '), (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(eventNames.split(' '), (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 offListeners.push(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 { 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","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","import { each, hasOwnProperty } from 'support/utils';\r\nimport { createDiv } from 'support/dom';\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","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 } from 'support/utils';\r\nimport { type, isArray, isUndefined, isEmptyObject, 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 = typeString === undefined;\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 errorEnumStrings.push(...enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n errorPossibleTypes.push(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; // eslint-disable-line @typescript-eslint/ban-types\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 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 offListeners.push(() => 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 offListeners.push(on(expandElement, scrollEventName, onScroll));\r\n offListeners.push(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 offListeners.push(\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 offListeners.push(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 { WH, Cache, createDOM, offsetSize, runEach, prependChildren, removeElements, createCache, IntersectionObserverConstructor } 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 offListeners.push(() => intersectionObserverInstance.disconnect());\r\n } else {\r\n offListeners.push(\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 { OSTarget, OSTargetObject, CSSDirection } from 'typings';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { Cache, appendChildren, addClass, contents, is, isHTMLElement, createDiv, each } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\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 } = osTarget;\r\n\r\n lifecycles.push(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};\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":["type","obj","undefined","Object","prototype","toString","call","replace","toLowerCase","isNumber","isString","isFunction","isUndefined","isNull","isArray","Array","isObject","isArrayLike","length","isPlainObject","key","proto","hasOwnProperty","hasOwnConstructor","hasIsPrototypeOf","constructor","isHTMLElement","instaceOfRightHandSide","window","HTMLElement","doInstanceOf","nodeType","nodeName","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","keys","from","arr","push","runEach","p1","Set","forEach","fn","elmPrototype","Element","is","selector","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","document","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","off","target","eventNames","listener","capture","split","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","prop","equalWH","equalXY","equalTRBL","assignDeep","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","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","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","find","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","_extends","module","assign","arguments","apply","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","item","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","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/dom/class.ts","../src/support/utils/array.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/utils/object.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.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/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 const type: (obj: any) => string = (obj) => {\r\n return obj === undefined || obj === null\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 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 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 { isString } from 'support/utils/types';\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","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 { 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 { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (passiveEventsSupport === undefined) {\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 { 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 { 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","import { each, hasOwnProperty } from 'support/utils';\r\nimport { createDiv } from 'support/dom';\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","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 = typeString === undefined;\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 { 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 { 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 } = 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};\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","type","obj","undefined","call","replace","toLowerCase","isNumber","isString","isFunction","isUndefined","isNull","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","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","keys","push","array","items","arrayIsSingleItem","apply","from","arr","runEach","p1","runFn","fn","Set","forEach","elmPrototype","is","selector","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","document","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","target","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","prop","equalWH","equalXY","equalTRBL","assignDeep","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","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","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","find","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","_extends","module","assign","arguments","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","item","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","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 e918c86..102517d 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -const t=t=>null==t?""+t:Object.prototype.toString.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function e(t){return"number"==typeof t}function n(t){return"string"==typeof t}function o(t){return"function"==typeof t}function r(t){return void 0===t}function i(t){return null===t}function s(t){return Array.isArray(t)}function c(t){return"object"==typeof t&&!s(t)&&!i(t)}function l(t){const n=!!t&&t.length;return s(t)||!o(t)&&e(n)&&n>-1&&n%1==0}function a(e){if(!e||!c(e)||"object"!==t(e))return!1;let n;const{hasOwnProperty:o}=Object.prototype,i=o.call(e,"constructor"),s=e.constructor&&e.constructor.prototype&&o.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!i&&!s)return!1;for(n in e);return r(n)||o.call(e,n)}function d(t){for(const e in t)return!1;return!0}function u(t,e,n,o){if(r(o))return n?n[t]:e;n&&(n[t]=o)}const v=(t,e)=>{null==t||t.removeAttribute(e)};function f(t,e){return u("scrollLeft",0,t,e)}function h(t,e){return u("scrollTop",0,t,e)}const b=/[^\x20\t\r\n\f]+/g,w=(t,e)=>{((t,e,o)=>{let r,i=0,s=!1;if(t&&n(e)){const n=e.match(b)||[];for(s=n.length>0;r=n[i++];)s=o(t.classList,r)&&s}})(t,e,(t,e)=>t.add(e))};function p(t,e){if(l(t))for(let n=0;ne(t[n],n,t));return t}const _=t=>{if(Array.from)return Array.from(t);const e=[];return p(t,t=>{e.push(t)}),e},g=(t,e)=>{t instanceof Set?t.forEach(t=>t&&t(e)):p(t,t=>t&&t(e))},m=Element.prototype,y=t=>t?_(t.childNodes):[],x=(t,e,n)=>{if(n){let o,r=e;t&&(l(n)?(o=document.createDocumentFragment(),p(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))}},z=(t,e)=>{x(t,null,e)},O=(t,e)=>{x(t,t&&t.firstChild,e)},S=t=>{if(l(t))p(_(t),t=>S(t));else if(t){const n=(e=t)?e.parentElement:null;n&&n.removeChild(t)}var e},j=t=>{const e=document.createElement("div");return t&&function(t,e,n){if(r(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)}(e,"class",t),e},A=t=>{const e=j();return e.innerHTML=t.trim(),p(y(e),t=>S(t))},M={w:0,h:0},$=()=>({w:window.innerWidth,h:window.innerHeight}),k=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:M;let L;const T=(t,e,n,o)=>{p(e.split(" "),e=>{t.removeEventListener(e,n,o)})},q=(t,e,n,o)=>{const r=(()=>{if(void 0===L){L=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){L=!0}}))}catch(t){}}return L})(),i=r&&o&&o.o||!1,s=o&&o.s||!1,c=o&&o.u||!1,l=[],a=r?{passive:i,capture:s}:s;return p(e.split(" "),e=>{const o=c?r=>{t.removeEventListener(e,o,s),n&&n(r)}:n;l.push(T.bind(null,t,e,o,s)),t.addEventListener(e,o,a)}),g.bind(0,l)},P=t=>t.stopPropagation(),C=t=>t.preventDefault(),F=(t,e,n)=>{if(t&&e){let o=!0;return p(n,n=>{t[n]!==e[n]&&(o=!1)}),o}return!1},I=(t,e)=>F(t,e,["w","h"]),V=(t,e)=>F(t,e,["x","y"]),B=(t,e)=>F(t,e,["t","r","b","l"]),E=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),N=t=>t?Object.keys(t):[];function Y(t,e,n,r,c,l,d){const u=[e,n,r,c,l,d];return"object"==typeof t&&!i(t)||o(t)||(t={}),p(u,e=>{p(N(e),n=>{const o=e[n];if(t===o)return!0;const r=s(o);if(o&&(a(o)||r)){const e=t[n];let i=e;r&&!s(e)?i=[]:r||a(e)||(i={}),t[n]=Y(i,o)}else t[n]=o})}),t}const G={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},J=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},K=(t,e,n)=>null!=e?e.getPropertyValue(n):t.style[n],R=(t,n,o)=>{try{t&&void 0!==t.style[n]&&(t.style[n]=((t,n)=>!G[t.toLowerCase()]&&e(n)?n+"px":n)(n,o))}catch(r){}};function U(t,e){const o=n(e);if(s(e)||o){let n=o?"":{};if(t){const r=window.getComputedStyle(t,null);n=o?K(t,r,e):e.reduce((e,n)=>(e[n]=K(t,r,n),e),n)}return n}p(N(e),n=>R(t,n,e[n]))}const W={x:0,y:0},X=t=>{const e=t?(t=>t.getBoundingClientRect())(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:W},D=(t,e)=>{const{v:n,p:o}=e||{};let r,i=o;return(e,o)=>{const s=i,c=t(o,i,r),l=e||(n?!n(s,c):s!==c);return l&&(i=c,r=s),{_:i,g:r,m:l}}},H=t=>t.charAt(0).toUpperCase()+t.slice(1),Q=["-webkit-","-moz-","-o-","-ms-"],Z=["WebKit","Moz","O","MS","webkit","moz","o","ms"],tt={},et={},nt=t=>{let e=et[t];if(E(et,t))return e;const n=H(t),o=j().style;return p(Q,r=>{const i=r.replace(/-/g,""),s=[t,r+t,i+n,H(i)+n];return e=s.find(t=>void 0!==o[t]),!e}),et[t]=e,e},ot=t=>{let e=tt[t]||window[t];return E(tt,t)||(p(Z,n=>(e=e||window[n+H(t)],!e)),tt[t]=e),e},rt=(ot("MutationObserver"),ot("IntersectionObserver")),it=ot("ResizeObserver"),st=ot("cancelAnimationFrame"),ct=ot("requestAnimationFrame");var lt=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]=dt[0]+e+dt[1],t),{}),vt=(e,o,i,c,l)=>{const u={},v=lt({},e);return p(N(o).filter(t=>E(e,t)),f=>{const h=r(i[f])?{}:i[f],b=e[f],w=o[f],_=a(w),g=l?l+".":"";if(_&&a(b)){const t=vt(b,w,h,c,g+f);u[f]=t.O,v[f]=t.S,p([v,u],t=>{d(t[f])&&delete t[f]})}else if(!_){let e=!1;const o=[],r=[],i=t(b);if(p(s(w)?w:[w],t=>{let s;p(ut,(e,n)=>{e===t&&(s=n)});const c=void 0===s;if(c&&n(b)){const n=t.split(" ");e=!!n.find(t=>t===b),o.push(...n)}else e=ut[i]===t;return r.push(c?ut.string:s),!e}),e){(s(b)||a(b)?at(b)!==at(h):b!==h)&&(u[f]=b)}else c&&console.warn(`The option "${g}${f}" wasn't set, because it doesn't accept the type [ ${i.toUpperCase()} ] with the value of "${b}".\r\nAccepted types are: [ ${r.join(", ").toUpperCase()} ].\r\n${o.length>0?`\r\nValid strings are: [ ${o.join(", ")} ].`:""}`);delete v[f]}}),{S:v,O:u}},ft=(t,e,n,o)=>vt(t,e,n||{},o||!1);let ht;const{abs:bt,round:wt}=Math,pt=(t,e)=>{z(t,e);const n=(o=e)?{w:o.clientWidth,h:o.clientHeight}:M;var o;const r=k(e);return{x:r.h-n.h,y:r.w-n.w}},_t=t=>{let e=!1;w(t,"os-viewport-scrollbar-styled");try{e="none"===U(t,"scrollbar-width")||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return e},gt=(t,e)=>{U(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),f(t,0);const n=X(t),o=X(e);f(t,-999);const r=X(e);return{i:n.x===o.x,n:o.x!==r.x}},mt=(t,e)=>{w(t,"os-environment-flexbox-glue");const n=k(t),o=k(e),r=I(o,n);w(t,"os-environment-flexbox-glue-max");const i=k(t),s=k(e),c=I(s,i);return r&&c},yt=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},xt=()=>{const{body:t}=document,e=A('
')[0],n=e.firstChild,o=new Set,r=pt(t,e),i={x:0===r.x,y:0===r.y},s={j:!1,A:r,M:i,$:_t(e),k:gt(e,n),L:mt(e,n),T(t){o.add(t)},q(t){o.delete(t)}};if(v(e,"style"),v(e,"class"),S(e),!i.x||!i.y){let n=$(),i=yt(),s=r;window.addEventListener("resize",()=>{if(o.size){const r=$(),c={w:r.w-n.w,h:r.h-n.h};if(0===c.w&&0===c.h)return;const l={w:bt(c.w),h:bt(c.h)},a={w:bt(wt(r.w/(n.w/100))),h:bt(wt(r.h/(n.h/100)))},d=yt(),u=l.w>2&&l.h>2,v=!((t,e)=>{const n=bt(t),o=bt(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h),f=d!==i&&i>0;if(u&&v&&f){const n=ht.A=pt(t,e);S(e),s.x===n.x&&s.y===n.y||g(o),s=n}n=r,i=d}})}return s},zt=()=>(ht||(ht=xt()),ht),Ot=(t,e)=>t&&e.split(".").reduce((t,e)=>t&&E(t,e)?t[e]:void 0,t),St=(t,e,n)=>{const{P:o,C:r}=function t(e){const n={P:{},C:{}};return p(N(e),o=>{const r=e[o];if(s(r))n.P[o]=r[1],n.C[o]=r[0];else{const e=t(r);n.P[o]=e.P,n.C[o]=e.C}}),n}(t),i=Y({},r,ft(e||{},o,null,!0).O),c=t=>{const{F:e,I:o}=t;n(!!e,t=>({_:Ot(i,t),m:e||void 0!==Ot(o,t)}))};return c({F:!0}),{C(t){if(t){const{O:e}=ft(t,o,i,!0);d(e)||(Y(i,e),c({I:e}))}return i},V:t=>{c({F:t})}}},jt={paddingAbsolute:[!1,ut.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},At=nt("margin-inline-end"),Mt=nt("border-inline-end"),$t=(t,e)=>{const{host:n,padding:o,viewport:r,content:i}=t,s=[],c=zt(),l=c.M,a=c.$,d=(c.L,At&&Mt||a||l.y,D(()=>((t,e)=>{const n=e||"",o=n+"-top",r=n+"-right",i=n+"-bottom",s=n+"-left",c=U(t,[o,r,i,s]);return{t:J(c[o]),r:J(c[r]),b:J(c[i]),l:J(c[s])}})(n,"padding"),{v:B})),u=D(t=>({x:Math.max(0,Math.round(100*(t.B.w-t.N.w))/100),y:Math.max(0,Math.round(100*(t.B.h-t.N.h))/100)}),{v:V}),{C:v,V:f}=St(jt,e,(t,e)=>{const{_:n,m:r}=e("paddingAbsolute"),{_:s,m:c}=d(t);if(r||c){const t={t:0,r:0,b:0,l:0};n||(t.t=-s.t,t.r=-(s.r+s.l),t.b=-(s.b+s.t),t.l=-s.l),U(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=k(o),a=k(i),v=(f=i)?{w:f.scrollWidth,h:f.scrollHeight}:M;var f;const h=u(t,{B:v,N:{w:l.w+Math.max(0,a.w-v.w),h:l.h+Math.max(0,a.h-v.h)}}),{_:b,m:w}=h;console.log("overflowAmount",b),console.log("overflowAmountChanged",w)});return{C:v,V:f,Y:()=>{f()},G:(t,e)=>{const{m:n,_:o}=e;n&&U(i,{height:o?"auto":"100%"})},J(){g(s)}}},kt=t=>U(t,"direction"),Lt=(t,e,o)=>{const{K:r=!1,R:i=!1}=o||{},s=zt().k,c=A('
')[0],l=c.firstChild,a=t=>{if(r){const t="rtl"===kt(c);f(c,t?s.n?-3333333:s.i?0:3333333:3333333),h(c,3333333)}e(n((t||{})._)?t:void 0)},d=[];let u=i?a:null;if(it){const t=new it(a);t.observe(l),d.push(()=>t.disconnect())}else{const t=A('
');z(l,t),w(l,"os-size-observer-listener-scroll");const e=t[0],n=e.lastChild,o=e.firstChild,r=null==o?void 0:o.firstChild;let s,c=k(l),v=c,b=!1;const p=()=>{f(o,3333333),h(o,3333333),f(n,3333333),h(n,3333333)},_=()=>{s=0,b&&(c=v,a())},g=t=>(v=k(l),b=!t||!I(v,c),t&&b&&!s?(st(s),s=ct(_)):t||_(),p(),t&&(C(t),P(t)),!1);d.push(q(o,"scroll",g)),d.push(q(n,"scroll",g)),U(r,{width:3333333,height:3333333}),p(),u=i?()=>g():p}if(r){const t=D(()=>kt(c));d.push(q(c,"scroll",e=>{const n=t(),{_:o,m:r}=n;return r&&(U(l,"rtl"===o?{left:"auto",right:0}:{left:0,right:"auto"}),a(n)),C(e),P(e),!1}))}return u&&(w(c,"os-size-observer-appear"),d.push(q(c,"animationstart",u))),O(t,c),()=>{g(d),S(c)}},Tt=t=>{if(function(t){const e=window.HTMLElement;return!!(c(e)||o(e)?t instanceof e:t&&c(t)&&1===t.nodeType&&n(t.nodeName))}(t)){const e=((t,e)=>{if(t){return(m.matches||m.msMatchesSelector).call(t,e)}return!1})(t,"textarea")?j():t,n=j("os-padding"),o=j("os-viewport"),r=j("os-content");return z(n,o),z(o,r),z(r,y(t)),z(t,n),w(e,"os-host"),{target:t,host:e,padding:n,viewport:o,content:r}}const{host:e,padding:r,viewport:i,content:s}=t;return w(e,"os-host"),w(r,"os-padding"),w(i,"os-viewport"),w(s,"os-content"),t},qt=(t,e,n)=>{const o=Tt(t),r=[],{host:i}=o;r.push($t(o));Lt(i,t=>{p(r,t?e=>{e.U&&e.U(t)}:t=>{t.Y&&t.Y()})},{R:!0,K:!0}),((t,e)=>{const n=A('
')[0],o=[],r=D(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{p:!1});if(rt){const i=new rt(t=>{if(t&&t.length>0){const n=t.pop();if(n){const t=r(0,n);t.m&&e(!1,t)}}},{root:t});i.observe(n),o.push(()=>i.disconnect())}else o.push(Lt(n,()=>{const t=k(n),o=r(0,t);o.m&&e(!1,o)}));O(t,n)})(i,(t,e)=>{p(r,n=>{n.G&&n.G(t,e)})})};export default()=>[zt(),qt(document.body),A('
fdfhdfgh
')]; \ No newline at end of file +const t=Node.ELEMENT_NODE,{toString:n,hasOwnProperty:e}=Object.prototype,o=t=>null==t?""+t:n.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase();function r(t){return"number"==typeof t}function i(t){return"string"==typeof t}function s(t){return"function"==typeof t}function c(t){return void 0===t}function l(t){return null===t}function a(t){return Array.isArray(t)}function d(t){return"object"==typeof t&&!a(t)&&!l(t)}function u(t){const n=!!t&&t.length,e=r(n)&&n>-1&&n%1==0;return!!(a(t)||!s(t)&&e)&&(!(n>0&&d(t))||n-1 in t)}function v(t){if(!t||!d(t)||"object"!==o(t))return!1;let n;const r=t.constructor,i=r&&r.prototype,s=e.call(t,"constructor"),l=i&&e.call(i,"isPrototypeOf");if(r&&!s&&!l)return!1;for(n in t);return c(n)||e.call(t,n)}function f(t,n,e,o){if(c(o))return e?e[t]:n;e&&(e[t]=o)}const h=(t,n)=>{t&&t.removeAttribute(n)};function w(t,n){return f("scrollLeft",0,t,n)}function b(t,n){return f("scrollTop",0,t,n)}const p=/[^\x20\t\r\n\f]+/g,_=(t,n)=>{((t,n,e)=>{let o,r=0,s=!1;if(t&&i(n)){const i=n.match(p)||[];for(s=i.length>0;o=i[r++];)s=!!e(t.classList,o)&&s}})(t,n,(t,n)=>t.add(n))};function g(t,n){if(u(t))for(let e=0;en(t[e],e,t));return t}const m=(t,n,e)=>(e||i(n)||!u(n)?t.push(n):Array.prototype.push.apply(t,n),t),y=t=>{if(Array.from)return Array.from(t);const n=[];return g(t,t=>{m(n,t)}),n},x=(t,n)=>{const e=t=>t&&t(n);t instanceof Set?t.forEach(e):g(t,e)},z=Element.prototype,O=(n,e)=>{if(function(n){const e=window.Element;return!!n&&(e?n instanceof e:n.nodeType===t)}(n)){return(z.matches||z.msMatchesSelector).call(n,e)}return!1},S=t=>t?y(t.childNodes):[],j=(t,n,e)=>{if(e){let o,r=n;t&&(u(e)?(o=document.createDocumentFragment(),g(e,t=>{t===r&&(r=t.previousSibling),o.appendChild(t)})):o=e,n&&(r?r!==n&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r))}},A=(t,n)=>{j(t,null,n)},M=(t,n)=>{j(t,t&&t.firstChild,n)},$=t=>{if(u(t))g(y(t),t=>$(t));else if(t){const e=(n=t)?n.parentElement:null;e&&e.removeChild(t)}var n},k=t=>{const n=document.createElement("div");return t&&function(t,n,e){if(c(e))return t?t.getAttribute(n):null;t&&t.setAttribute(n,e)}(n,"class",t),n},L=t=>{const n=k();return n.innerHTML=t.trim(),g(S(n),t=>$(t))},T={w:0,h:0},q=()=>({w:window.innerWidth,h:window.innerHeight}),P=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:T;let C;const F=t=>t.split(" "),I=(t,n,e,o)=>{g(F(n),n=>{t.removeEventListener(n,e,o)})},N=(t,n,e,o)=>{const r=(()=>{if(void 0===C){C=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){C=!0}}))}catch(t){}}return C})(),i=r&&o&&o.o||!1,s=o&&o.s||!1,c=o&&o.u||!1,l=[],a=r?{passive:i,capture:s}:s;return g(F(n),n=>{const o=c?r=>{t.removeEventListener(n,o,s),e&&e(r)}:e;m(l,I.bind(null,t,n,o,s)),t.addEventListener(n,o,a)}),x.bind(0,l)},V=t=>t.stopPropagation(),B=t=>t.preventDefault(),E=(t,n,e)=>{if(t&&n){let o=!0;return g(e,e=>{t[e]!==n[e]&&(o=!1)}),o}return!1},Y=(t,n)=>E(t,n,["w","h"]),G=(t,n)=>E(t,n,["x","y"]),J=(t,n)=>E(t,n,["t","r","b","l"]),K=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),R=t=>t?Object.keys(t):[];function U(t,n,e,o,r,i,c){const d=[n,e,o,r,i,c];return"object"==typeof t&&!l(t)||s(t)||(t={}),g(d,n=>{g(R(n),e=>{const o=n[e];if(t===o)return!0;const r=a(o);if(o&&(v(o)||r)){const n=t[e];let i=n;r&&!a(n)?i=[]:r||v(n)||(i={}),t[e]=U(i,o)}else t[e]=o})}),t}function W(t){for(const n in t)return!1;return!0}const X={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},D=(t,n)=>{const e=n?parseFloat(t):parseInt(t,10);return Number.isNaN(e)?0:e},H=(t,n,e)=>null!=n?n.getPropertyValue(e):t.style[e],Q=(t,n,e)=>{try{t&&void 0!==t.style[n]&&(t.style[n]=((t,n)=>!X[t.toLowerCase()]&&r(n)?n+"px":n)(n,e))}catch(o){}};function Z(t,n){const e=i(n);if(a(n)||e){let o=e?"":{};if(t){const r=window.getComputedStyle(t,null);o=e?H(t,r,n):n.reduce((n,e)=>(n[e]=H(t,r,e),n),o)}return o}g(R(n),e=>Q(t,e,n[e]))}const tt={x:0,y:0},nt=t=>{const n=t?(t=>t.getBoundingClientRect())(t):0;return n?{x:n.left+window.pageYOffset,y:n.top+window.pageXOffset}:tt},et=(t,n)=>{const{v:e,p:o}=n||{};let r,i=o;return(n,o)=>{const s=i,c=t(o,i,r),l=n||(e?!e(s,c):s!==c);return l&&(i=c,r=s),{_:i,g:r,m:l}}},ot=t=>t.charAt(0).toUpperCase()+t.slice(1),rt=["-webkit-","-moz-","-o-","-ms-"],it=["WebKit","Moz","O","MS","webkit","moz","o","ms"],st={},ct={},lt=t=>{let n=ct[t];if(K(ct,t))return n;const e=ot(t),o=k().style;return g(rt,r=>{const i=r.replace(/-/g,""),s=[t,r+t,i+e,ot(i)+e];return n=s.find(t=>void 0!==o[t]),!n}),ct[t]=n,n},at=t=>{let n=st[t]||window[t];return K(st,t)||(g(it,e=>(n=n||window[e+ot(t)],!n)),st[t]=n),n},dt=(at("MutationObserver"),at("IntersectionObserver")),ut=at("ResizeObserver"),vt=at("cancelAnimationFrame"),ft=at("requestAnimationFrame");var ht=function(t){var n={exports:{}};return t(n,n.exports),n.exports}((function(t){function n(){return t.exports=n=Object.assign||function(t){for(var n=1;n(t[n]=bt[0]+n+bt[1],t),{}),_t=(t,n,e,r,s)=>{const l={},d=ht({},t);return g(R(n).filter(n=>K(t,n)),u=>{const f=c(e[u])?{}:e[u],h=t[u],w=n[u],b=v(w),p=s?s+".":"";if(b&&v(h)){const t=_t(h,w,f,r,p+u);l[u]=t.O,d[u]=t.S,g([d,l],t=>{W(t[u])&&delete t[u]})}else if(!b){let t=!1;const n=[],e=[],s=o(h);if(g(a(w)?w:[w],o=>{let r;g(pt,(t,n)=>{t===o&&(r=n)});const c=void 0===r;if(c&&i(h)){const e=o.split(" ");t=!!e.find(t=>t===h),m(n,e)}else t=pt[s]===o;return m(e,c?pt.string:r),!t}),t){(a(h)||v(h)?wt(h)!==wt(f):h!==f)&&(l[u]=h)}else r&&console.warn(`The option "${p}${u}" wasn't set, because it doesn't accept the type [ ${s.toUpperCase()} ] with the value of "${h}".\r\nAccepted types are: [ ${e.join(", ").toUpperCase()} ].\r\n${n.length>0?`\r\nValid strings are: [ ${n.join(", ")} ].`:""}`);delete d[u]}}),{S:d,O:l}},gt=(t,n,e,o)=>_t(t,n,e||{},o||!1);let mt;const{abs:yt,round:xt}=Math,zt=(t,n)=>{A(t,n);const e=(o=n)?{w:o.clientWidth,h:o.clientHeight}:T;var o;const r=P(n);return{x:r.h-e.h,y:r.w-e.w}},Ot=t=>{let n=!1;_(t,"os-viewport-scrollbar-styled");try{n="none"===Z(t,"scrollbar-width")||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(e){}return n},St=(t,n)=>{Z(t,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),w(t,0);const e=nt(t),o=nt(n);w(t,-999);const r=nt(n);return{i:e.x===o.x,n:o.x!==r.x}},jt=(t,n)=>{_(t,"os-environment-flexbox-glue");const e=P(t),o=P(n),r=Y(o,e);_(t,"os-environment-flexbox-glue-max");const i=P(t),s=P(n),c=Y(s,i);return r&&c},At=()=>{const t=window.screen.deviceXDPI||0,n=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/n},Mt=()=>{const{body:t}=document,n=L('
')[0],e=n.firstChild,o=new Set,r=zt(t,n),i={x:0===r.x,y:0===r.y},s={j:!1,A:r,M:i,$:Ot(n),k:St(n,e),L:jt(n,e),T(t){o.add(t)},q(t){o.delete(t)}};if(h(n,"style"),h(n,"class"),$(n),!i.x||!i.y){let e=q(),i=At(),s=r;window.addEventListener("resize",()=>{if(o.size){const r=q(),c={w:r.w-e.w,h:r.h-e.h};if(0===c.w&&0===c.h)return;const l={w:yt(c.w),h:yt(c.h)},a={w:yt(xt(r.w/(e.w/100))),h:yt(xt(r.h/(e.h/100)))},d=At(),u=l.w>2&&l.h>2,v=!((t,n)=>{const e=yt(t),o=yt(n);return!(e===o||e+1===o||e-1===o)})(a.w,a.h),f=d!==i&&i>0;if(u&&v&&f){const e=mt.A=zt(t,n);$(n),s.x===e.x&&s.y===e.y||x(o),s=e}e=r,i=d}})}return s},$t=()=>(mt||(mt=Mt()),mt),kt=(t,n)=>t&&n.split(".").reduce((t,n)=>t&&K(t,n)?t[n]:void 0,t),Lt=(t,n,e)=>{const{P:o,C:r}=function t(n){const e={P:{},C:{}};return g(R(n),o=>{const r=n[o];if(a(r))e.P[o]=r[1],e.C[o]=r[0];else{const n=t(r);e.P[o]=n.P,e.C[o]=n.C}}),e}(t),i=U({},r,gt(n||{},o,null,!0).O),s=t=>{const{F:n,I:o}=t;e(!!n,t=>({_:kt(i,t),m:n||void 0!==kt(o,t)}))};return s({F:!0}),{C(t){if(t){const{O:n}=gt(t,o,i,!0);W(n)||(U(i,n),s({I:n}))}return i},N:t=>{s({F:t})}}},Tt={paddingAbsolute:[!1,pt.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},qt=lt("margin-inline-end"),Pt=lt("border-inline-end"),Ct=(t,n)=>{const{host:e,padding:o,viewport:r,content:i}=t,s=[],c=$t(),l=c.M,a=c.$,d=(c.L,qt&&Pt||a||l.y,et(()=>((t,n)=>{const e=n||"",o=e+"-top",r=e+"-right",i=e+"-bottom",s=e+"-left",c=Z(t,[o,r,i,s]);return{t:D(c[o]),r:D(c[r]),b:D(c[i]),l:D(c[s])}})(e,"padding"),{v:J})),u=et(t=>({x:Math.max(0,Math.round(100*(t.V.w-t.B.w))/100),y:Math.max(0,Math.round(100*(t.V.h-t.B.h))/100)}),{v:G}),{C:v,N:f}=Lt(Tt,n,(t,n)=>{const{_:e,m:r}=n("paddingAbsolute"),{_:s,m:c}=d(t);if(r||c){const t={t:0,r:0,b:0,l:0};e||(t.t=-s.t,t.r=-(s.r+s.l),t.b=-(s.b+s.t),t.l=-s.l),Z(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=P(o),a=P(i),v=(f=i)?{w:f.scrollWidth,h:f.scrollHeight}:T;var f;const h=u(t,{V:v,B:{w:l.w+Math.max(0,a.w-v.w),h:l.h+Math.max(0,a.h-v.h)}}),{_:w,m:b}=h;console.log("overflowAmount",w),console.log("overflowAmountChanged",b)});return{C:v,N:f,Y:()=>{f()},G:(t,n)=>{const{m:e,_:o}=n;e&&Z(i,{height:o?"auto":"100%"})},J(){x(s)}}},Ft=t=>Z(t,"direction"),It=(t,n,e)=>{const{K:o=!1,R:r=!1}=e||{},s=$t().k,c=L('
')[0],l=c.firstChild,a=t=>{if(o){const t="rtl"===Ft(c);w(c,t?s.n?-3333333:s.i?0:3333333:3333333),b(c,3333333)}n(i((t||{})._)?t:void 0)},d=[];let u=r?a:null;if(ut){const t=new ut(a);t.observe(l),m(d,()=>t.disconnect())}else{const t=L('
');A(l,t),_(l,"os-size-observer-listener-scroll");const n=t[0],e=n.lastChild,o=n.firstChild,i=null==o?void 0:o.firstChild;let s,c=P(l),v=c,f=!1;const h=()=>{w(o,3333333),b(o,3333333),w(e,3333333),b(e,3333333)},p=()=>{s=0,f&&(c=v,a())},g=t=>(v=P(l),f=!t||!Y(v,c),t&&f&&!s?(vt(s),s=ft(p)):t||p(),h(),t&&(B(t),V(t)),!1);m(d,[N(o,"scroll",g),N(e,"scroll",g)]),Z(i,{width:3333333,height:3333333}),h(),u=r?()=>g():h}if(o){const t=et(()=>Ft(c));m(d,N(c,"scroll",n=>{const e=t(),{_:o,m:r}=e;return r&&(Z(l,"rtl"===o?{left:"auto",right:0}:{left:0,right:"auto"}),a(e)),B(n),V(n),!1}))}return u&&(_(c,"os-size-observer-appear"),m(d,N(c,"animationstart",u))),M(t,c),()=>{x(d),$(c)}},Nt=n=>{if(function(n){const e=window.HTMLElement;return!!n&&(e?n instanceof e:n.nodeType===t)}(n)){const t=O(n,"textarea")?k():n,e=k("os-padding"),o=k("os-viewport"),r=k("os-content");return A(e,o),A(o,r),A(r,S(n)),A(n,e),_(t,"os-host"),{target:n,host:t,padding:e,viewport:o,content:r}}const{host:e,padding:o,viewport:r,content:i}=n;return _(e,"os-host"),_(o,"os-padding"),_(r,"os-viewport"),_(i,"os-content"),n},Vt=(t,n,e)=>{const o=Nt(t),r=[],{host:i}=o;m(r,Ct(o));It(i,t=>{g(r,t?n=>{n.U&&n.U(t)}:t=>{t.Y&&t.Y()})},{R:!0,K:!0}),((t,n)=>{const e=L('
')[0],o=[],r=et(t=>0===t.h||t.isIntersecting||t.intersectionRatio>0,{p:!1});if(dt){const i=new dt(t=>{if(t&&t.length>0){const e=t.pop();if(e){const t=r(0,e);t.m&&n(!1,t)}}},{root:t});i.observe(e),m(o,()=>i.disconnect())}else m(o,It(e,()=>{const t=P(e),o=r(0,t);o.m&&n(!1,o)}));M(t,e)})(i,(t,n)=>{g(r,e=>{e.G&&e.G(t,n)})})};export default()=>[$t(),Vt(document.body),L('
fdfhdfgh
')]; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index fdf9f34..f1cc50f 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -7,13 +7,17 @@ })(this, function () { 'use strict'; + var ElementNodeType = Node.ELEMENT_NODE; + var _Object$prototype = Object.prototype, + toString = _Object$prototype.toString, + hasOwnProperty = _Object$prototype.hasOwnProperty; var type = function type(obj) { - if (obj === undefined) return '' + obj; - if (obj === null) return '' + obj; - return Object.prototype.toString - .call(obj) - .replace(/^\[object (.+)\]$/, '$1') - .toLowerCase(); + return obj === undefined || obj === null + ? '' + obj + : toString + .call(obj) + .replace(/^\[object (.+)\]$/, '$1') + .toLowerCase(); }; function isNumber(obj) { return typeof obj === 'number'; @@ -38,17 +42,19 @@ } function isArrayLike(obj) { var length = !!obj && obj.length; - return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); + var lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; + return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false; } function isPlainObject(obj) { if (!obj || !isObject(obj) || type(obj) !== 'object') return false; var key; - var proto = 'prototype'; - var hasOwnProperty = Object[proto].hasOwnProperty; - var hasOwnConstructor = hasOwnProperty.call(obj, 'constructor'); - var hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf'); + var cstr = 'constructor'; + var ctor = obj[cstr]; + var ctorProto = ctor && ctor.prototype; + var hasOwnConstructor = hasOwnProperty.call(obj, cstr); + var hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf'); - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) { return false; } @@ -58,16 +64,12 @@ return isUndefined(key) || hasOwnProperty.call(obj, key); } function isHTMLElement(obj) { - var instaceOfRightHandSide = window.HTMLElement; - var doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide); - return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName)); + var instanceofObj = window.HTMLElement; + return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false; } - function isEmptyObject(obj) { - for (var name in obj) { - return false; - } - - return true; + function isElement(obj) { + var instanceofObj = window.Element; + return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false; } function getSetProp(topLeft, fallback, elm, value) { @@ -86,7 +88,7 @@ elm && elm.setAttribute(attrName, value); } var removeAttr = function removeAttr(elm, attrName) { - elm == null ? void 0 : elm.removeAttribute(attrName); + elm && elm.removeAttribute(attrName); }; function scrollLeft(elm, value) { return getSetProp('scrollLeft', 0, elm, value); @@ -107,7 +109,7 @@ result = classes.length > 0; while ((clazz = classes[i++])) { - result = action(elm.classList, clazz) && result; + result = !!action(elm.classList, clazz) && result; } } @@ -134,6 +136,10 @@ return source; } + var push = function push(array, items, arrayIsSingleItem) { + !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items) : array.push(items); + return array; + }; var from = function from(arr) { if (Array.from) { return Array.from(arr); @@ -141,26 +147,26 @@ var result = []; each(arr, function (elm) { - result.push(elm); + push(result, elm); }); return result; }; var runEach = function runEach(arr, p1) { + var runFn = function runFn(fn) { + return fn && fn(p1); + }; + if (arr instanceof Set) { - arr.forEach(function (fn) { - return fn && fn(p1); - }); + arr.forEach(runFn); } else { - each(arr, function (fn) { - return fn && fn(p1); - }); + each(arr, runFn); } }; var elmPrototype = Element.prototype; var is = function is(elm, selector) { - if (elm) { + if (isElement(elm)) { var fn = elmPrototype.matches || elmPrototype.msMatchesSelector; return fn.call(elm, selector); } @@ -305,8 +311,12 @@ return passiveEventsSupport; }; + var splitEventNames = function splitEventNames(eventNames) { + return eventNames.split(' '); + }; + var off = function off(target, eventNames, listener, capture) { - each(eventNames.split(' '), function (eventName) { + each(splitEventNames(eventNames), function (eventName) { target.removeEventListener(eventName, listener, capture); }); }; @@ -322,14 +332,14 @@ capture: capture, } : capture; - each(eventNames.split(' '), function (eventName) { + each(splitEventNames(eventNames), function (eventName) { var finalListener = once ? function (evt) { target.removeEventListener(eventName, finalListener, capture); listener && listener(evt); } : listener; - offListeners.push(off.bind(null, target, eventName, finalListener, capture)); + push(offListeners, off.bind(null, target, eventName, finalListener, capture)); target.addEventListener(eventName, finalListener, nativeOptions); }); return runEach.bind(0, offListeners); @@ -364,7 +374,7 @@ return equal(a, b, ['t', 'r', 'b', 'l']); }; - var hasOwnProperty = function hasOwnProperty(obj, prop) { + var hasOwnProperty$1 = function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }; var keys = function keys(obj) { @@ -405,6 +415,13 @@ }); return target; } + function isEmptyObject(obj) { + for (var name in obj) { + return false; + } + + return true; + } var cssNumber = { animationiterationcount: 1, @@ -538,7 +555,7 @@ var cssProperty = function cssProperty(name) { var result = cssCache[name]; - if (hasOwnProperty(cssCache, name)) { + if (hasOwnProperty$1(cssCache, name)) { return result; } @@ -558,7 +575,7 @@ var jsAPI = function jsAPI(name) { var result = jsCache[name] || window[name]; - if (hasOwnProperty(jsCache, name)) { + if (hasOwnProperty$1(jsCache, name)) { return result; } @@ -618,7 +635,7 @@ var optionsCopy = _extends_1({}, options); var props = keys(template).filter(function (prop) { - return hasOwnProperty(options, prop); + return hasOwnProperty$1(options, prop); }); each(props, function (prop) { var optionsDiffValue = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop]; @@ -656,12 +673,12 @@ isValid = !!enumStringSplit.find(function (possibility) { return possibility === optionsValue; }); - errorEnumStrings.push.apply(errorEnumStrings, enumStringSplit); + push(errorEnumStrings, enumStringSplit); } else { isValid = optionsTemplateTypes[optionsValueType] === currTemplateType; } - errorPossibleTypes.push(isEnumString ? optionsTemplateTypes.string : typeString); + push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString); return !isValid; }); @@ -893,7 +910,7 @@ return ( obj && path.split('.').reduce(function (o, prop) { - return o && hasOwnProperty(o, prop) ? o[prop] : undefined; + return o && hasOwnProperty$1(o, prop) ? o[prop] : undefined; }, obj) ); }; @@ -1101,7 +1118,7 @@ if (ResizeObserverConstructor) { var resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); resizeObserverInstance.observe(listenerElement); - offListeners.push(function () { + push(offListeners, function () { return resizeObserverInstance.disconnect(); }); } else { @@ -1166,8 +1183,7 @@ return false; }; - offListeners.push(on(expandElement, scrollEventName, onScroll)); - offListeners.push(on(shrinkElement, scrollEventName, onScroll)); + push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]); style(expandElementChild, { width: scrollAmount, height: scrollAmount, @@ -1184,7 +1200,8 @@ var updateDirectionCache = createCache(function () { return getDirection(sizeObserver); }); - offListeners.push( + push( + offListeners, on(sizeObserver, scrollEventName, function (event) { var directionCache = updateDirectionCache(); var _value = directionCache._value, @@ -1215,7 +1232,7 @@ if (appearCallback) { addClass(sizeObserver, classNameSizeObserverAppear); - offListeners.push(on(sizeObserver, animationStartEventName, appearCallback)); + push(offListeners, on(sizeObserver, animationStartEventName, appearCallback)); } prependChildren(target, sizeObserver); @@ -1257,11 +1274,12 @@ } ); intersectionObserverInstance.observe(trinsicObserver); - offListeners.push(function () { + push(offListeners, function () { return intersectionObserverInstance.disconnect(); }); } else { - offListeners.push( + push( + offListeners, createSizeObserver(trinsicObserver, function () { var newSize = offsetSize(trinsicObserver); var heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize); @@ -1321,7 +1339,7 @@ var osTarget = normalizeTarget(target); var lifecycles = []; var host = osTarget.host; - lifecycles.push(createStructureLifecycle(osTarget)); + push(lifecycles, createStructureLifecycle(osTarget)); var onSizeChanged = function onSizeChanged(directionCache) { if (directionCache) { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 3ed4a25..3f8c4aa 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/dom/class.ts","../src/support/utils/array.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/utils/object.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.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/overlayscrollbars/overlayscrollbars.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n if (obj === undefined) return `${obj}`;\r\n if (obj === null) return `${obj}`;\r\n return Object.prototype.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 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 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 return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); // eslint-disable-line eqeqeq\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 proto = 'prototype';\r\n const { hasOwnProperty } = Object[proto];\r\n const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\r\n const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\r\n\r\n if (obj.constructor && !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 instaceOfRightHandSide = window.HTMLElement;\r\n const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide);\r\n return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName));\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm?.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 { isString } from 'support/utils/types';\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) as boolean) && 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","import { isArrayLike } 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 * 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 each(arr, (elm) => {\r\n result.push(elm);\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 if (arr instanceof Set) {\r\n arr.forEach((fn) => fn && fn(p1));\r\n } else {\r\n each(arr, (fn) => fn && fn(p1));\r\n }\r\n};\r\n","import { each, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | 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): ReadonlyArray => {\r\n const arr: Array = [];\r\n\r\n each((elm || document).querySelectorAll(selector), (e: Element) => {\r\n arr.push(e);\r\n });\r\n\r\n return 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 => (elm || document).querySelector(selector);\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 (elm) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn = 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 each(elm && elm.children, (child: Element) => {\r\n if (selector) {\r\n if (is(child, selector)) {\r\n childs.push(child);\r\n }\r\n } else {\r\n childs.push(child);\r\n }\r\n });\r\n\r\n return 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 (elm) {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n if (elmPrototype.closest) {\r\n return elm.closest(selector);\r\n }\r\n do {\r\n if (is(elm, selector)) {\r\n return elm;\r\n }\r\n elm = parent(elm);\r\n } while (elm !== null && elm.nodeType === 1);\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 = closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = 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 as Element), 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 as Element), 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 as Element);\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 { each, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (passiveEventsSupport === undefined) {\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\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(eventNames.split(' '), (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(eventNames.split(' '), (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 offListeners.push(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 { 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","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","import { each, hasOwnProperty } from 'support/utils';\r\nimport { createDiv } from 'support/dom';\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","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 } from 'support/utils';\r\nimport { type, isArray, isUndefined, isEmptyObject, 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 = typeString === undefined;\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 errorEnumStrings.push(...enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n errorPossibleTypes.push(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; // eslint-disable-line @typescript-eslint/ban-types\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 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 offListeners.push(() => 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 offListeners.push(on(expandElement, scrollEventName, onScroll));\r\n offListeners.push(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 offListeners.push(\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 offListeners.push(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 { WH, Cache, createDOM, offsetSize, runEach, prependChildren, removeElements, createCache, IntersectionObserverConstructor } 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 offListeners.push(() => intersectionObserverInstance.disconnect());\r\n } else {\r\n offListeners.push(\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 { OSTarget, OSTargetObject, CSSDirection } from 'typings';\r\nimport { createStructureLifecycle } from 'lifecycles/structureLifecycle';\r\nimport { Cache, appendChildren, addClass, contents, is, isHTMLElement, createDiv, each } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\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 } = osTarget;\r\n\r\n lifecycles.push(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};\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":["type","obj","undefined","Object","prototype","toString","call","replace","toLowerCase","isNumber","isString","isFunction","isUndefined","isNull","isArray","Array","isObject","isArrayLike","length","isPlainObject","key","proto","hasOwnProperty","hasOwnConstructor","hasIsPrototypeOf","constructor","isHTMLElement","instaceOfRightHandSide","window","HTMLElement","doInstanceOf","nodeType","nodeName","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","keys","from","arr","push","runEach","p1","Set","forEach","fn","elmPrototype","Element","is","selector","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","document","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","off","target","eventNames","listener","capture","split","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","prop","equalWH","equalXY","equalTRBL","assignDeep","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","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","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","find","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","_extends","module","assign","arguments","apply","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","item","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","normalizeTarget","isTextarea","OverlayScrollbars","extensions","osTarget","lifecycles","lifecycle","_onDirectionChanged"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/dom/class.ts","../src/support/utils/array.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/utils/object.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/cache/cache.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.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/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 const type: (obj: any) => string = (obj) => {\r\n return obj === undefined || obj === null\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 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 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 { isString } from 'support/utils/types';\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","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 { 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 { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (passiveEventsSupport === undefined) {\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 { 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 { 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","import { each, hasOwnProperty } from 'support/utils';\r\nimport { createDiv } from 'support/dom';\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","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 = typeString === undefined;\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 { 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 { 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 } = 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};\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","type","obj","undefined","call","replace","toLowerCase","isNumber","isString","isFunction","isUndefined","isNull","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","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","keys","push","array","items","arrayIsSingleItem","apply","from","arr","runEach","p1","runFn","fn","Set","forEach","elmPrototype","is","selector","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","document","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","target","listener","capture","eventName","removeEventListener","on","options","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","prop","equalWH","equalXY","equalTRBL","assignDeep","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","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","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","find","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","_extends","module","assign","arguments","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","item","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","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 b78aa9c..1d9f4a1 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=function(n){return null==n?""+n:Object.prototype.toString.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function r(n){return"number"==typeof n}function t(n){return"string"==typeof n}function i(n){return"function"==typeof n}function e(n){return void 0===n}function o(n){return null===n}function u(n){return Array.isArray(n)}function c(n){return"object"==typeof n&&!u(n)&&!o(n)}function a(n){var t=!!n&&n.length;return u(n)||!i(n)&&r(t)&&t>-1&&t%1==0}function f(r){if(!r||!c(r)||"object"!==n(r))return!1;var t,i=Object.prototype.hasOwnProperty,o=i.call(r,"constructor"),u=r.constructor&&r.constructor.prototype&&i.call(r.constructor.prototype,"isPrototypeOf");if(r.constructor&&!o&&!u)return!1;for(t in r);return e(t)||i.call(r,t)}function s(n){for(var r in n)return!1;return!0}function l(n,r,t,i){if(e(i))return t?t[n]:r;t&&(t[n]=i)}var v=function(n,r){null==n||n.removeAttribute(r)};function d(n,r){return l("scrollLeft",0,n,r)}function h(n,r){return l("scrollTop",0,n,r)}var b=/[^\x20\t\r\n\f]+/g,w=function(n,r){!function(n,r,i){var e,o=0,u=!1;if(n&&t(r)){var c=r.match(b)||[];for(u=c.length>0;e=c[o++];)u=i(n.classList,e)&&u}}(n,r,(function(n,r){return n.add(r)}))};function p(n,r){if(a(n))for(var t=0;t0?"\r\nValid strings are: [ "+z.join(", ")+" ].":""));delete d[h]}})),{j:d,O:v}}(r,i,o||{},c||!1)};var hn,bn=Math.abs,wn=Math.round,pn=function(n,r){O(n,r);var t,i=(t=r)?{w:t.clientWidth,h:t.clientHeight}:T,e=L(r);return{x:e.h-i.h,y:e.w-i.w}},mn=function(n){var r=!1;w(n,"os-viewport-scrollbar-styled");try{r="none"===U(n,"scrollbar-width")||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(t){}return r},gn=function(n,r){U(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),d(n,0);var t=X(n),i=X(r);d(n,-999);var e=X(r);return{i:t.x===i.x,n:i.x!==e.x}},_n=function(n,r){w(n,"os-environment-flexbox-glue");var t=L(n),i=L(r),e=B(i,t);w(n,"os-environment-flexbox-glue-max");var o=L(n),u=L(r),c=B(u,o);return e&&c},yn=function(){var n=window.screen.deviceXDPI||0,r=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/r},xn=function(){var n=document.body,r=A('
')[0],t=r.firstChild,i=new Set,e=pn(n,r),o={x:0===e.x,y:0===e.y},u={S:!1,M:e,A:o,T:mn(r),k:gn(r,t),L:_n(r,t),q:function(n){i.add(n)},C:function(n){i.delete(n)}};if(v(r,"style"),v(r,"class"),S(r),!o.x||!o.y){var c=k(),a=yn(),f=e;window.addEventListener("resize",(function(){if(i.size){var t=k(),e={w:t.w-c.w,h:t.h-c.h};if(0===e.w&&0===e.h)return;var o={w:bn(e.w),h:bn(e.h)},u={w:bn(wn(t.w/(c.w/100))),h:bn(wn(t.h/(c.h/100)))},s=yn(),l=o.w>2&&o.h>2,v=(h=u.h,b=bn(u.w),w=bn(h),!(b!==w&&b+1!==w&&b-1!==w));if(l&&v&&(s!==a&&a>0)){var d=hn.M=pn(n,r);S(r),f.x===d.x&&f.y===d.y||_(i),f=d}c=t,a=s}var h,b,w}))}return u},zn=function(){return hn||(hn=xn()),hn},On=function(n,r){return n&&r.split(".").reduce((function(n,r){return n&&V(n,r)?n[r]:void 0}),n)},jn=function(n,r,t){var i=function n(r){var t={F:{},I:{}};return p(Y(r),(function(i){var e=r[i];if(u(e))t.F[i]=e[1],t.I[i]=e[0];else{var o=n(e);t.F[i]=o.F,t.I[i]=o.I}})),t}(n),e=i.F,o=$({},i.I,dn(r||{},e,null,!0).O),c=function(n){var r=n.P,i=n.B;t(!!r,(function(n){return{m:On(o,n),_:r||void 0!==On(i,n)}}))};return c({P:!0}),{I:function(n){if(n){var r=dn(n,e,o,!0).O;s(r)||($(o,r),c({B:r}))}return o},N:function(n){c({P:n})}}},Sn={paddingAbsolute:[!1,vn.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},Mn=tn("margin-inline-end"),An=tn("border-inline-end"),Tn=function(n,r){var t=n.host,i=n.padding,e=(n.viewport,n.content),o=[],u=zn(),c=u.A,a=u.T,f=(u.L,Mn&&An||a||c.y,D((function(){return u=U(t,[r=(n="padding"||"")+"-top",i=n+"-right",e=n+"-bottom",o=n+"-left"]),{t:J(u[r]),r:J(u[i]),b:J(u[e]),l:J(u[o])};var n,r,i,e,o,u}),{v:N})),s=D((function(n){return{x:Math.max(0,Math.round(100*(n.V.w-n.Y.w))/100),y:Math.max(0,Math.round(100*(n.V.h-n.Y.h))/100)}}),{v:E}),l=jn(Sn,r,(function(n,r){var t=r("paddingAbsolute"),o=t.m,u=t._,c=f(n),a=c.m,l=c._;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),U(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=L(i),b=L(e),w=(d=e)?{w:d.scrollWidth,h:d.scrollHeight}:T,p=s(n,{V:w,Y:{w:h.w+Math.max(0,b.w-w.w),h:h.h+Math.max(0,b.h-w.h)}}),m=p.m,g=p._;console.log("overflowAmount",m),console.log("overflowAmountChanged",g)})),v=l.I,d=l.N;return{I:v,N:d,$:function(){d()},G:function(n,r){var t=r._,i=r.m;t&&U(e,{height:i?"auto":"100%"})},J:function(){_(o)}}},kn=function(n){return U(n,"direction")},Ln=function(n,r,i){var e=i||{},o=e.K,u=void 0!==o&&o,c=e.R,a=void 0!==c&&c,f=zn().k,s=A('
')[0],l=s.firstChild,v=function(n){if(u){var i="rtl"===kn(s);d(s,i?f.n?-3333333:f.i?0:3333333:3333333),h(s,3333333)}r(t((n||{}).m)?n:void 0)},b=[],p=a?v:null;if(un){var m=new un(v);m.observe(l),b.push((function(){return m.disconnect()}))}else{var g=A('
');O(l,g),w(l,"os-size-observer-listener-scroll");var y,x=g[0],z=x.lastChild,M=x.firstChild,T=null==M?void 0:M.firstChild,k=L(l),q=k,P=!1,E=function(){d(M,3333333),h(M,3333333),d(z,3333333),h(z,3333333)},N=function(){y=0,P&&(k=q,v())},V=function(n){return q=L(l),P=!n||!B(q,k),n&&P&&!y?(cn(y),y=an(N)):n||N(),E(),n&&(I(n),F(n)),!1};b.push(C(M,"scroll",V)),b.push(C(z,"scroll",V)),U(T,{width:3333333,height:3333333}),E(),p=a?function(){return V()}:E}if(u){var Y=D((function(){return kn(s)}));b.push(C(s,"scroll",(function(n){var r=Y(),t=r.m;return r._&&(U(l,"rtl"===t?{left:"auto",right:0}:{left:0,right:"auto"}),v(r)),I(n),F(n),!1})))}return p&&(w(s,"os-size-observer-appear"),b.push(C(s,"animationstart",p))),j(n,s),function(){_(b),S(s)}},qn=function(n){if(s=n,c(l=window.HTMLElement)||i(l)?s instanceof l:s&&c(s)&&1===s.nodeType&&t(s.nodeName)){var r=(f="textarea",!!(a=n)&&(y.matches||y.msMatchesSelector).call(a,f))?M():n,e=M("os-padding"),o=M("os-viewport"),u=M("os-content");return O(e,o),O(o,u),O(u,x(n)),O(n,e),w(r,"os-host"),{target:n,host:r,padding:e,viewport:o,content:u}}var a,f,s,l,v=n.host,d=n.padding,h=n.viewport,b=n.content;return w(v,"os-host"),w(d,"os-padding"),w(h,"os-viewport"),w(b,"os-content"),n},Cn=function(n,r,t){var i=qn(n),e=[],o=i.host;e.push(Tn(i));Ln(o,(function(n){p(e,n?function(r){r.U&&r.U(n)}:function(n){n.$&&n.$()})}),{R:!0,K:!0}),function(n,r){var t=A('
')[0],i=[],e=D((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{p:!1});if(on){var o=new on((function(n){if(n&&n.length>0){var t=n.pop();if(t){var i=e(0,t);i._&&r(!1,i)}}}),{root:n});o.observe(t),i.push((function(){return o.disconnect()}))}else i.push(Ln(t,(function(){var n=L(t),i=e(0,n);i._&&r(!1,i)})));j(n,t)}(o,(function(n,r){p(e,(function(t){t.G&&t.G(n,r)}))}))};return function(){return[zn(),Cn(document.body),A('
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,e=function(n){return null==n?""+n:t.call(n).replace(/^\[object (.+)\]$/,"$1").toLowerCase()};function o(n){return"number"==typeof n}function u(n){return"string"==typeof n}function c(n){return"function"==typeof n}function a(n){return void 0===n}function f(n){return null===n}function s(n){return Array.isArray(n)}function l(n){return"object"==typeof n&&!s(n)&&!f(n)}function v(n){var r=!!n&&n.length,t=o(r)&&r>-1&&r%1==0;return!!(s(n)||!c(n)&&t)&&(!(r>0&&l(n))||r-1 in n)}function d(n){if(!n||!l(n)||"object"!==e(n))return!1;var r,t=n.constructor,o=t&&t.prototype,u=i.call(n,"constructor"),c=o&&i.call(o,"isPrototypeOf");if(t&&!u&&!c)return!1;for(r in n);return a(r)||i.call(n,r)}function h(n,r,t,i){if(a(i))return t?t[n]:r;t&&(t[n]=i)}var b=function(n,r){n&&n.removeAttribute(r)};function w(n,r){return h("scrollLeft",0,n,r)}function p(n,r){return h("scrollTop",0,n,r)}var m=/[^\x20\t\r\n\f]+/g,g=function(n,r){!function(n,r,t){var i,e=0,o=!1;if(n&&u(r)){var c=r.match(m)||[];for(o=c.length>0;i=c[e++];)o=!!t(n.classList,i)&&o}}(n,r,(function(n,r){return n.add(r)}))};function _(n,r){if(v(n))for(var t=0;t0?"\r\nValid strings are: [ "+z.join(", ")+" ].":""));delete l[v]}})),{S:l,O:f}}(n,r,t||{},i||!1)};var yn,xn=Math.abs,zn=Math.round,On=function(n,r){T(n,r);var t,i=(t=r)?{w:t.clientWidth,h:t.clientHeight}:F,e=N(r);return{x:e.h-i.h,y:e.w-i.w}},Sn=function(n){var r=!1;g(n,"os-viewport-scrollbar-styled");try{r="none"===nn(n,"scrollbar-width")||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(t){}return r},jn=function(n,r){nn(n,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),w(n,0);var t=tn(n),i=tn(r);w(n,-999);var e=tn(r);return{i:t.x===i.x,n:i.x!==e.x}},An=function(n,r){g(n,"os-environment-flexbox-glue");var t=N(n),i=N(r),e=G(i,t);g(n,"os-environment-flexbox-glue-max");var o=N(n),u=N(r),c=G(u,o);return e&&c},Mn=function(){var n=window.screen.deviceXDPI||0,r=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/r},Tn=function(){var n=document.body,r=C('
')[0],t=r.firstChild,i=new Set,e=On(n,r),o={x:0===e.x,y:0===e.y},u={j:!1,A:e,M:o,T:Sn(r),k:jn(r,t),L:An(r,t),q:function(n){i.add(n)},C:function(n){i.delete(n)}};if(b(r,"style"),b(r,"class"),L(r),!o.x||!o.y){var c=I(),a=Mn(),f=e;window.addEventListener("resize",(function(){if(i.size){var t=I(),e={w:t.w-c.w,h:t.h-c.h};if(0===e.w&&0===e.h)return;var o={w:xn(e.w),h:xn(e.h)},u={w:xn(zn(t.w/(c.w/100))),h:xn(zn(t.h/(c.h/100)))},s=Mn(),l=o.w>2&&o.h>2,v=(h=u.h,b=xn(u.w),w=xn(h),!(b!==w&&b+1!==w&&b-1!==w));if(l&&v&&(s!==a&&a>0)){var d=yn.A=On(n,r);L(r),f.x===d.x&&f.y===d.y||O(i),f=d}c=t,a=s}var h,b,w}))}return u},kn=function(){return yn||(yn=Tn()),yn},Ln=function(n,r){return n&&r.split(".").reduce((function(n,r){return n&&R(n,r)?n[r]:void 0}),n)},qn=function(n,r,t){var i=function n(r){var t={F:{},I:{}};return _(U(r),(function(i){var e=r[i];if(s(e))t.F[i]=e[1],t.I[i]=e[0];else{var o=n(e);t.F[i]=o.F,t.I[i]=o.I}})),t}(n),e=i.F,o=W({},i.I,_n(r||{},e,null,!0).O),u=function(n){var r=n.N,i=n.P;t(!!r,(function(n){return{m:Ln(o,n),_:r||void 0!==Ln(i,n)}}))};return u({N:!0}),{I:function(n){if(n){var r=_n(n,e,o,!0).O;X(r)||(W(o,r),u({P:r}))}return o},B:function(n){u({N:n})}}},Cn={paddingAbsolute:[!1,gn.boolean],overflowBehavior:{x:["scroll","visible-hidden visible-scroll scroll hidden"],y:["scroll","visible-hidden visible-scroll scroll hidden"]}},Fn=sn("margin-inline-end"),In=sn("border-inline-end"),Nn=function(n,r){var t=n.host,i=n.padding,e=(n.viewport,n.content),o=[],u=kn(),c=u.M,a=u.T,f=(u.L,Fn&&In||a||c.y,en((function(){return u=nn(t,[r=(n="padding"||"")+"-top",i=n+"-right",e=n+"-bottom",o=n+"-left"]),{t:H(u[r]),r:H(u[i]),b:H(u[e]),l:H(u[o])};var n,r,i,e,o,u}),{v:K})),s=en((function(n){return{x:Math.max(0,Math.round(100*(n.V.w-n.Y.w))/100),y:Math.max(0,Math.round(100*(n.V.h-n.Y.h))/100)}}),{v:J}),l=qn(Cn,r,(function(n,r){var t=r("paddingAbsolute"),o=t.m,u=t._,c=f(n),a=c.m,l=c._;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),nn(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=N(i),b=N(e),w=(d=e)?{w:d.scrollWidth,h:d.scrollHeight}:F,p=s(n,{V:w,Y:{w:h.w+Math.max(0,b.w-w.w),h:h.h+Math.max(0,b.h-w.h)}}),m=p.m,g=p._;console.log("overflowAmount",m),console.log("overflowAmountChanged",g)})),v=l.I,d=l.B;return{I:v,B:d,$:function(){d()},G:function(n,r){var t=r._,i=r.m;t&&nn(e,{height:i?"auto":"100%"})},J:function(){O(o)}}},Pn=function(n){return nn(n,"direction")},Bn=function(n,r,t){var i=t||{},e=i.K,o=void 0!==e&&e,c=i.R,a=void 0!==c&&c,f=kn().k,s=C('
')[0],l=s.firstChild,v=function(n){if(o){var t="rtl"===Pn(s);w(s,t?f.n?-3333333:f.i?0:3333333:3333333),p(s,3333333)}r(u((n||{}).m)?n:void 0)},d=[],h=a?v:null;if(dn){var b=new dn(v);b.observe(l),x(d,(function(){return b.disconnect()}))}else{var m=C('
');T(l,m),g(l,"os-size-observer-listener-scroll");var _,y=m[0],z=y.lastChild,S=y.firstChild,j=null==S?void 0:S.firstChild,A=N(l),M=A,q=!1,F=function(){w(S,3333333),p(S,3333333),w(z,3333333),p(z,3333333)},I=function(){_=0,q&&(A=M,v())},P=function(n){return M=N(l),q=!n||!G(M,A),n&&q&&!_?(hn(_),_=bn(I)):n||I(),F(),n&&(Y(n),V(n)),!1};x(d,[E(S,"scroll",P),E(z,"scroll",P)]),nn(j,{width:3333333,height:3333333}),F(),h=a?function(){return P()}:F}if(o){var B=en((function(){return Pn(s)}));x(d,E(s,"scroll",(function(n){var r=B(),t=r.m;return r._&&(nn(l,"rtl"===t?{left:"auto",right:0}:{left:0,right:"auto"}),v(r)),Y(n),V(n),!1})))}return h&&(g(s,"os-size-observer-appear"),x(d,E(s,"animationstart",h))),k(n,s),function(){O(d),L(s)}},En=function(r){if(u=r,c=window.HTMLElement,u&&(c?u instanceof c:u.nodeType===n)){var t=j(r,"textarea")?q():r,i=q("os-padding"),e=q("os-viewport"),o=q("os-content");return T(i,e),T(e,o),T(o,A(r)),T(r,i),g(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 g(a,"os-host"),g(f,"os-padding"),g(s,"os-viewport"),g(l,"os-content"),r},Vn=function(n,r,t){var i=En(n),e=[],o=i.host;x(e,Nn(i));Bn(o,(function(n){_(e,n?function(r){r.U&&r.U(n)}:function(n){n.$&&n.$()})}),{R:!0,K:!0}),function(n,r){var t=C('
')[0],i=[],e=en((function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}),{p:!1});if(vn){var o=new vn((function(n){if(n&&n.length>0){var t=n.pop();if(t){var i=e(0,t);i._&&r(!1,i)}}}),{root:n});o.observe(t),x(i,(function(){return o.disconnect()}))}else x(i,Bn(t,(function(){var n=N(t),i=e(0,n);i._&&r(!1,i)})));k(n,t)}(o,(function(n,r){_(e,(function(t){t.G&&t.G(n,r)}))}))};return function(){return[kn(),Vn(document.body),C('
fdfhdfgh
')]}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/observers/domObserver.ts b/packages/overlayscrollbars/src/observers/domObserver.ts index e90b3cd..47e94c4 100644 --- a/packages/overlayscrollbars/src/observers/domObserver.ts +++ b/packages/overlayscrollbars/src/observers/domObserver.ts @@ -1,4 +1,4 @@ -import { each, indexOf, isString, MutationObserverConstructor, isEmptyArray, on, off, attr, is, find, push } from 'support'; +import { each, debounce, indexOf, isString, MutationObserverConstructor, isEmptyArray, on, off, attr, is, find, push } from 'support'; type StringNullUndefined = string | null | undefined; @@ -32,11 +32,11 @@ export const createDOMObserver = ( ): DOMObserver => { let isConnected = false; const { _observeContent, _attributes, _ignoreContentChange, _eventContentChange } = options || {}; - const eventContentChangeCallback = () => { + const eventContentChangeCallback = debounce(() => { if (isConnected) { callback([], false, true); } - }; + }); const refreshEventContentChange = (getElements: (selector: string) => Node[]) => { if (_eventContentChange) { const eventContentChanges = _eventContentChange(); @@ -104,10 +104,7 @@ export const createDOMObserver = ( refreshEventContentChange((selector) => totalAddedNodes.reduce((arr, node) => { push(arr, find(selector, node)); - if (is(node, selector)) { - push(arr, node); - } - return arr; + return is(node, selector) ? push(arr, node) : arr; }, []) ); } diff --git a/packages/overlayscrollbars/src/support/compatibility/vendors.ts b/packages/overlayscrollbars/src/support/compatibility/vendors.ts index 6ca3b02..d1ec5e4 100644 --- a/packages/overlayscrollbars/src/support/compatibility/vendors.ts +++ b/packages/overlayscrollbars/src/support/compatibility/vendors.ts @@ -1,5 +1,6 @@ -import { each, hasOwnProperty } from 'support/utils'; -import { createDiv } from 'support/dom'; +import { each } from 'support/utils/array'; +import { hasOwnProperty } from 'support/utils/object'; +import { createDiv } from 'support/dom/create'; const firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1); const getDummyStyle = (): CSSStyleDeclaration => createDiv().style; diff --git a/packages/overlayscrollbars/src/support/dom/attribute.ts b/packages/overlayscrollbars/src/support/dom/attribute.ts index a95491d..62982e6 100644 --- a/packages/overlayscrollbars/src/support/dom/attribute.ts +++ b/packages/overlayscrollbars/src/support/dom/attribute.ts @@ -36,7 +36,7 @@ export function attr(elm: HTMLElement | null, attrName: string, value?: string): * @param attrName The attribute name. */ export const removeAttr = (elm: Element | null, attrName: string): void => { - elm?.removeAttribute(attrName); + elm && elm.removeAttribute(attrName); }; /** diff --git a/packages/overlayscrollbars/src/support/dom/class.ts b/packages/overlayscrollbars/src/support/dom/class.ts index 022d7d5..ffd0794 100644 --- a/packages/overlayscrollbars/src/support/dom/class.ts +++ b/packages/overlayscrollbars/src/support/dom/class.ts @@ -10,7 +10,7 @@ const classListAction = (elm: Element | null, className: string, action: (elmCla const classes: Array = className.match(rnothtmlwhite) || []; result = classes.length > 0; while ((clazz = classes[i++])) { - result = (action(elm.classList, clazz) as boolean) && result; + result = !!action(elm.classList, clazz) && result; } } return result; diff --git a/packages/overlayscrollbars/src/support/dom/events.ts b/packages/overlayscrollbars/src/support/dom/events.ts index 4e7ee94..b9cb909 100644 --- a/packages/overlayscrollbars/src/support/dom/events.ts +++ b/packages/overlayscrollbars/src/support/dom/events.ts @@ -21,6 +21,7 @@ const supportPassiveEvents = (): boolean => { } return passiveEventsSupport; }; +const splitEventNames = (eventNames: string) => eventNames.split(' '); export interface OnOptions { _capture?: boolean; @@ -36,7 +37,7 @@ export interface OnOptions { * @param capture The options of the removed listener. */ export const off = (target: EventTarget, eventNames: string, listener: EventListener, capture?: boolean): void => { - each(eventNames.split(' '), (eventName) => { + each(splitEventNames(eventNames), (eventName) => { target.removeEventListener(eventName, listener, capture); }); }; @@ -61,7 +62,7 @@ export const on = (target: EventTarget, eventNames: string, listener: EventListe } : capture; - each(eventNames.split(' '), (eventName) => { + each(splitEventNames(eventNames), (eventName) => { const finalListener = once ? (evt: Event) => { target.removeEventListener(eventName, finalListener, capture); diff --git a/packages/overlayscrollbars/src/support/dom/manipulation.ts b/packages/overlayscrollbars/src/support/dom/manipulation.ts index db4fd39..fc8831f 100644 --- a/packages/overlayscrollbars/src/support/dom/manipulation.ts +++ b/packages/overlayscrollbars/src/support/dom/manipulation.ts @@ -69,7 +69,7 @@ export const prependChildren = (node: Node | null, children: NodeCollection): vo * @param insertedNodes The Nodes which shall be inserted. */ export const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => { - before(parent(node as Element), node, insertedNodes); + before(parent(node), node, insertedNodes); }; /** @@ -78,7 +78,7 @@ export const insertBefore = (node: Node | null, insertedNodes: NodeCollection): * @param insertedNodes The Nodes which shall be inserted. */ export const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => { - before(parent(node as Element), node && node.nextSibling, insertedNodes); + before(parent(node), node && node.nextSibling, insertedNodes); }; /** @@ -89,7 +89,7 @@ export const removeElements = (nodes: NodeCollection): void => { if (isArrayLike(nodes)) { each(from(nodes), (e) => removeElements(e)); } else if (nodes) { - const parentElm = parent(nodes as Element); + const parentElm = parent(nodes); if (parentElm) { parentElm.removeChild(nodes); } diff --git a/packages/overlayscrollbars/src/support/dom/traversal.ts b/packages/overlayscrollbars/src/support/dom/traversal.ts index e0afab1..364c90e 100644 --- a/packages/overlayscrollbars/src/support/dom/traversal.ts +++ b/packages/overlayscrollbars/src/support/dom/traversal.ts @@ -75,17 +75,17 @@ const parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentEl const closest = (elm: InputElementType, selector: string): OutputElementType => { if (isElement(elm)) { - // eslint-disable-next-line - // @ts-ignore - if (elmPrototype.closest) { - return elm.closest(selector); + const closestFn = elmPrototype.closest; + if (closestFn) { + return closestFn.call(elm, selector); } + do { if (is(elm, selector)) { return elm as Element; } elm = parent(elm); - } while (elm !== null && elm.nodeType === 1); + } while (elm); } return null; diff --git a/packages/overlayscrollbars/src/support/options/index.ts b/packages/overlayscrollbars/src/support/options/index.ts index 646cd1a..710a5b7 100644 --- a/packages/overlayscrollbars/src/support/options/index.ts +++ b/packages/overlayscrollbars/src/support/options/index.ts @@ -42,7 +42,7 @@ type OptionsTemplateTypeMap = { __TPL_array_TYPE__: Array; __TPL_function_TYPE__: Func; __TPL_null_TYPE__: null; - __TPL_object_TYPE__: object; // eslint-disable-line @typescript-eslint/ban-types + __TPL_object_TYPE__: Record; }; type OptionsTemplateValueNonEnum = | OptionsTemplateType diff --git a/packages/overlayscrollbars/src/support/options/validation.ts b/packages/overlayscrollbars/src/support/options/validation.ts index dd6c5f1..e5f1970 100644 --- a/packages/overlayscrollbars/src/support/options/validation.ts +++ b/packages/overlayscrollbars/src/support/options/validation.ts @@ -171,7 +171,7 @@ type OptionsTemplateTypesDictionary = { readonly number: OptionsTemplateType; readonly string: OptionsTemplateType; readonly array: OptionsTemplateType>; - readonly object: OptionsTemplateType; // eslint-disable-line @typescript-eslint/ban-types + readonly object: OptionsTemplateType>; readonly function: OptionsTemplateType; readonly null: OptionsTemplateType; }; diff --git a/packages/overlayscrollbars/src/support/utils/array.ts b/packages/overlayscrollbars/src/support/utils/array.ts index e3ef0b1..63a23b6 100644 --- a/packages/overlayscrollbars/src/support/utils/array.ts +++ b/packages/overlayscrollbars/src/support/utils/array.ts @@ -74,9 +74,11 @@ export const from = (arr: ArrayLike) => { return Array.from(arr); } const result: Array = []; + each(arr, (elm) => { push(result, elm); }); + return result; }; @@ -92,9 +94,10 @@ export const isEmptyArray = (array: Array | null | undefined) => array && a * @param p1 The first param. */ export const runEach = (arr: ArrayLike | Set, p1?: unknown): void => { + const runFn = (fn: RunEachItem) => fn && fn(p1); if (arr instanceof Set) { - arr.forEach((fn) => fn && fn(p1)); + arr.forEach(runFn); } else { - each(arr, (fn) => fn && fn(p1)); + each(arr, runFn); } }; diff --git a/packages/overlayscrollbars/src/support/utils/function.ts b/packages/overlayscrollbars/src/support/utils/function.ts new file mode 100644 index 0000000..fa16180 --- /dev/null +++ b/packages/overlayscrollbars/src/support/utils/function.ts @@ -0,0 +1,34 @@ +import { isNumber } from 'support/utils/types'; +import { cAF, rAF } from 'support/compatibility/apis'; + +/** + * Debounces the given function either with a timeout or a animation frame. + * @param functionToDebounce The function which shall be debounced. + * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise. + * @param maxWait A maximum amount of ms. before the function will be called even with debounce. + */ +export const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => { + let timeoutId: number | void; + let lastCallTime: number; + const hasTimeout = isNumber(timeout) && timeout > 0; + const hasMaxWait = isNumber(maxWait) && maxWait > 0; + const cancel = hasTimeout ? window.clearTimeout : cAF!; + const set = hasTimeout ? window.setTimeout : rAF!; + const setFn = function (args: IArguments) { + lastCallTime = hasMaxWait ? performance.now() : 0; + timeoutId && cancel(timeoutId); + // eslint-disable-next-line + // @ts-ignore + functionToDebounce.apply(this, args); + }; + + return function () { + // eslint-disable-next-line + // @ts-ignore + const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line + const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false; + + timeoutId && cancel(timeoutId); + timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number); + }; +}; diff --git a/packages/overlayscrollbars/src/support/utils/index.ts b/packages/overlayscrollbars/src/support/utils/index.ts index 787f33e..e593ce5 100644 --- a/packages/overlayscrollbars/src/support/utils/index.ts +++ b/packages/overlayscrollbars/src/support/utils/index.ts @@ -1,5 +1,6 @@ export * from 'support/utils/array'; export * from 'support/utils/equal'; +export * from 'support/utils/function'; export * from 'support/utils/lexicon'; export * from 'support/utils/object'; export * from 'support/utils/types'; diff --git a/packages/overlayscrollbars/src/support/utils/types.ts b/packages/overlayscrollbars/src/support/utils/types.ts index 53e303c..3ae60f6 100644 --- a/packages/overlayscrollbars/src/support/utils/types.ts +++ b/packages/overlayscrollbars/src/support/utils/types.ts @@ -1,15 +1,15 @@ import { PlainObject } from 'typings'; -import { hasOwnProperty } from 'support/utils/object'; const ElementNodeType = Node.ELEMENT_NODE; +const { toString, hasOwnProperty } = Object.prototype; export const type: (obj: any) => string = (obj) => { - if (obj === undefined) return `${obj}`; - if (obj === null) return `${obj}`; - return Object.prototype.toString - .call(obj) - .replace(/^\[object (.+)\]$/, '$1') - .toLowerCase(); + return obj === undefined || obj === null + ? `${obj}` + : toString + .call(obj) + .replace(/^\[object (.+)\]$/, '$1') + .toLowerCase(); }; export function isNumber(obj: any): obj is number { @@ -66,8 +66,8 @@ export function isPlainObject(obj: any): obj is PlainObject { const cstr = 'constructor'; const ctor = obj[cstr]; const ctorProto = ctor && ctor.prototype; - const hasOwnConstructor = hasOwnProperty(obj, cstr); - const hasIsPrototypeOf = ctorProto && hasOwnProperty(ctorProto, 'isPrototypeOf'); + const hasOwnConstructor = hasOwnProperty.call(obj, cstr); + const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf'); if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) { return false; @@ -79,7 +79,7 @@ export function isPlainObject(obj: any): obj is PlainObject { } /* eslint-enable */ - return isUndefined(key) || hasOwnProperty(obj, key); + return isUndefined(key) || hasOwnProperty.call(obj, key); } /** diff --git a/packages/overlayscrollbars/tests/puppeteer/observers/domObserver/index.browser.ts b/packages/overlayscrollbars/tests/puppeteer/observers/domObserver/index.browser.ts index c01a966..afb78be 100644 --- a/packages/overlayscrollbars/tests/puppeteer/observers/domObserver/index.browser.ts +++ b/packages/overlayscrollbars/tests/puppeteer/observers/domObserver/index.browser.ts @@ -232,9 +232,11 @@ const addRemoveTargetContentBetweenElmsFn = async () => { await addRemoveElementsTest(targetContentBetweenElmsSlot, targetElmContentElmObservations); }; const addImgElmsFn = async () => { + /* const add = async () => { const img = new Image(1, 1); img.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; + const { before, after, compare } = changedThrough(targetElmContentElmObservations); const imgHolder = createDiv('img'); appendChildren(imgHolder, img); @@ -261,6 +263,21 @@ const addImgElmsFn = async () => { await add(); await add(); await add(); +*/ + const add = async () => { + const img = new Image(1, 1); + img.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; + + //const { before, after, compare } = changedThrough(targetElmContentElmObservations); + const imgHolder = createDiv('img'); + appendChildren(imgHolder, img); + + appendChildren(imgElmsSlot, imgHolder); + }; + + add(); + add(); + add(); }; const iterateTargetAttrChange = async () => { await iterateAttrChange(setTargetAttr, targetElmObservations, (observation, selected) => { @@ -340,7 +357,10 @@ createDOMObserver( { _observeContent: true, _eventContentChange: () => { - return [['img', 'load']]; + return [ + ['img', 'load'], + ['iframe', 'load'], + ]; }, _ignoreContentChange: (mutation) => { const { target, attributeName } = mutation; diff --git a/packages/overlayscrollbars/tests/puppeteer/observers/domObserver/index.scss b/packages/overlayscrollbars/tests/puppeteer/observers/domObserver/index.scss index b23e69d..7269727 100644 --- a/packages/overlayscrollbars/tests/puppeteer/observers/domObserver/index.scss +++ b/packages/overlayscrollbars/tests/puppeteer/observers/domObserver/index.scss @@ -77,9 +77,11 @@ body { } .img { + display: inline-block; background: lime; width: 50px; height: 50px; + border-radius: 100%; img { opacity: 0; diff --git a/packages/overlayscrollbars/types/observers/domObserver.d.ts b/packages/overlayscrollbars/types/observers/domObserver.d.ts index d6186fc..b4da847 100644 --- a/packages/overlayscrollbars/types/observers/domObserver.d.ts +++ b/packages/overlayscrollbars/types/observers/domObserver.d.ts @@ -1,9 +1,16 @@ +declare type StringNullUndefined = string | null | undefined; +export declare type DOMOvserverEventContentChangeResult = Array<[StringNullUndefined, StringNullUndefined] | null | undefined>; +export declare type DOMOvserverEventContentChange = () => DOMOvserverEventContentChangeResult; +export declare type DOMObserverIgnoreContentChange = (mutation: MutationRecord, domObserverTarget: HTMLElement, domObserverOptions: DOMObserverOptions | undefined) => boolean | null | undefined; export interface DOMObserverOptions { _observeContent?: boolean; _attributes?: string[]; + _ignoreContentChange?: DOMObserverIgnoreContentChange; + _eventContentChange?: DOMOvserverEventContentChange; } export interface DOMObserver { _disconnect: () => void; _update: () => void; } -export declare const createDOMObserver: (target: HTMLElement, callback: (changedTargetAttrs: string[], styleChanged: boolean, contentChanged: boolean) => any, options?: DOMObserverOptions | undefined) => DOMObserver; +export declare const createDOMObserver: (target: HTMLElement, callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any, options?: DOMObserverOptions | undefined) => DOMObserver; +export {}; diff --git a/packages/overlayscrollbars/types/support/dom/traversal.d.ts b/packages/overlayscrollbars/types/support/dom/traversal.d.ts index e21429e..375b998 100644 --- a/packages/overlayscrollbars/types/support/dom/traversal.d.ts +++ b/packages/overlayscrollbars/types/support/dom/traversal.d.ts @@ -1,6 +1,6 @@ -declare type InputElementType = Element | null | undefined; +declare type InputElementType = Element | Node | null | undefined; declare type OutputElementType = Element | null; -declare const find: (selector: string, elm?: InputElementType) => ReadonlyArray; +declare const find: (selector: string, elm?: InputElementType) => Element[]; declare const findFirst: (selector: string, elm?: InputElementType) => OutputElementType; declare const is: (elm: InputElementType, selector: string) => boolean; declare const children: (elm: InputElementType, selector?: string | undefined) => ReadonlyArray; diff --git a/packages/overlayscrollbars/types/support/options/index.d.ts b/packages/overlayscrollbars/types/support/options/index.d.ts index e63258f..f2cfa63 100644 --- a/packages/overlayscrollbars/types/support/options/index.d.ts +++ b/packages/overlayscrollbars/types/support/options/index.d.ts @@ -27,7 +27,7 @@ declare type OptionsTemplateTypeMap = { __TPL_array_TYPE__: Array; __TPL_function_TYPE__: Func; __TPL_null_TYPE__: null; - __TPL_object_TYPE__: object; + __TPL_object_TYPE__: Record; }; declare type OptionsTemplateValueNonEnum = OptionsTemplateType | [OptionsTemplateType, ...Array]; declare type ExtractPropsKey = { diff --git a/packages/overlayscrollbars/types/support/options/validation.d.ts b/packages/overlayscrollbars/types/support/options/validation.d.ts index c7f6696..adce0b1 100644 --- a/packages/overlayscrollbars/types/support/options/validation.d.ts +++ b/packages/overlayscrollbars/types/support/options/validation.d.ts @@ -8,7 +8,7 @@ declare type OptionsTemplateTypesDictionary = { readonly number: OptionsTemplateType; readonly string: OptionsTemplateType; readonly array: OptionsTemplateType>; - readonly object: OptionsTemplateType; + readonly object: OptionsTemplateType>; readonly function: OptionsTemplateType; readonly null: OptionsTemplateType; }; diff --git a/packages/overlayscrollbars/types/support/utils/array.d.ts b/packages/overlayscrollbars/types/support/utils/array.d.ts index f1c2e9c..fad4827 100644 --- a/packages/overlayscrollbars/types/support/utils/array.d.ts +++ b/packages/overlayscrollbars/types/support/utils/array.d.ts @@ -7,6 +7,7 @@ export declare function each(arrayLikeObject: ArrayLike | null | undefined export declare function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject; export declare function each(obj: PlainObject | null | undefined, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null | undefined; export declare const indexOf: (arr: T[], item: T, fromIndex?: number | undefined) => number; +export declare const push: (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean | undefined) => T[]; export declare const from: (arr: ArrayLike) => T[]; export declare const isEmptyArray: (array: Array | null | undefined) => boolean | null | undefined; export declare const runEach: (arr: ArrayLike | Set, p1?: unknown) => void; diff --git a/packages/overlayscrollbars/types/support/utils/object.d.ts b/packages/overlayscrollbars/types/support/utils/object.d.ts index ac4acaf..568be35 100644 --- a/packages/overlayscrollbars/types/support/utils/object.d.ts +++ b/packages/overlayscrollbars/types/support/utils/object.d.ts @@ -5,3 +5,4 @@ export declare function assignDeep(target: T, object1: U, object2: V): export declare function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W; export declare function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X; export declare function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y; +export declare function isEmptyObject(obj: any): boolean; diff --git a/packages/overlayscrollbars/types/support/utils/types.d.ts b/packages/overlayscrollbars/types/support/utils/types.d.ts index 680b739..c939067 100644 --- a/packages/overlayscrollbars/types/support/utils/types.d.ts +++ b/packages/overlayscrollbars/types/support/utils/types.d.ts @@ -11,4 +11,4 @@ export declare function isObject(obj: any): boolean; export declare function isArrayLike(obj: any): obj is ArrayLike; export declare function isPlainObject(obj: any): obj is PlainObject; export declare function isHTMLElement(obj: any): obj is HTMLElement; -export declare function isEmptyObject(obj: any): boolean; +export declare function isElement(obj: any): obj is Element;