From 9f45348f3d4239780cde1b9cd2b33eaed98a29a7 Mon Sep 17 00:00:00 2001 From: Rene Date: Tue, 8 Dec 2020 19:21:57 +0100 Subject: [PATCH] improve codebase --- .eslintrc.js | 10 ++ .../dist/overlayscrollbars.esm.js | 116 ++++++++++++++-- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 126 ++++++++++++++++-- .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- packages/overlayscrollbars/src/index.ts | 4 +- .../src/observers/index.scss | 0 .../types/environment/environment.d.ts | 1 + .../types/lifecycles/lifecycleBase.d.ts | 14 ++ .../types/lifecycles/structureLifecycle.d.ts | 10 ++ .../types/observers/sizeObserver.d.ts | 7 + .../types/observers/trinsicObserver.d.ts | 1 + .../types/options/options.d.ts | 4 +- .../lifecycles/StructureLifecycle.d.ts | 14 -- .../overlayscrollbars/lifecycles/index.d.ts | 8 -- .../observers/SizeObserver.d.ts | 1 - .../observers/TrinsicObserver.d.ts | 1 - .../types/support/cache/cache.d.ts | 12 ++ .../types/support/cache/index.d.ts | 1 + .../types/support/dom/style.d.ts | 7 + .../types/support/index.d.ts | 1 + .../types/support/options/index.d.ts | 9 +- .../types/support/options/transformation.d.ts | 7 +- .../types/support/options/validation.d.ts | 4 +- .../types/support/utils/equal.d.ts | 6 + .../types/support/utils/index.d.ts | 1 + 28 files changed, 313 insertions(+), 60 deletions(-) delete mode 100644 packages/overlayscrollbars/src/observers/index.scss create mode 100644 packages/overlayscrollbars/types/lifecycles/lifecycleBase.d.ts create mode 100644 packages/overlayscrollbars/types/lifecycles/structureLifecycle.d.ts create mode 100644 packages/overlayscrollbars/types/observers/sizeObserver.d.ts create mode 100644 packages/overlayscrollbars/types/observers/trinsicObserver.d.ts delete mode 100644 packages/overlayscrollbars/types/overlayscrollbars/lifecycles/StructureLifecycle.d.ts delete mode 100644 packages/overlayscrollbars/types/overlayscrollbars/lifecycles/index.d.ts delete mode 100644 packages/overlayscrollbars/types/overlayscrollbars/observers/SizeObserver.d.ts delete mode 100644 packages/overlayscrollbars/types/overlayscrollbars/observers/TrinsicObserver.d.ts create mode 100644 packages/overlayscrollbars/types/support/cache/cache.d.ts create mode 100644 packages/overlayscrollbars/types/support/cache/index.d.ts create mode 100644 packages/overlayscrollbars/types/support/utils/equal.d.ts diff --git a/.eslintrc.js b/.eslintrc.js index 5e7bdfe..9d89de3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -60,6 +60,16 @@ module.exports = { ignore: [`^@/.*`], }, ], + 'import/extensions': [ + 'error', + 'ignorePackages', + { + js: 'never', + jsx: 'never', + ts: 'never', + tsx: 'never', + }, + ], }, overrides: [ { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index a4fb9a1..fd218d1 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -227,6 +227,21 @@ const on = (target, eventNames, listener, options) => { const stopPropagation = (evt) => evt.stopPropagation(); const preventDefault = (evt) => evt.preventDefault(); +const equal = (a, b, props) => { + if (a && b) { + let result = true; + each(props, (prop) => { + if (a[prop] !== b[prop]) { + result = false; + } + }); + return result; + } + + return false; +}; +const equalWH = (a, b) => equal(a, b, ['w', 'h']); + const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); const keys = (obj) => (obj ? Object.keys(obj) : []); @@ -366,6 +381,8 @@ const optionsTemplateTypes = ['boolean', 'number', 'string', 'array', 'object', let environmentInstance; const { abs, round } = Math; const environmentElmId = 'os-environment'; +const classNameFlexboxGlue = 'flexbox-glue'; +const classNameFlexboxGlueMax = `${classNameFlexboxGlue}-max`; const getNativeScrollbarSize = (body, measureElm) => { appendChildren(body, measureElm); @@ -379,7 +396,7 @@ const getNativeScrollbarSize = (body, measureElm) => { const getNativeScrollbarStyling = (testElm) => { let result = false; - addClass(testElm, 'os-viewport-native-scrollbars-invisible'); + addClass(testElm, 'os-viewport-scrollbar-styled'); try { result = @@ -407,6 +424,18 @@ const getRtlScrollBehavior = (parentElm, childElm) => { }; }; +const getFlexboxGlue = (parentElm, childElm) => { + addClass(parentElm, classNameFlexboxGlue); + const minOffsetsizeParent = offsetSize(parentElm); + const minOffsetsize = offsetSize(childElm); + const supportsMin = equalWH(minOffsetsize, minOffsetsizeParent); + addClass(parentElm, classNameFlexboxGlueMax); + const maxOffsetsizeParent = offsetSize(parentElm); + const maxOffsetsize = offsetSize(childElm); + const supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent); + return supportsMin && supportsMax; +}; + const getWindowDPR = () => { const dDPI = window.screen.deviceXDPI || 0; const sDPI = window.screen.logicalXDPI || 1; @@ -436,6 +465,7 @@ const createEnvironment = () => { _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid, _nativeScrollbarStyling: getNativeScrollbarStyling(envElm), _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm), + _flexboxGlue: getFlexboxGlue(envElm, envChildElm), _addListener(listener) { onChangedListener.add(listener); @@ -446,6 +476,7 @@ const createEnvironment = () => { }, }; removeAttr(envElm, 'style'); + removeAttr(envElm, 'class'); removeElements(envElm); if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) { @@ -507,6 +538,7 @@ const scrollEventName = 'scroll'; const scrollAmount = 3333333; const ResizeObserverConstructor = jsAPI('ResizeObserver'); const classNameSizeObserver = 'os-size-observer'; +const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`; const classNameSizeObserverListener = `${classNameSizeObserver}-listener`; const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`; const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`; @@ -515,7 +547,9 @@ const rAF = requestAnimationFrame; const getDirection = (elm) => style(elm, 'direction'); -const createSizeObserver = (target, onSizeChangedCallback, direction) => { +const createSizeObserver = (target, onSizeChangedCallback, options) => { + const { _direction: direction = false, _appear: appear = false } = options || {}; + const rtlScrollBehavior = getEnvironment()._rtlScrollBehavior; const baseElements = createDOM(`
`); @@ -529,15 +563,16 @@ const createSizeObserver = (target, onSizeChangedCallback, direction) => { scrollTop(sizeObserver, scrollAmount); } - onSizeChangedCallback(dir === true); + onSizeChangedCallback(isString(dir) ? dir : undefined); }; const offListeners = []; - let appearCallback = onSizeChangedCallbackProxy; + let appearCallback = appear ? onSizeChangedCallbackProxy : null; if (ResizeObserverConstructor) { const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); resizeObserverInstance.observe(listenerElement); + offListeners.push(() => resizeObserverInstance.disconnect()); } else { const observerElementChildren = createDOM( `
` @@ -561,19 +596,25 @@ const createSizeObserver = (target, onSizeChangedCallback, direction) => { const onResized = function onResized() { rAFId = 0; - if (!isDirty) return; + + if (!isDirty) { + return; + } + cacheSize = currSize; onSizeChangedCallbackProxy(); }; const onScroll = (scrollEvent) => { currSize = offsetSize(listenerElement); - isDirty = !scrollEvent || currSize.w !== cacheSize.w || currSize.h !== cacheSize.h; + isDirty = !scrollEvent || !equalWH(currSize, cacheSize); if (scrollEvent && isDirty && !rAFId) { cAF(rAFId); rAFId = rAF(onResized); - } else if (!scrollEvent) onResized(); + } else if (!scrollEvent) { + onResized(); + } reset(); @@ -592,7 +633,7 @@ const createSizeObserver = (target, onSizeChangedCallback, direction) => { height: scrollAmount, }); reset(); - appearCallback = onScroll; + appearCallback = appear ? onScroll : reset; } if (direction) { @@ -616,7 +657,7 @@ const createSizeObserver = (target, onSizeChangedCallback, direction) => { } dirCache = dir; - onSizeChangedCallbackProxy(true); + onSizeChangedCallbackProxy(dir); } preventDefault(event); @@ -626,7 +667,11 @@ const createSizeObserver = (target, onSizeChangedCallback, direction) => { ); } - offListeners.push(on(sizeObserver, animationStartEventName, appearCallback)); + if (appearCallback) { + addClass(sizeObserver, classNameSizeObserverAppear); + offListeners.push(on(sizeObserver, animationStartEventName, appearCallback)); + } + prependChildren(target, sizeObserver); return () => { runEach(offListeners); @@ -634,10 +679,61 @@ const createSizeObserver = (target, onSizeChangedCallback, direction) => { }; }; +const classNameTrinsicObserver = 'os-trinsic-observer'; +const IntersectionObserverConstructor = jsAPI('IntersectionObserver'); +const createTrinsicObserver = (target, onTrinsicChangedCallback) => { + const trinsicObserver = createDOM(`
`)[0]; + const offListeners = []; + let heightIntrinsic = false; + + if (IntersectionObserverConstructor) { + const intersectionObserverInstance = new IntersectionObserverConstructor( + (entries) => { + if (entries && entries.length > 0) { + const last = entries.pop(); + + if (last) { + const newHeightIntrinsic = last.isIntersecting || last.intersectionRatio > 0; + + if (newHeightIntrinsic !== heightIntrinsic) { + onTrinsicChangedCallback(false, newHeightIntrinsic); + heightIntrinsic = newHeightIntrinsic; + } + } + } + }, + { + root: target, + } + ); + intersectionObserverInstance.observe(trinsicObserver); + offListeners.push(() => intersectionObserverInstance.disconnect()); + } else { + offListeners.push( + createSizeObserver(trinsicObserver, () => { + const newSize = offsetSize(trinsicObserver); + const newHeightIntrinsic = newSize.h === 0; + + if (newHeightIntrinsic !== heightIntrinsic) { + onTrinsicChangedCallback(false, newHeightIntrinsic); + heightIntrinsic = newHeightIntrinsic; + } + }) + ); + } + + prependChildren(target, trinsicObserver); + return () => { + runEach(offListeners); + removeElements(trinsicObserver); + }; +}; + var index = () => { return [ getEnvironment(), createSizeObserver(document.body, () => {}), + createTrinsicObserver(document.body, () => {}), createDOM( '\
\ diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 66b2624..8ead6a2 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/object.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/environment/environment.ts","../src/overlayscrollbars/observers/SizeObserver.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,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null;\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,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\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 * 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 */\r\nexport const runEach = (arr: ArrayLike | Set): void => {\r\n if (arr instanceof Set) {\r\n arr.forEach((fn) => fn && fn());\r\n } else {\r\n each(arr, (fn) => fn && fn());\r\n }\r\n};\r\n","import { each, from } from 'support/utils/array';\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\nexport const find = (selector: string, elm?: Element | null): 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\nexport const findFirst = (selector: string, elm?: Element | null): Element | null => (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\nexport const is = (elm: Element | null, selector: string): boolean => (elm ? elm.matches(selector) : false);\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\nexport const children = (elm: Element | null, 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 (child.matches(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\nexport const contents = (elm: Element | null): 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\nexport const parent = (elm: Node | null): Node | null => (elm ? elm.parentElement : null);\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 { 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 = (): HTMLDivElement => document.createElement('div');\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 offset- 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 offset- 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 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 { 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\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 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","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","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 resizeObserver: any | undefined = jsAPI('ResizeObserver');\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, indexOf, hasOwnProperty, keys } from 'support/utils';\r\nimport { type, isArray, isUndefined, isEmptyObject, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidatedResult } 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): OptionsValidatedResult => {\r\n const validatedOptions: T = {} as T;\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;\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 const isEnumString = indexOf(Object.values(optionsTemplateTypes), currTemplateType) < 0;\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 : currTemplateType);\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 validate = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T,\r\n doWriteErrors?: boolean\r\n): OptionsValidatedResult => {\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 { validate, 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 {\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} from 'support';\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 _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\nconst environmentElmId = 'os-environment';\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, 'os-viewport-native-scrollbars-invisible');\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 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 _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!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 createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n jsAPI,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nconst classNameSizeObserver = 'os-size-observer';\r\nconst classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nconst classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nconst classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\nconst cAF = cancelAnimationFrame;\r\nconst rAF = requestAnimationFrame;\r\nconst getDirection = (elm: HTMLElement) => style(elm, 'direction');\r\n\r\n// TODO:\r\n// 1. MAYBE add comparison function to offsetSize etc.\r\n\r\nexport const createSizeObserver = (target: HTMLElement, onSizeChangedCallback: (direction?: boolean) => any, direction?: boolean) => {\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 = (dir?: boolean) => {\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(dir === true);\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: (...args: any) => any = onSizeChangedCallbackProxy;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\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 = function () {\r\n rAFId = 0;\r\n if (!isDirty) return;\r\n\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || currSize.w !== cacheSize.w || currSize.h !== cacheSize.h;\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF(rAFId);\r\n rAFId = rAF(onResized);\r\n } else if (!scrollEvent) onResized();\r\n\r\n reset();\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 = onScroll;\r\n }\r\n\r\n if (direction) {\r\n let dirCache: string | undefined;\r\n offListeners.push(\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const dir = getDirection(sizeObserver);\r\n const changed = dir !== dirCache;\r\n if (changed) {\r\n if (dir === 'rtl') {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n dirCache = dir;\r\n onSizeChangedCallbackProxy(true);\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 offListeners.push(on(sizeObserver, animationStartEventName, appearCallback));\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 { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver } from 'overlayscrollbars/observers/SizeObserver';\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 createSizeObserver(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":["isNumber","obj","isString","isFunction","isUndefined","undefined","isArray","Array","isArrayLike","length","getSetProp","topLeft","fallback","elm","value","removeAttr","attrName","removeAttribute","scrollLeft","scrollTop","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","Object","keys","key","from","arr","push","runEach","Set","forEach","fn","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","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","window","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","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","hasOwnProperty","prop","prototype","call","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","toLowerCase","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","absoluteCoordinates","rect","left","pageYOffset","top","pageXOffset","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","name","prefix","resizeObserver","_extends","module","assign","arguments","apply","templateTypePrefixSuffix","optionsTemplateTypes","item","environmentInstance","abs","round","Math","environmentElmId","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","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","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","animationStartEventName","scrollEventName","scrollAmount","ResizeObserverConstructor","classNameSizeObserver","classNameSizeObserverListener","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","cAF","cancelAnimationFrame","rAF","requestAnimationFrame","getDirection","createSizeObserver","onSizeChangedCallback","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","onSizeChangedCallbackProxy","dir","rtl","appearCallback","resizeObserverInstance","observe","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","width","height","dirCache","event","changed","right"],"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/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/environment/environment.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.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,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null;\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,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\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 * 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 */\r\nexport const runEach = (arr: ArrayLike | Set): void => {\r\n if (arr instanceof Set) {\r\n arr.forEach((fn) => fn && fn());\r\n } else {\r\n each(arr, (fn) => fn && fn());\r\n }\r\n};\r\n","import { each, from } from 'support/utils/array';\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\nexport const find = (selector: string, elm?: Element | null): 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\nexport const findFirst = (selector: string, elm?: Element | null): Element | null => (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\nexport const is = (elm: Element | null, selector: string): boolean => (elm ? elm.matches(selector) : false);\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\nexport const children = (elm: Element | null, 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 (child.matches(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\nexport const contents = (elm: Element | null): 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\nexport const parent = (elm: Node | null): Node | null => (elm ? elm.parentElement : null);\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 { 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 = (): HTMLDivElement => document.createElement('div');\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 offset- 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 offset- 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 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","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 resizeObserver: any | undefined = jsAPI('ResizeObserver');\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, indexOf, 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 const isEnumString = indexOf(Object.values(optionsTemplateTypes), currTemplateType) < 0;\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 : currTemplateType);\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,\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 {\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\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\nconst environmentElmId = 'os-environment';\r\nconst classNameFlexboxGlue = 'flexbox-glue';\r\nconst classNameFlexboxGlueMax = `${classNameFlexboxGlue}-max`;\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, 'os-viewport-scrollbar-styled');\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, classNameFlexboxGlue);\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, classNameFlexboxGlueMax);\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 createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n jsAPI,\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} from 'support';\r\nimport { getEnvironment } from 'environment';\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nconst classNameSizeObserver = 'os-size-observer';\r\nconst classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nconst classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nconst classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nconst classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\nconst cAF = cancelAnimationFrame;\r\nconst rAF = requestAnimationFrame;\r\nconst getDirection = (elm: HTMLElement) => style(elm, 'direction');\r\n\r\n// TODO:\r\n// 1. MAYBE add comparison function to offsetSize etc.\r\ntype Direction = 'ltr' | 'rtl';\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (direction?: Direction) => 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 = (dir?: Direction) => {\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(dir) ? dir : 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 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 = function () {\r\n rAFId = 0;\r\n if (!isDirty) {\r\n return;\r\n }\r\n\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\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 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 let dirCache: string | undefined;\r\n offListeners.push(\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const dir = getDirection(sizeObserver);\r\n const changed = dir !== dirCache;\r\n if (changed) {\r\n if (dir === 'rtl') {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n dirCache = dir;\r\n onSizeChangedCallbackProxy(dir as Direction);\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 { createDOM, offsetSize, jsAPI, runEach, prependChildren, removeElements } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\n\r\nconst classNameTrinsicObserver = 'os-trinsic-observer';\r\nconst IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsic: boolean) => any\r\n): (() => void) => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n let heightIntrinsic = false;\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 newHeightIntrinsic = last.isIntersecting || last.intersectionRatio > 0;\r\n\r\n if (newHeightIntrinsic !== heightIntrinsic) {\r\n onTrinsicChangedCallback(false, newHeightIntrinsic);\r\n heightIntrinsic = newHeightIntrinsic;\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 newHeightIntrinsic = newSize.h === 0;\r\n\r\n if (newHeightIntrinsic !== heightIntrinsic) {\r\n onTrinsicChangedCallback(false, newHeightIntrinsic);\r\n heightIntrinsic = newHeightIntrinsic;\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 { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\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 createSizeObserver(document.body, () => {}),\r\n createTrinsicObserver(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":["isNumber","obj","isString","isFunction","isUndefined","undefined","isArray","Array","isArrayLike","length","getSetProp","topLeft","fallback","elm","value","removeAttr","attrName","removeAttribute","scrollLeft","scrollTop","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","Object","keys","key","from","arr","push","runEach","Set","forEach","fn","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","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","window","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","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","hasOwnProperty","prototype","call","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","toLowerCase","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","absoluteCoordinates","rect","left","pageYOffset","top","pageXOffset","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","name","prefix","resizeObserver","_extends","module","assign","arguments","apply","templateTypePrefixSuffix","optionsTemplateTypes","item","environmentInstance","abs","round","Math","environmentElmId","classNameFlexboxGlue","classNameFlexboxGlueMax","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","animationStartEventName","scrollEventName","scrollAmount","ResizeObserverConstructor","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","cAF","cancelAnimationFrame","rAF","requestAnimationFrame","getDirection","createSizeObserver","onSizeChangedCallback","_direction","_appear","appear","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","onSizeChangedCallbackProxy","dir","rtl","appearCallback","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","width","height","dirCache","event","changed","right","classNameTrinsicObserver","IntersectionObserverConstructor","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","heightIntrinsic","intersectionObserverInstance","entries","last","pop","newHeightIntrinsic","isIntersecting","intersectionRatio","root","newSize"],"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 a7d354c..f2e41dc 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -function r(r){return"number"==typeof r}function t(r){return"string"==typeof r}function n(r){return Array.isArray(r)}function e(t){const e=!!t&&t.length;return n(t)||!function(r){return"function"==typeof r}(t)&&r(e)&&e>-1&&e%1==0}function o(r,t,n,e){if(void 0===e)return n?n[r]:t;n&&(n[r]=e)}function i(r,t){return o("scrollLeft",0,r,t)}function s(r,t){return o("scrollTop",0,r,t)}const l=/[^\x20\t\r\n\f]+/g,c=(r,n)=>{((r,n,e)=>{let o,i=0,s=!1;if(r&&t(n)){const t=n.match(l)||[];for(s=t.length>0;o=t[i++];)s=e(r.classList,o)&&s}})(r,n,(r,t)=>r.add(t))};function a(r,t){if(e(r))for(let n=0;nt(r[n],n,r));return r}const d=r=>{if(Array.from)return Array.from(r);const t=[];return a(r,r=>{t.push(r)}),t},v=r=>{r instanceof Set?r.forEach(r=>r&&r()):a(r,r=>r&&r())},u=(r,t,n)=>{if(n){let o,i=t;r&&(e(n)?(o=document.createDocumentFragment(),a(n,r=>{r===i&&(i=r.previousSibling),o.appendChild(r)})):o=n,t&&(i?i!==t&&(i=i.nextSibling):i=r.firstChild),r.insertBefore(o,i))}},f=(r,t)=>{u(r,null,t)},w=r=>{if(e(r))a(d(r),r=>w(r));else if(r){const n=(t=r)?t.parentElement:null;n&&n.removeChild(r)}var t},b=r=>{const t=document.createElement("div");return t.innerHTML=r.trim(),a((n=t)?d(n.childNodes):[],r=>w(r));var n},h={w:0,h:0},m=()=>({w:window.innerWidth,h:window.innerHeight}),p=r=>r?{w:r.offsetWidth,h:r.offsetHeight}:h;let y;const z=(r,t,n,e)=>{a(t.split(" "),t=>{r.removeEventListener(t,n,e)})},g=(r,t,n,e)=>{const o=(()=>{if(void 0===y){y=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){y=!0}}))}catch(r){}}return y})(),i=o&&e&&e.t||!1,s=e&&e.o||!1,l=e&&e.s||!1,c=[],d=o?{passive:i,capture:s}:s;return a(t.split(" "),t=>{const e=l?o=>{r.removeEventListener(t,e,s),n&&n(o)}:n;c.push(z.bind(null,r,t,e,s)),r.addEventListener(t,e,d)}),v.bind(0,c)},_=r=>r.stopPropagation(),x=r=>r.preventDefault(),O={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},S=(r,t,n)=>null!=t?t.getPropertyValue(n):r.style[n],j=(t,n,e)=>{try{t&&void 0!==t.style[n]&&(t.style[n]=((t,n)=>!O[t.toLowerCase()]&&r(n)?n+"px":n)(n,e))}catch(o){}};function k(r,e){const o=t(e);if(n(e)||o){let t=o?"":{};if(r){const n=window.getComputedStyle(r,null);t=o?S(r,n,e):e.reduce((t,e)=>(t[e]=S(r,n,e),t),t)}return t}var i;a((i=e)?Object.keys(i):[],t=>j(r,t,e[t]))}const A={x:0,y:0},L=r=>{const t=r?(r=>r.getBoundingClientRect())(r):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:A},q=["WebKit","Moz","O","MS","webkit","moz","o","ms"],M={},T=r=>{let t=M[r]||window[r];return n=M,e=r,Object.prototype.hasOwnProperty.call(n,e)||(a(q,n=>{var e;return t=t||window[n+(e=r,e.charAt(0).toUpperCase()+e.slice(1))],!t}),M[r]=t),t;var n,e};T("ResizeObserver");!function(r,t,n){r(n={path:t,exports:{},require:function(r,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&n.path)}},n.exports),n.exports}((function(r){function t(){return r.exports=t=Object.assign||function(r){for(var t=1;t(r[t]=E[0]+t+E[1],r),{});let F;const{abs:P,round:R}=Math,Y=(r,t)=>{f(r,t);const n=(e=t)?{w:e.clientWidth,h:e.clientHeight}:h;var e;const o=p(t);return{x:o.h-n.h,y:o.w-n.w}},B=r=>{let t=!1;c(r,"os-viewport-native-scrollbars-invisible");try{t="none"===k(r,"scrollbar-width")||"none"===window.getComputedStyle(r,"::-webkit-scrollbar").getPropertyValue("display")}catch(n){}return t},D=(r,t)=>{k(r,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),i(r,0);const n=L(r),e=L(t);i(r,-999);const o=L(t);return{i:n.x===e.x,n:e.x!==o.x}},I=()=>{const r=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||r/t},K=()=>{const{body:r}=document,t=b('
')[0],n=t.firstChild,e=new Set,o=Y(r,t),i={x:0===o.x,y:0===o.y},s={l:!1,v:o,u:i,m:B(t),p:D(t,n),g(r){e.add(r)},_(r){e.delete(r)}};var l,c;if(c="style",null==(l=t)||l.removeAttribute(c),w(t),!i.x||!i.y){let n=m(),i=I(),s=o;window.addEventListener("resize",()=>{if(e.size){const o=m(),l={w:o.w-n.w,h:o.h-n.h};if(0===l.w&&0===l.h)return;const c={w:P(l.w),h:P(l.h)},a={w:P(R(o.w/(n.w/100))),h:P(R(o.h/(n.h/100)))},d=I(),u=c.w>2&&c.h>2,f=!((r,t)=>{const n=P(r),e=P(t);return!(n===e||n+1===e||n-1===e)})(a.w,a.h),b=d!==i&&i>0;if(u&&f&&b){const n=F.v=Y(r,t);w(t),s.x===n.x&&s.y===n.y||v(e),s=n}n=o,i=d}})}return s},U=()=>(F||(F=K()),F),W=T("ResizeObserver"),X=cancelAnimationFrame,C=requestAnimationFrame,G=r=>k(r,"direction"),H=(r,t,n)=>{const e=U().p,o=b('
')[0],l=o.firstChild,c=r=>{if(n){const r="rtl"===G(o);i(o,r?e.n?-3333333:e.i?0:3333333:3333333),s(o,3333333)}t(!0===r)},a=[];let d=c;if(W){new W(c).observe(l)}else{const r=b('
');f(l,r);const t=r[0],n=t.lastChild,e=t.firstChild,o=null==e?void 0:e.firstChild;let v,u=p(l),w=u,h=!1;const m=()=>{i(e,3333333),s(e,3333333),i(n,3333333),s(n,3333333)},y=function(){v=0,h&&(u=w,c())},z=r=>(w=p(l),h=!r||w.w!==u.w||w.h!==u.h,r&&h&&!v?(X(v),v=C(y)):r||y(),m(),r&&(x(r),_(r)),!1);a.push(g(e,"scroll",z)),a.push(g(n,"scroll",z)),k(o,{width:3333333,height:3333333}),m(),d=z}if(n){let r;a.push(g(o,"scroll",t=>{const n=G(o);return n!==r&&(k(l,"rtl"===n?{left:"auto",right:0}:{left:0,right:"auto"}),r=n,c(!0)),x(t),_(t),!1}))}var h,m;return a.push(g(o,"animationstart",d)),m=o,u(h=r,h&&h.firstChild,m),()=>{v(a),w(o)}};export default()=>[U(),H(document.body,()=>{}),b('
fdfhdfgh
')]; \ No newline at end of file +function r(r){return"number"==typeof r}function t(r){return"string"==typeof r}function e(r){return Array.isArray(r)}function n(t){const n=!!t&&t.length;return e(t)||!function(r){return"function"==typeof r}(t)&&r(n)&&n>-1&&n%1==0}function o(r,t,e,n){if(void 0===n)return e?e[r]:t;e&&(e[r]=n)}const i=(r,t)=>{null==r||r.removeAttribute(t)};function s(r,t){return o("scrollLeft",0,r,t)}function l(r,t){return o("scrollTop",0,r,t)}const c=/[^\x20\t\r\n\f]+/g,a=(r,e)=>{((r,e,n)=>{let o,i=0,s=!1;if(r&&t(e)){const t=e.match(c)||[];for(s=t.length>0;o=t[i++];)s=n(r.classList,o)&&s}})(r,e,(r,t)=>r.add(t))};function d(r,t){if(n(r))for(let e=0;et(r[e],e,r));return r}const u=r=>{if(Array.from)return Array.from(r);const t=[];return d(r,r=>{t.push(r)}),t},v=r=>{r instanceof Set?r.forEach(r=>r&&r()):d(r,r=>r&&r())},f=(r,t,e)=>{if(e){let o,i=t;r&&(n(e)?(o=document.createDocumentFragment(),d(e,r=>{r===i&&(i=r.previousSibling),o.appendChild(r)})):o=e,t&&(i?i!==t&&(i=i.nextSibling):i=r.firstChild),r.insertBefore(o,i))}},w=(r,t)=>{f(r,null,t)},b=(r,t)=>{f(r,r&&r.firstChild,t)},h=r=>{if(n(r))d(u(r),r=>h(r));else if(r){const e=(t=r)?t.parentElement:null;e&&e.removeChild(r)}var t},m=r=>{const t=document.createElement("div");return t.innerHTML=r.trim(),d((e=t)?u(e.childNodes):[],r=>h(r));var e},p={w:0,h:0},y=()=>({w:window.innerWidth,h:window.innerHeight}),x=r=>r?{w:r.offsetWidth,h:r.offsetHeight}:p;let z;const g=(r,t,e,n)=>{d(t.split(" "),t=>{r.removeEventListener(t,e,n)})},_=(r,t,e,n)=>{const o=(()=>{if(void 0===z){z=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){z=!0}}))}catch(r){}}return z})(),i=o&&n&&n.t||!1,s=n&&n.o||!1,l=n&&n.s||!1,c=[],a=o?{passive:i,capture:s}:s;return d(t.split(" "),t=>{const n=l?o=>{r.removeEventListener(t,n,s),e&&e(o)}:e;c.push(g.bind(null,r,t,n,s)),r.addEventListener(t,n,a)}),v.bind(0,c)},O=r=>r.stopPropagation(),S=r=>r.preventDefault(),j=(r,t)=>((r,t,e)=>{if(r&&t){let n=!0;return d(e,e=>{r[e]!==t[e]&&(n=!1)}),n}return!1})(r,t,["w","h"]),k={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},A=(r,t,e)=>null!=t?t.getPropertyValue(e):r.style[e],L=(t,e,n)=>{try{t&&void 0!==t.style[e]&&(t.style[e]=((t,e)=>!k[t.toLowerCase()]&&r(e)?e+"px":e)(e,n))}catch(o){}};function q(r,n){const o=t(n);if(e(n)||o){let t=o?"":{};if(r){const e=window.getComputedStyle(r,null);t=o?A(r,e,n):n.reduce((t,n)=>(t[n]=A(r,e,n),t),t)}return t}var i;d((i=n)?Object.keys(i):[],t=>L(r,t,n[t]))}const M={x:0,y:0},T=r=>{const t=r?(r=>r.getBoundingClientRect())(r):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:M},E=["WebKit","Moz","O","MS","webkit","moz","o","ms"],F={},I=r=>{let t=F[r]||window[r];return e=F,n=r,Object.prototype.hasOwnProperty.call(e,n)||(d(E,e=>{var n;return t=t||window[e+(n=r,n.charAt(0).toUpperCase()+n.slice(1))],!t}),F[r]=t),t;var e,n};I("ResizeObserver");!function(r,t,e){r(e={path:t,exports:{},require:function(r,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&e.path)}},e.exports),e.exports}((function(r){function t(){return r.exports=t=Object.assign||function(r){for(var t=1;t(r[t]=P[0]+t+P[1],r),{});let R;const{abs:Y,round:B}=Math,D=(r,t)=>{w(r,t);const e=(n=t)?{w:n.clientWidth,h:n.clientHeight}:p;var n;const o=x(t);return{x:o.h-e.h,y:o.w-e.w}},G=r=>{let t=!1;a(r,"os-viewport-scrollbar-styled");try{t="none"===q(r,"scrollbar-width")||"none"===window.getComputedStyle(r,"::-webkit-scrollbar").getPropertyValue("display")}catch(e){}return t},K=(r,t)=>{q(r,{overflowX:"hidden",overflowY:"hidden",direction:"rtl"}),s(r,0);const e=T(r),n=T(t);s(r,-999);const o=T(t);return{i:e.x===n.x,n:n.x!==o.x}},U=(r,t)=>{a(r,"flexbox-glue");const e=x(r),n=x(t),o=j(n,e);a(r,"flexbox-glue-max");const i=x(r),s=x(t),l=j(s,i);return o&&l},W=()=>{const r=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||r/t},X=()=>{const{body:r}=document,t=m('
')[0],e=t.firstChild,n=new Set,o=D(r,t),s={x:0===o.x,y:0===o.y},l={l:!1,u:o,v:s,m:G(t),p:K(t,e),g:U(t,e),_(r){n.add(r)},O(r){n.delete(r)}};if(i(t,"style"),i(t,"class"),h(t),!s.x||!s.y){let e=y(),i=W(),s=o;window.addEventListener("resize",()=>{if(n.size){const o=y(),l={w:o.w-e.w,h:o.h-e.h};if(0===l.w&&0===l.h)return;const c={w:Y(l.w),h:Y(l.h)},a={w:Y(B(o.w/(e.w/100))),h:Y(B(o.h/(e.h/100)))},d=W(),u=c.w>2&&c.h>2,f=!((r,t)=>{const e=Y(r),n=Y(t);return!(e===n||e+1===n||e-1===n)})(a.w,a.h),w=d!==i&&i>0;if(u&&f&&w){const e=R.u=D(r,t);h(t),s.x===e.x&&s.y===e.y||v(n),s=e}e=o,i=d}})}return l},C=()=>(R||(R=X()),R),H=I("ResizeObserver"),J=cancelAnimationFrame,N=requestAnimationFrame,Q=r=>q(r,"direction"),V=(r,e,n)=>{const{S:o=!1,j:i=!1}=n||{},c=C().p,d=m('
')[0],u=d.firstChild,f=r=>{if(o){const r="rtl"===Q(d);s(d,r?c.n?-3333333:c.i?0:3333333:3333333),l(d,3333333)}e(t(r)?r:void 0)},p=[];let y=i?f:null;if(H){const r=new H(f);r.observe(u),p.push(()=>r.disconnect())}else{const r=m('
');w(u,r);const t=r[0],e=t.lastChild,n=t.firstChild,o=null==n?void 0:n.firstChild;let c,a=x(u),d=a,v=!1;const b=()=>{s(n,3333333),l(n,3333333),s(e,3333333),l(e,3333333)},h=function(){c=0,v&&(a=d,f())},z=r=>(d=x(u),v=!r||!j(d,a),r&&v&&!c?(J(c),c=N(h)):r||h(),b(),r&&(S(r),O(r)),!1);p.push(_(n,"scroll",z)),p.push(_(e,"scroll",z)),q(o,{width:3333333,height:3333333}),b(),y=i?z:b}if(o){let r;p.push(_(d,"scroll",t=>{const e=Q(d);return e!==r&&(q(u,"rtl"===e?{left:"auto",right:0}:{left:0,right:"auto"}),r=e,f(e)),S(t),O(t),!1}))}return y&&(a(d,"os-size-observer-appear"),p.push(_(d,"animationstart",y))),b(r,d),()=>{v(p),h(d)}},Z=I("IntersectionObserver"),$=(r,t)=>{const e=m('
')[0],n=[];let o=!1;if(Z){const i=new Z(r=>{if(r&&r.length>0){const e=r.pop();if(e){const r=e.isIntersecting||e.intersectionRatio>0;r!==o&&(t(!1,r),o=r)}}},{root:r});i.observe(e),n.push(()=>i.disconnect())}else n.push(V(e,()=>{const r=0===x(e).h;r!==o&&(t(!1,r),o=r)}));return b(r,e),()=>{v(n),h(e)}};export default()=>[C(),V(document.body,()=>{}),$(document.body,()=>{}),m('
fdfhdfgh
')]; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index a2d4205..275ae8e 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -264,6 +264,23 @@ return evt.preventDefault(); }; + var equal = function equal(a, b, props) { + if (a && b) { + var result = true; + each(props, function (prop) { + if (a[prop] !== b[prop]) { + result = false; + } + }); + return result; + } + + return false; + }; + var equalWH = function equalWH(a, b) { + return equal(a, b, ['w', 'h']); + }; + var hasOwnProperty = function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }; @@ -416,6 +433,8 @@ var abs = Math.abs, round = Math.round; var environmentElmId = 'os-environment'; + var classNameFlexboxGlue = 'flexbox-glue'; + var classNameFlexboxGlueMax = classNameFlexboxGlue + '-max'; var getNativeScrollbarSize = function getNativeScrollbarSize(body, measureElm) { appendChildren(body, measureElm); @@ -429,7 +448,7 @@ var getNativeScrollbarStyling = function getNativeScrollbarStyling(testElm) { var result = false; - addClass(testElm, 'os-viewport-native-scrollbars-invisible'); + addClass(testElm, 'os-viewport-scrollbar-styled'); try { result = @@ -458,6 +477,18 @@ }; }; + var getFlexboxGlue = function getFlexboxGlue(parentElm, childElm) { + addClass(parentElm, classNameFlexboxGlue); + var minOffsetsizeParent = offsetSize(parentElm); + var minOffsetsize = offsetSize(childElm); + var supportsMin = equalWH(minOffsetsize, minOffsetsizeParent); + addClass(parentElm, classNameFlexboxGlueMax); + var maxOffsetsizeParent = offsetSize(parentElm); + var maxOffsetsize = offsetSize(childElm); + var supportsMax = equalWH(maxOffsetsize, maxOffsetsizeParent); + return supportsMin && supportsMax; + }; + var getWindowDPR = function getWindowDPR() { var dDPI = window.screen.deviceXDPI || 0; var sDPI = window.screen.logicalXDPI || 1; @@ -488,6 +519,7 @@ _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid, _nativeScrollbarStyling: getNativeScrollbarStyling(envElm), _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm), + _flexboxGlue: getFlexboxGlue(envElm, envChildElm), _addListener: function _addListener(listener) { onChangedListener.add(listener); }, @@ -496,6 +528,7 @@ }, }; removeAttr(envElm, 'style'); + removeAttr(envElm, 'class'); removeElements(envElm); if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) { @@ -557,6 +590,7 @@ var scrollAmount = 3333333; var ResizeObserverConstructor = jsAPI('ResizeObserver'); var classNameSizeObserver = 'os-size-observer'; + var classNameSizeObserverAppear = classNameSizeObserver + '-appear'; var classNameSizeObserverListener = classNameSizeObserver + '-listener'; var classNameSizeObserverListenerItem = classNameSizeObserverListener + '-item'; var classNameSizeObserverListenerItemFinal = classNameSizeObserverListenerItem + '-final'; @@ -567,7 +601,13 @@ return style(elm, 'direction'); }; - var createSizeObserver = function createSizeObserver(target, onSizeChangedCallback, direction) { + var createSizeObserver = function createSizeObserver(target, onSizeChangedCallback, options) { + var _ref = options || {}, + _ref$_direction = _ref._direction, + direction = _ref$_direction === void 0 ? false : _ref$_direction, + _ref$_appear = _ref._appear, + appear = _ref$_appear === void 0 ? false : _ref$_appear; + var rtlScrollBehavior = getEnvironment()._rtlScrollBehavior; var baseElements = createDOM('
'); @@ -581,15 +621,18 @@ scrollTop(sizeObserver, scrollAmount); } - onSizeChangedCallback(dir === true); + onSizeChangedCallback(isString(dir) ? dir : undefined); }; var offListeners = []; - var appearCallback = onSizeChangedCallbackProxy; + var appearCallback = appear ? onSizeChangedCallbackProxy : null; if (ResizeObserverConstructor) { var resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy); resizeObserverInstance.observe(listenerElement); + offListeners.push(function () { + return resizeObserverInstance.disconnect(); + }); } else { var observerElementChildren = createDOM( '
')[0]; + var offListeners = []; + var heightIntrinsic = false; + + if (IntersectionObserverConstructor) { + var intersectionObserverInstance = new IntersectionObserverConstructor( + function (entries) { + if (entries && entries.length > 0) { + var last = entries.pop(); + + if (last) { + var newHeightIntrinsic = last.isIntersecting || last.intersectionRatio > 0; + + if (newHeightIntrinsic !== heightIntrinsic) { + onTrinsicChangedCallback(false, newHeightIntrinsic); + heightIntrinsic = newHeightIntrinsic; + } + } + } + }, + { + root: target, + } + ); + intersectionObserverInstance.observe(trinsicObserver); + offListeners.push(function () { + return intersectionObserverInstance.disconnect(); + }); + } else { + offListeners.push( + createSizeObserver(trinsicObserver, function () { + var newSize = offsetSize(trinsicObserver); + var newHeightIntrinsic = newSize.h === 0; + + if (newHeightIntrinsic !== heightIntrinsic) { + onTrinsicChangedCallback(false, newHeightIntrinsic); + heightIntrinsic = newHeightIntrinsic; + } + }) + ); + } + + prependChildren(target, trinsicObserver); + return function () { + runEach(offListeners); + removeElements(trinsicObserver); + }; + }; + var index = function () { return [ getEnvironment(), createSizeObserver(document.body, function () {}), + createTrinsicObserver(document.body, function () {}), createDOM( '\
\ diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 51f50f1..1289629 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/object.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/environment/environment.ts","../src/overlayscrollbars/observers/SizeObserver.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,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null;\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,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\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 * 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 */\r\nexport const runEach = (arr: ArrayLike | Set): void => {\r\n if (arr instanceof Set) {\r\n arr.forEach((fn) => fn && fn());\r\n } else {\r\n each(arr, (fn) => fn && fn());\r\n }\r\n};\r\n","import { each, from } from 'support/utils/array';\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\nexport const find = (selector: string, elm?: Element | null): 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\nexport const findFirst = (selector: string, elm?: Element | null): Element | null => (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\nexport const is = (elm: Element | null, selector: string): boolean => (elm ? elm.matches(selector) : false);\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\nexport const children = (elm: Element | null, 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 (child.matches(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\nexport const contents = (elm: Element | null): 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\nexport const parent = (elm: Node | null): Node | null => (elm ? elm.parentElement : null);\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 { 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 = (): HTMLDivElement => document.createElement('div');\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 offset- 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 offset- 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 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 { 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\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 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","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","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 resizeObserver: any | undefined = jsAPI('ResizeObserver');\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, indexOf, hasOwnProperty, keys } from 'support/utils';\r\nimport { type, isArray, isUndefined, isEmptyObject, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, Func, OptionsValidatedResult } 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): OptionsValidatedResult => {\r\n const validatedOptions: T = {} as T;\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;\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 const isEnumString = indexOf(Object.values(optionsTemplateTypes), currTemplateType) < 0;\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 : currTemplateType);\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 validate = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: T,\r\n doWriteErrors?: boolean\r\n): OptionsValidatedResult => {\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 { validate, 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 {\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} from 'support';\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 _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\nconst environmentElmId = 'os-environment';\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, 'os-viewport-native-scrollbars-invisible');\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 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 _addListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.add(listener);\r\n },\r\n _removeListener(listener: OnEnvironmentChanged): void {\r\n onChangedListener.delete(listener);\r\n },\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!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 createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n jsAPI,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nconst classNameSizeObserver = 'os-size-observer';\r\nconst classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nconst classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nconst classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\nconst cAF = cancelAnimationFrame;\r\nconst rAF = requestAnimationFrame;\r\nconst getDirection = (elm: HTMLElement) => style(elm, 'direction');\r\n\r\n// TODO:\r\n// 1. MAYBE add comparison function to offsetSize etc.\r\n\r\nexport const createSizeObserver = (target: HTMLElement, onSizeChangedCallback: (direction?: boolean) => any, direction?: boolean) => {\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 = (dir?: boolean) => {\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(dir === true);\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: (...args: any) => any = onSizeChangedCallbackProxy;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\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 = function () {\r\n rAFId = 0;\r\n if (!isDirty) return;\r\n\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || currSize.w !== cacheSize.w || currSize.h !== cacheSize.h;\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF(rAFId);\r\n rAFId = rAF(onResized);\r\n } else if (!scrollEvent) onResized();\r\n\r\n reset();\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 = onScroll;\r\n }\r\n\r\n if (direction) {\r\n let dirCache: string | undefined;\r\n offListeners.push(\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const dir = getDirection(sizeObserver);\r\n const changed = dir !== dirCache;\r\n if (changed) {\r\n if (dir === 'rtl') {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n dirCache = dir;\r\n onSizeChangedCallbackProxy(true);\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 offListeners.push(on(sizeObserver, animationStartEventName, appearCallback));\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 { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver } from 'overlayscrollbars/observers/SizeObserver';\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 createSizeObserver(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":["isNumber","obj","isString","isFunction","isUndefined","undefined","isArray","Array","isArrayLike","length","getSetProp","topLeft","fallback","elm","value","removeAttr","attrName","removeAttribute","scrollLeft","scrollTop","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","Object","keys","key","from","arr","push","runEach","Set","forEach","fn","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","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","window","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","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","hasOwnProperty","prop","prototype","call","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","toLowerCase","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","absoluteCoordinates","rect","left","pageYOffset","top","pageXOffset","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","name","prefix","resizeObserver","_extends","module","assign","arguments","apply","templateTypePrefixSuffix","optionsTemplateTypes","item","environmentInstance","abs","Math","round","environmentElmId","getNativeScrollbarSize","body","measureElm","cSize","oSize","getNativeScrollbarStyling","testElm","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","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","_addListener","_removeListener","delete","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","animationStartEventName","scrollEventName","scrollAmount","ResizeObserverConstructor","classNameSizeObserver","classNameSizeObserverListener","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","cAF","cancelAnimationFrame","rAF","requestAnimationFrame","getDirection","createSizeObserver","onSizeChangedCallback","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","onSizeChangedCallbackProxy","dir","rtl","appearCallback","resizeObserverInstance","observe","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","width","height","dirCache","event","changed","right"],"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/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/environment/environment.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.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,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null;\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,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\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 * 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 */\r\nexport const runEach = (arr: ArrayLike | Set): void => {\r\n if (arr instanceof Set) {\r\n arr.forEach((fn) => fn && fn());\r\n } else {\r\n each(arr, (fn) => fn && fn());\r\n }\r\n};\r\n","import { each, from } from 'support/utils/array';\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\nexport const find = (selector: string, elm?: Element | null): 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\nexport const findFirst = (selector: string, elm?: Element | null): Element | null => (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\nexport const is = (elm: Element | null, selector: string): boolean => (elm ? elm.matches(selector) : false);\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\nexport const children = (elm: Element | null, 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 (child.matches(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\nexport const contents = (elm: Element | null): 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\nexport const parent = (elm: Node | null): Node | null => (elm ? elm.parentElement : null);\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 { 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 = (): HTMLDivElement => document.createElement('div');\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 offset- 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 offset- 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 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","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 resizeObserver: any | undefined = jsAPI('ResizeObserver');\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, indexOf, 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 const isEnumString = indexOf(Object.values(optionsTemplateTypes), currTemplateType) < 0;\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 : currTemplateType);\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,\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 {\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\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\nconst environmentElmId = 'os-environment';\r\nconst classNameFlexboxGlue = 'flexbox-glue';\r\nconst classNameFlexboxGlueMax = `${classNameFlexboxGlue}-max`;\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, 'os-viewport-scrollbar-styled');\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, classNameFlexboxGlue);\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, classNameFlexboxGlueMax);\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 createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n jsAPI,\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} from 'support';\r\nimport { getEnvironment } from 'environment';\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nconst classNameSizeObserver = 'os-size-observer';\r\nconst classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nconst classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nconst classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nconst classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\nconst cAF = cancelAnimationFrame;\r\nconst rAF = requestAnimationFrame;\r\nconst getDirection = (elm: HTMLElement) => style(elm, 'direction');\r\n\r\n// TODO:\r\n// 1. MAYBE add comparison function to offsetSize etc.\r\ntype Direction = 'ltr' | 'rtl';\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (direction?: Direction) => 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 = (dir?: Direction) => {\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(dir) ? dir : 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 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 = function () {\r\n rAFId = 0;\r\n if (!isDirty) {\r\n return;\r\n }\r\n\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\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 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 let dirCache: string | undefined;\r\n offListeners.push(\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const dir = getDirection(sizeObserver);\r\n const changed = dir !== dirCache;\r\n if (changed) {\r\n if (dir === 'rtl') {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n dirCache = dir;\r\n onSizeChangedCallbackProxy(dir as Direction);\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 { createDOM, offsetSize, jsAPI, runEach, prependChildren, removeElements } from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\n\r\nconst classNameTrinsicObserver = 'os-trinsic-observer';\r\nconst IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsic: boolean) => any\r\n): (() => void) => {\r\n const trinsicObserver = createDOM(`
`)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n let heightIntrinsic = false;\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 newHeightIntrinsic = last.isIntersecting || last.intersectionRatio > 0;\r\n\r\n if (newHeightIntrinsic !== heightIntrinsic) {\r\n onTrinsicChangedCallback(false, newHeightIntrinsic);\r\n heightIntrinsic = newHeightIntrinsic;\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 newHeightIntrinsic = newSize.h === 0;\r\n\r\n if (newHeightIntrinsic !== heightIntrinsic) {\r\n onTrinsicChangedCallback(false, newHeightIntrinsic);\r\n heightIntrinsic = newHeightIntrinsic;\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 { createDOM } from 'support/dom';\r\nimport { getEnvironment } from 'environment';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\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 createSizeObserver(document.body, () => {}),\r\n createTrinsicObserver(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":["isNumber","obj","isString","isFunction","isUndefined","undefined","isArray","Array","isArrayLike","length","getSetProp","topLeft","fallback","elm","value","removeAttr","attrName","removeAttribute","scrollLeft","scrollTop","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","Object","keys","key","from","arr","push","runEach","Set","forEach","fn","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","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","window","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","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","hasOwnProperty","prototype","call","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","toLowerCase","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","absoluteCoordinates","rect","left","pageYOffset","top","pageXOffset","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","name","prefix","resizeObserver","_extends","module","assign","arguments","apply","templateTypePrefixSuffix","optionsTemplateTypes","item","environmentInstance","abs","Math","round","environmentElmId","classNameFlexboxGlue","classNameFlexboxGlueMax","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","animationStartEventName","scrollEventName","scrollAmount","ResizeObserverConstructor","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","cAF","cancelAnimationFrame","rAF","requestAnimationFrame","getDirection","createSizeObserver","onSizeChangedCallback","_direction","_appear","appear","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","onSizeChangedCallbackProxy","dir","rtl","appearCallback","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","width","height","dirCache","event","changed","right","classNameTrinsicObserver","IntersectionObserverConstructor","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","heightIntrinsic","intersectionObserverInstance","entries","last","pop","newHeightIntrinsic","isIntersecting","intersectionRatio","root","newSize"],"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 965c728..028ecb5 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";function n(n){return"number"==typeof n}function r(n){return"string"==typeof n}function i(n){return Array.isArray(n)}function t(r){var t=!!r&&r.length;return i(r)||!function(n){return"function"==typeof n}(r)&&n(t)&&t>-1&&t%1==0}function o(n,r,i,t){if(void 0===t)return i?i[n]:r;i&&(i[n]=t)}function e(n,r){return o("scrollLeft",0,n,r)}function u(n,r){return o("scrollTop",0,n,r)}var c=/[^\x20\t\r\n\f]+/g,s=function(n,i){!function(n,i,t){var o,e=0,u=!1;if(n&&r(i)){var s=i.match(c)||[];for(u=s.length>0;o=s[e++];)u=t(n.classList,o)&&u}}(n,i,(function(n,r){return n.add(r)}))};function l(n,r){if(t(n))for(var i=0;i
')[0],o=t.firstChild,e=new Set,u=Y(i,t),c={x:0===u.x,y:0===u.y},s={s:!1,l:u,v:c,m:B(t),p:D(t,o),g:function(n){e.add(n)},_:function(n){e.delete(n)}};if(r="style",null==(n=t)||n.removeAttribute(r),b(t),!c.x||!c.y){var l=p(),a=I(),f=u;window.addEventListener("resize",(function(){if(e.size){var n=p(),r={w:n.w-l.w,h:n.h-l.h};if(0===r.w&&0===r.h)return;var o={w:P(r.w),h:P(r.h)},u={w:P(R(n.w/(l.w/100))),h:P(R(n.h/(l.h/100)))},c=I(),s=o.w>2&&o.h>2,d=(h=u.h,m=P(u.w),y=P(h),!(m!==y&&m+1!==y&&m-1!==y));if(s&&d&&(c!==a&&a>0)){var w=E.l=Y(i,t);b(t),f.x===w.x&&f.y===w.y||v(e),f=w}l=n,a=c}var h,m,y}))}return s},U=function(){return E||(E=K()),E},W=q("ResizeObserver"),X=cancelAnimationFrame,C=requestAnimationFrame,G=function(n){return k(n,"direction")},H=function(n,r,i){var t,o,c,s=U().p,l=h('
')[0],a=l.firstChild,f=function(n){if(i){var t="rtl"===G(l);e(l,t?s.n?-3333333:s.i?0:3333333:3333333),u(l,3333333)}r(!0===n)},m=[],p=f;if(W){new W(f).observe(a)}else{var g=h('
');w(a,g);var O,j=g[0],S=j.lastChild,A=j.firstChild,L=null==A?void 0:A.firstChild,T=y(a),M=T,q=!1,E=function(){e(A,3333333),u(A,3333333),e(S,3333333),u(S,3333333)},F=function(){O=0,q&&(T=M,f())},P=function(n){return M=y(a),q=!n||M.w!==T.w||M.h!==T.h,n&&q&&!O?(X(O),O=C(F)):n||F(),E(),n&&(x(n),_(n)),!1};m.push(z(A,"scroll",P)),m.push(z(S,"scroll",P)),k(L,{width:3333333,height:3333333}),E(),p=P}i&&m.push(z(l,"scroll",(function(n){var r=G(l);return r!==t&&(k(a,"rtl"===r?{left:"auto",right:0}:{left:0,right:"auto"}),t=r,f(!0)),x(n),_(n),!1})));return m.push(z(l,"animationstart",p)),c=l,d(o=n,o&&o.firstChild,c),function(){v(m),b(l)}};return function(){return[U(),H(document.body,(function(){})),h('
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";function n(n){return"number"==typeof n}function r(n){return"string"==typeof n}function i(n){return Array.isArray(n)}function t(r){var t=!!r&&r.length;return i(r)||!function(n){return"function"==typeof n}(r)&&n(t)&&t>-1&&t%1==0}function o(n,r,i,t){if(void 0===t)return i?i[n]:r;i&&(i[n]=t)}var e=function(n,r){null==n||n.removeAttribute(r)};function u(n,r){return o("scrollLeft",0,n,r)}function c(n,r){return o("scrollTop",0,n,r)}var s=/[^\x20\t\r\n\f]+/g,f=function(n,i){!function(n,i,t){var o,e=0,u=!1;if(n&&r(i)){var c=i.match(s)||[];for(u=c.length>0;o=c[e++];)u=t(n.classList,o)&&u}}(n,i,(function(n,r){return n.add(r)}))};function a(n,r){if(t(n))for(var i=0;i
')[0],i=r.firstChild,t=new Set,o=D(n,r),u={x:0===o.x,y:0===o.y},c={s:!1,l:o,v:u,m:G(r),p:K(r,i),g:U(r,i),_:function(n){t.add(n)},O:function(n){t.delete(n)}};if(e(r,"style"),e(r,"class"),m(r),!u.x||!u.y){var s=g(),f=W(),a=o;window.addEventListener("resize",(function(){if(t.size){var i=g(),o={w:i.w-s.w,h:i.h-s.h};if(0===o.w&&0===o.h)return;var e={w:Y(o.w),h:Y(o.h)},u={w:Y(B(i.w/(s.w/100))),h:Y(B(i.h/(s.h/100)))},c=W(),l=e.w>2&&e.h>2,v=(b=u.h,h=Y(u.w),p=Y(b),!(h!==p&&h+1!==p&&h-1!==p));if(l&&v&&(c!==f&&f>0)){var w=P.l=D(n,r);m(r),a.x===w.x&&a.y===w.y||d(t),a=w}s=i,f=c}var b,h,p}))}return c},C=function(){return P||(P=X()),P},H=I("ResizeObserver"),J=cancelAnimationFrame,N=requestAnimationFrame,Q=function(n){return T(n,"direction")},V=function(n,i,t){var o,e=t||{},s=e.j,a=void 0!==s&&s,l=e.S,v=void 0!==l&&l,w=C().p,y=p('
')[0],g=y.firstChild,z=function(n){if(a){var t="rtl"===Q(y);u(y,t?w.n?-3333333:w.i?0:3333333:3333333),c(y,3333333)}i(r(n)?n:void 0)},k=[],A=v?z:null;if(H){var L=new H(z);L.observe(g),k.push((function(){return L.disconnect()}))}else{var M=p('
');b(g,M);var q,E=M[0],F=E.lastChild,I=E.firstChild,P=null==I?void 0:I.firstChild,R=x(g),Y=R,B=!1,D=function(){u(I,3333333),c(I,3333333),u(F,3333333),c(F,3333333)},G=function(){q=0,B&&(R=Y,z())},K=function(n){return Y=x(g),B=!n||!S(Y,R),n&&B&&!q?(J(q),q=N(G)):n||G(),D(),n&&(j(n),O(n)),!1};k.push(_(I,"scroll",K)),k.push(_(F,"scroll",K)),T(P,{width:3333333,height:3333333}),D(),A=v?K:D}a&&k.push(_(y,"scroll",(function(n){var r=Q(y);return r!==o&&(T(g,"rtl"===r?{left:"auto",right:0}:{left:0,right:"auto"}),o=r,z(r)),j(n),O(n),!1})));return A&&(f(y,"os-size-observer-appear"),k.push(_(y,"animationstart",A))),h(n,y),function(){d(k),m(y)}},Z=I("IntersectionObserver"),$=function(n,r){var i=p('
')[0],t=[],o=!1;if(Z){var e=new Z((function(n){if(n&&n.length>0){var i=n.pop();if(i){var t=i.isIntersecting||i.intersectionRatio>0;t!==o&&(r(!1,t),o=t)}}}),{root:n});e.observe(i),t.push((function(){return e.disconnect()}))}else t.push(V(i,(function(){var n=0===x(i).h;n!==o&&(r(!1,n),o=n)})));return h(n,i),function(){d(t),m(i)}};return function(){return[C(),V(document.body,(function(){})),$(document.body,(function(){})),p('
fdfhdfgh
')]}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/index.ts b/packages/overlayscrollbars/src/index.ts index aa80cd1..cbc5cbc 100644 --- a/packages/overlayscrollbars/src/index.ts +++ b/packages/overlayscrollbars/src/index.ts @@ -1,7 +1,7 @@ import { createDOM } from 'support/dom'; import { getEnvironment } from 'environment'; -import { createSizeObserver } from 'overlayscrollbars/observers/SizeObserver'; -import { createTrinsicObserver } from 'overlayscrollbars/observers/TrinsicObserver'; +import { createSizeObserver } from 'observers/sizeObserver'; +import { createTrinsicObserver } from 'observers/trinsicObserver'; const abc = { a: 1, diff --git a/packages/overlayscrollbars/src/observers/index.scss b/packages/overlayscrollbars/src/observers/index.scss deleted file mode 100644 index e69de29..0000000 diff --git a/packages/overlayscrollbars/types/environment/environment.d.ts b/packages/overlayscrollbars/types/environment/environment.d.ts index ccd612b..46cffc9 100644 --- a/packages/overlayscrollbars/types/environment/environment.d.ts +++ b/packages/overlayscrollbars/types/environment/environment.d.ts @@ -9,6 +9,7 @@ export interface Environment { n: boolean; i: boolean; }; + _flexboxGlue: boolean; _addListener(listener: OnEnvironmentChanged): void; _removeListener(listener: OnEnvironmentChanged): void; } diff --git a/packages/overlayscrollbars/types/lifecycles/lifecycleBase.d.ts b/packages/overlayscrollbars/types/lifecycles/lifecycleBase.d.ts new file mode 100644 index 0000000..cedbebb --- /dev/null +++ b/packages/overlayscrollbars/types/lifecycles/lifecycleBase.d.ts @@ -0,0 +1,14 @@ +import { CacheUpdateInfo, CachePropsToUpdate, CacheUpdated, OptionsWithOptionsTemplate, OptionsValidated } from 'support'; +import { PlainObject } from 'typings'; +interface AbstractLifecycle { + _options(newOptions?: O): O; + _update(force?: boolean): void; +} +export interface Lifecycle extends AbstractLifecycle { + _destruct(): void; +} +export interface LifecycleBase extends AbstractLifecycle { + _cacheChange(cachePropsToUpdate?: CachePropsToUpdate): void; +} +export declare const createLifecycleBase: (defaultOptionsWithTemplate: OptionsWithOptionsTemplate>, cacheUpdateInfo: CacheUpdateInfo, initialOptions: O | undefined, updateFunction: (changedOptions: OptionsValidated, changedCache: CacheUpdated) => any) => LifecycleBase; +export {}; diff --git a/packages/overlayscrollbars/types/lifecycles/structureLifecycle.d.ts b/packages/overlayscrollbars/types/lifecycles/structureLifecycle.d.ts new file mode 100644 index 0000000..82d87c5 --- /dev/null +++ b/packages/overlayscrollbars/types/lifecycles/structureLifecycle.d.ts @@ -0,0 +1,10 @@ +import { Lifecycle } from 'lifecycles/lifecycleBase'; +export declare type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll'; +export interface StructureLifecycleOptions { + paddingAbsolute: boolean; + overflowBehavior?: { + x?: OverflowBehavior; + y?: OverflowBehavior; + }; +} +export declare const createStructureLifecycle: (target: HTMLElement, initialOptions?: StructureLifecycleOptions | undefined) => Lifecycle; diff --git a/packages/overlayscrollbars/types/observers/sizeObserver.d.ts b/packages/overlayscrollbars/types/observers/sizeObserver.d.ts new file mode 100644 index 0000000..3e07f4b --- /dev/null +++ b/packages/overlayscrollbars/types/observers/sizeObserver.d.ts @@ -0,0 +1,7 @@ +declare type Direction = 'ltr' | 'rtl'; +export declare type SizeObserverOptions = { + _direction?: boolean; + _appear?: boolean; +}; +export declare const createSizeObserver: (target: HTMLElement, onSizeChangedCallback: (direction?: "ltr" | "rtl" | undefined) => any, options?: SizeObserverOptions | undefined) => (() => void); +export {}; diff --git a/packages/overlayscrollbars/types/observers/trinsicObserver.d.ts b/packages/overlayscrollbars/types/observers/trinsicObserver.d.ts new file mode 100644 index 0000000..213239e --- /dev/null +++ b/packages/overlayscrollbars/types/observers/trinsicObserver.d.ts @@ -0,0 +1 @@ +export declare const createTrinsicObserver: (target: HTMLElement, onTrinsicChangedCallback: (widthIntrinsic: boolean, heightIntrinsic: boolean) => any) => (() => void); diff --git a/packages/overlayscrollbars/types/options/options.d.ts b/packages/overlayscrollbars/types/options/options.d.ts index c272cba..832c889 100644 --- a/packages/overlayscrollbars/types/options/options.d.ts +++ b/packages/overlayscrollbars/types/options/options.d.ts @@ -1,4 +1,2 @@ -import { OptionsTemplate } from 'support/options'; import { Options } from 'options'; -export declare const optionsTemplate: OptionsTemplate>; -export declare const defaultOptions: Options; +export declare const optionsTemplate: import("../support/options").OptionsTemplate>, defaultOptions: Required; diff --git a/packages/overlayscrollbars/types/overlayscrollbars/lifecycles/StructureLifecycle.d.ts b/packages/overlayscrollbars/types/overlayscrollbars/lifecycles/StructureLifecycle.d.ts deleted file mode 100644 index 8b3f0d2..0000000 --- a/packages/overlayscrollbars/types/overlayscrollbars/lifecycles/StructureLifecycle.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { OverlayScrollbarsLifecycle } from 'overlayscrollbars/lifecycles'; -export interface StructureLifecycleOptions { - _paddingAbsolute: boolean; - _autoSizeCapable: boolean; - _heightAuto: boolean; - _widthAuto: boolean; - _border: [number, number, number, number]; - _padding: [number, number, number, number]; - _margin: [number, number, number, number]; -} -export declare class StructureLifecycle extends OverlayScrollbarsLifecycle { - _update(options?: StructureLifecycleOptions): void; - _destruct(): void; -} diff --git a/packages/overlayscrollbars/types/overlayscrollbars/lifecycles/index.d.ts b/packages/overlayscrollbars/types/overlayscrollbars/lifecycles/index.d.ts deleted file mode 100644 index 7c8a980..0000000 --- a/packages/overlayscrollbars/types/overlayscrollbars/lifecycles/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { PlainObject } from 'typings'; -import { Environment } from 'environment'; -export declare abstract class OverlayScrollbarsLifecycle { - protected environment: Environment; - constructor(environment: Environment); - abstract _update(options?: T): void; - abstract _destruct(): void; -} diff --git a/packages/overlayscrollbars/types/overlayscrollbars/observers/SizeObserver.d.ts b/packages/overlayscrollbars/types/overlayscrollbars/observers/SizeObserver.d.ts deleted file mode 100644 index b762e06..0000000 --- a/packages/overlayscrollbars/types/overlayscrollbars/observers/SizeObserver.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const createSizeObserver: (target: HTMLElement, onSizeChangedCallback: (direction?: boolean | undefined) => any, direction?: boolean | undefined) => () => void; diff --git a/packages/overlayscrollbars/types/overlayscrollbars/observers/TrinsicObserver.d.ts b/packages/overlayscrollbars/types/overlayscrollbars/observers/TrinsicObserver.d.ts deleted file mode 100644 index 0ee4a03..0000000 --- a/packages/overlayscrollbars/types/overlayscrollbars/observers/TrinsicObserver.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const hi: () => null; diff --git a/packages/overlayscrollbars/types/support/cache/cache.d.ts b/packages/overlayscrollbars/types/support/cache/cache.d.ts new file mode 100644 index 0000000..ade858c --- /dev/null +++ b/packages/overlayscrollbars/types/support/cache/cache.d.ts @@ -0,0 +1,12 @@ +declare type UpdateCachePropFunction = (current?: T[P], previous?: T[P]) => T[P]; +declare type EqualCachePropFunction = (a?: T[P], b?: T[P]) => boolean; +export declare type CachePropsToUpdate = Array | keyof T; +export declare type CacheUpdate = (propsToUpdate?: CachePropsToUpdate, force?: boolean) => CacheUpdated; +export declare type CacheUpdated = { + [P in keyof T]?: T[P]; +}; +export declare type CacheUpdateInfo = { + [P in keyof T]: UpdateCachePropFunction | [UpdateCachePropFunction, EqualCachePropFunction]; +}; +export declare const createCache: (cacheUpdateInfo: CacheUpdateInfo) => CacheUpdate; +export {}; diff --git a/packages/overlayscrollbars/types/support/cache/index.d.ts b/packages/overlayscrollbars/types/support/cache/index.d.ts new file mode 100644 index 0000000..3061f36 --- /dev/null +++ b/packages/overlayscrollbars/types/support/cache/index.d.ts @@ -0,0 +1 @@ +export * from 'support/cache/cache'; diff --git a/packages/overlayscrollbars/types/support/dom/style.d.ts b/packages/overlayscrollbars/types/support/dom/style.d.ts index 057e7c9..bf2d4b9 100644 --- a/packages/overlayscrollbars/types/support/dom/style.d.ts +++ b/packages/overlayscrollbars/types/support/dom/style.d.ts @@ -1,3 +1,9 @@ +export interface TRBL { + t: number; + r: number; + b: number; + l: number; +} declare type CssStyles = { [key: string]: string | number; }; @@ -8,4 +14,5 @@ export declare function style(elm: HTMLElement | null, styles: Array | s }; export declare const hide: (elm: HTMLElement | null) => void; export declare const show: (elm: HTMLElement | null) => void; +export declare const topRightBottomLeft: (elm: HTMLElement | null, property?: string | undefined) => TRBL; export {}; diff --git a/packages/overlayscrollbars/types/support/index.d.ts b/packages/overlayscrollbars/types/support/index.d.ts index 25ec35a..34cac2c 100644 --- a/packages/overlayscrollbars/types/support/index.d.ts +++ b/packages/overlayscrollbars/types/support/index.d.ts @@ -1,3 +1,4 @@ +export * from 'support/cache'; export * from 'support/compatibility'; export * from 'support/dom'; export * from 'support/options'; diff --git a/packages/overlayscrollbars/types/support/options/index.d.ts b/packages/overlayscrollbars/types/support/options/index.d.ts index c2fdc9b..e63258f 100644 --- a/packages/overlayscrollbars/types/support/options/index.d.ts +++ b/packages/overlayscrollbars/types/support/options/index.d.ts @@ -9,9 +9,12 @@ export declare type OptionsTemplateValue> = { [P in keyof T]: PlainObject extends T[P] ? OptionsTemplate> : T[P] extends OptionsTemplateNativeTypes ? OptionsTemplateValue : never; }; -export declare type OptionsValidatedResult = { - readonly foreign: PlainObject; - readonly validated: T; +export declare type OptionsValidated = { + [P in keyof T]?: T[P]; +}; +export declare type OptionsValidationResult = { + readonly _foreign: PlainObject; + readonly _validated: OptionsValidated; }; export declare type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue]; export declare type OptionsWithOptionsTemplate> = { diff --git a/packages/overlayscrollbars/types/support/options/transformation.d.ts b/packages/overlayscrollbars/types/support/options/transformation.d.ts index b1c5f42..81d35f7 100644 --- a/packages/overlayscrollbars/types/support/options/transformation.d.ts +++ b/packages/overlayscrollbars/types/support/options/transformation.d.ts @@ -1,3 +1,6 @@ import { OptionsTemplate, OptionsWithOptionsTemplate } from 'support/options'; -export declare function transform>(optionsWithOptionsTemplate: OptionsWithOptionsTemplate): T; -export declare function transform>(optionsWithOptionsTemplate: OptionsWithOptionsTemplate, toTemplate: true | void): OptionsTemplate; +export interface OptionsWithOptionsTemplateTransformation> { + _template: OptionsTemplate; + _options: T; +} +export declare function transformOptions>(optionsWithOptionsTemplate: OptionsWithOptionsTemplate): OptionsWithOptionsTemplateTransformation; diff --git a/packages/overlayscrollbars/types/support/options/validation.d.ts b/packages/overlayscrollbars/types/support/options/validation.d.ts index 7b24af5..e589a08 100644 --- a/packages/overlayscrollbars/types/support/options/validation.d.ts +++ b/packages/overlayscrollbars/types/support/options/validation.d.ts @@ -1,8 +1,8 @@ import { OptionsTemplate, OptionsTemplateType, Func, OptionsValidationResult } from 'support/options'; import { PlainObject } from 'typings'; declare const optionsTemplateTypes: OptionsTemplateTypesDictionary; -declare const validate: >(options: T, template: OptionsTemplate>, optionsDiff?: T | undefined, doWriteErrors?: boolean | undefined) => OptionsValidationResult; -export { validate, optionsTemplateTypes }; +declare const validateOptions: >(options: T, template: OptionsTemplate>, optionsDiff?: T | undefined, doWriteErrors?: boolean | undefined) => OptionsValidationResult; +export { validateOptions, optionsTemplateTypes }; declare type OptionsTemplateTypesDictionary = { readonly boolean: OptionsTemplateType; readonly number: OptionsTemplateType; diff --git a/packages/overlayscrollbars/types/support/utils/equal.d.ts b/packages/overlayscrollbars/types/support/utils/equal.d.ts new file mode 100644 index 0000000..391de13 --- /dev/null +++ b/packages/overlayscrollbars/types/support/utils/equal.d.ts @@ -0,0 +1,6 @@ +import { WH, XY, TRBL } from 'support/dom'; +import { PlainObject } from 'typings'; +export declare const equal: >(a: T | undefined, b: T | undefined, props: (keyof T)[]) => boolean; +export declare const equalWH: (a?: WH | undefined, b?: WH | undefined) => boolean; +export declare const equalXY: (a?: XY | undefined, b?: XY | undefined) => boolean; +export declare const equalTRBL: (a?: TRBL | undefined, b?: TRBL | undefined) => boolean; diff --git a/packages/overlayscrollbars/types/support/utils/index.d.ts b/packages/overlayscrollbars/types/support/utils/index.d.ts index 3a3a49c..e80b708 100644 --- a/packages/overlayscrollbars/types/support/utils/index.d.ts +++ b/packages/overlayscrollbars/types/support/utils/index.d.ts @@ -1,3 +1,4 @@ export * from 'support/utils/array'; +export * from 'support/utils/equal'; export * from 'support/utils/object'; export * from 'support/utils/types';