diff --git a/package.json b/package.json
index e14e12f..951b276 100644
--- a/package.json
+++ b/package.json
@@ -59,8 +59,8 @@
"rollup-plugin-terser": "^6.1.0",
"rollup-plugin-typescript2": "^0.27.1",
"should": "^13.2.3",
- "tslib": "^2.1.0",
- "typescript": "^4.1.5",
+ "tslib": "^2.2.0",
+ "typescript": "^4.2.4",
"utf-8-validate": "^5.0.2"
},
"scripts": {
diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js
index 9806220..9cc4454 100644
--- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js
+++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js
@@ -432,6 +432,7 @@ const on = (target, eventNames, listener, options) => {
};
const stopPropagation = (evt) => evt.stopPropagation();
const preventDefault = (evt) => evt.preventDefault();
+const stopAndPrevent = (evt) => stopPropagation(evt) || preventDefault(evt);
const equal = (a, b, props, propMutation) => {
if (a && b) {
@@ -1478,18 +1479,8 @@ const createOverflowLifecycle = (lifecycleHub) => {
const animationStartEventName = 'animationstart';
const scrollEventName = 'scroll';
const scrollAmount = 3333333;
-const directionIsRTLMap = {
- direction: ['rtl'],
-};
-const directionIsRTL = (elm) => {
- let isRTL = false;
- const styles = style(elm, ['direction']);
- each(styles, (value, key) => {
- isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;
- });
- return isRTL;
-};
+const directionIsRTL = (elm) => style(elm, 'direction') === 'rtl';
const domRectHasDimensions = (rect) => rect && (rect.height || rect.width);
@@ -1569,21 +1560,18 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => {
currSize = offsetSize(listenerElement);
isDirty = !scrollEvent || !equalWH(currSize, cacheSize);
- if (scrollEvent && isDirty && !rAFId) {
- cAF(rAFId);
- rAFId = rAF(onResized);
- } else if (!scrollEvent) {
+ if (scrollEvent) {
+ stopAndPrevent(scrollEvent);
+
+ if (isDirty && !rAFId) {
+ cAF(rAFId);
+ rAFId = rAF(onResized);
+ }
+ } else {
onResized();
}
reset();
-
- if (scrollEvent) {
- preventDefault(scrollEvent);
- stopPropagation(scrollEvent);
- }
-
- return false;
};
push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);
@@ -1592,7 +1580,7 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => {
height: scrollAmount,
});
reset();
- appearCallback = observeAppearChange ? () => onScroll() : reset;
+ appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;
}
if (observeDirectionChange) {
@@ -1620,9 +1608,7 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => {
onSizeChangedCallbackProxy(directionIsRTLCacheValues);
}
- preventDefault(event);
- stopPropagation(event);
- return false;
+ stopAndPrevent(event);
})
);
}
@@ -1659,7 +1645,7 @@ const createSizeObserver = (target, onSizeChangedCallback, options) => {
};
const createTrinsicObserver = (target, onTrinsicChangedCallback) => {
- const trinsicObserver = createDOM(`
`)[0];
+ const trinsicObserver = createDiv(classNameTrinsicObserver);
const offListeners = [];
const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache(
(ioEntryOrSize) => ioEntryOrSize.h === 0 || ioEntryOrSize.isIntersecting || ioEntryOrSize.intersectionRatio > 0,
@@ -1718,59 +1704,54 @@ const createTrinsicObserver = (target, onTrinsicChangedCallback) => {
};
};
-const createEventContentChange = (target, eventContentChange, map, callback) => {
+const createEventContentChange = (target, eventContentChange, callback) => {
+ let map;
let eventContentChangeRef;
- const addEvent = (elm, eventName) => {
- const entry = map.get(elm);
- const newEntry = isUndefined(entry);
-
- const registerEvent = () => {
- map.set(elm, eventName);
- on(elm, eventName, callback);
- };
-
- if (!newEntry && eventName !== entry) {
- off(elm, entry, callback);
- registerEvent();
- } else if (newEntry) {
- registerEvent();
+ const _destroy = () => {
+ if (map) {
+ map.forEach((eventName, elm) => off(elm, eventName, callback));
+ map.clear();
}
};
- const _destroy = () => {
- map.forEach((eventName, elm) => {
- off(elm, eventName, callback);
- });
- map.clear();
- };
-
const _updateElements = (getElements) => {
- if (eventContentChangeRef) {
+ if (map && eventContentChangeRef) {
const eventElmList = eventContentChangeRef.reduce((arr, item) => {
if (item) {
const selector = item[0];
- const eventName = item[1];
- const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));
+ const eventNames = item[1];
+ const elements = eventNames && selector && (getElements ? getElements(selector) : find(selector, target));
+ const parsedEventNames = isFunction(eventNames) ? eventNames(elements) : eventNames;
- if (elements) {
- push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName], true);
+ if (elements && elements.length && parsedEventNames && isString(parsedEventNames)) {
+ push(arr, [elements, parsedEventNames.trim()], true);
}
}
return arr;
}, []);
- each(eventElmList, (item) => {
- const elements = item[0];
- const eventName = item[1];
- each(elements, (elm) => {
- addEvent(elm, eventName);
- });
- });
+ each(eventElmList, (item) =>
+ each(item[0], (elm) => {
+ const eventNames = item[1];
+ const registredEventNames = map.get(elm);
+ const newEntry = isUndefined(registredEventNames);
+ const changingExistingEntry = !newEntry && eventNames !== registredEventNames;
+ const finalEventNames = changingExistingEntry ? `${registredEventNames} ${eventNames}` : eventNames;
+
+ if (changingExistingEntry) {
+ off(elm, registredEventNames, callback);
+ }
+
+ map.set(elm, finalEventNames);
+ on(elm, finalEventNames, callback);
+ })
+ );
}
};
- const _update = (newEventContentChange) => {
+ const _updateEventContentChange = (newEventContentChange) => {
+ map = map || new Map();
eventContentChangeRef = newEventContentChange;
_destroy();
@@ -1779,38 +1760,37 @@ const createEventContentChange = (target, eventContentChange, map, callback) =>
};
if (eventContentChange) {
- _update(eventContentChange);
+ _updateEventContentChange(eventContentChange);
}
return {
_destroy,
_updateElements,
- _update,
+ _updateEventContentChange,
};
};
-const createDOMObserver = (target, callback, options) => {
+const createDOMObserver = (target, isContentObserver, callback, options) => {
let isConnected = false;
const {
- _observeContent,
_attributes,
_styleChangingAttributes,
_eventContentChange,
_nestedTargetSelector,
- _ignoreTargetAttrChange: _ignoreTargetChange,
+ _ignoreTargetChange,
+ _ignoreNestedTargetChange,
_ignoreContentChange,
} = options || {};
const {
- _updateElements: updateEventContentChangeElements,
_destroy: destroyEventContentChange,
- _update: updateEventContentChange,
+ _updateElements: updateEventContentChangeElements,
+ _updateEventContentChange: updateEventContentChange,
} = createEventContentChange(
target,
- _observeContent && _eventContentChange,
- new Map(),
+ isContentObserver && _eventContentChange,
debounce(() => {
if (isConnected) {
- callback([], false, true);
+ callback(true);
}
}, 84)
);
@@ -1819,7 +1799,7 @@ const createDOMObserver = (target, callback, options) => {
const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);
const observerCallback = (mutations) => {
- const ignoreTargetChange = _ignoreTargetChange || noop;
+ const ignoreTargetChange = (isContentObserver ? _ignoreNestedTargetChange : _ignoreTargetChange) || noop;
const ignoreContentChange = _ignoreContentChange || noop;
const targetChangedAttrs = [];
const totalAddedNodes = [];
@@ -1833,20 +1813,11 @@ const createDOMObserver = (target, callback, options) => {
const targetIsMutationTarget = target === mutationTarget;
const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget, attributeName) : 0;
const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;
- const targetAttrChanged =
- attributeChanged &&
- targetIsMutationTarget &&
- !_observeContent &&
- !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue);
const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;
- if (targetAttrChanged) {
- push(targetChangedAttrs, attributeName);
- }
-
- if (_observeContent) {
+ if (isContentObserver && !targetIsMutationTarget) {
const notOnlyAttrChanged = !isAttributesType;
- const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;
+ const contentAttrChanged = isAttributesType && styleChangingAttrChanged;
const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);
const baseAssertion = isNestedTarget
? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue)
@@ -1857,7 +1828,15 @@ const createDOMObserver = (target, callback, options) => {
childListChanged = childListChanged || isChildListType;
}
- targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);
+ if (
+ !isContentObserver &&
+ targetIsMutationTarget &&
+ attributeChanged &&
+ !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue)
+ ) {
+ push(targetChangedAttrs, attributeName);
+ targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;
+ }
});
if (childListChanged && !isEmptyArray(totalAddedNodes)) {
@@ -1869,8 +1848,10 @@ const createDOMObserver = (target, callback, options) => {
);
}
- if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {
- callback(targetChangedAttrs, targetStyleChanged, contentChanged);
+ if (isContentObserver) {
+ contentChanged && callback(contentChanged);
+ } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {
+ callback(targetChangedAttrs, targetStyleChanged);
}
};
@@ -1879,13 +1860,13 @@ const createDOMObserver = (target, callback, options) => {
attributes: true,
attributeOldValue: true,
attributeFilter: observedAttributes,
- subtree: _observeContent,
- childList: _observeContent,
- characterData: _observeContent,
+ subtree: isContentObserver,
+ childList: isContentObserver,
+ characterData: isContentObserver,
});
isConnected = true;
return {
- _disconnect: () => {
+ _destroy: () => {
if (isConnected) {
destroyEventContentChange();
mutationObserver.disconnect();
@@ -1893,7 +1874,7 @@ const createDOMObserver = (target, callback, options) => {
}
},
_updateEventContentChange: (newEventContentChange) => {
- updateEventContentChange(isConnected && _observeContent && newEventContentChange);
+ updateEventContentChange(isConnected && isContentObserver && newEventContentChange);
},
_update: () => {
if (isConnected) {
@@ -2077,12 +2058,11 @@ const createLifecycleHub = (options, structureSetup) => {
_appear: true,
_direction: !_nativeScrollbarStyling,
});
- const hostMutationObserver = createDOMObserver(_host, onHostMutation, {
+ const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {
_styleChangingAttributes: attrs,
_attributes: attrs,
});
- const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, {
- _observeContent: true,
+ const contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {
_styleChangingAttributes: attrs,
_attributes: attrs,
_eventContentChange: options.updating.elementEvents,
diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map
index 4808077..8a101f4 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/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions): Cache => {\r\n const { _equal, _initialValue, _alwaysUpdateValues } = options || {};\r\n let _value: T | undefined = _initialValue;\r\n let _previous: T | undefined;\r\n\r\n const cacheUpdate = ((force?: boolean | 0, context?: C) => {\r\n const curr = _value;\r\n // @ts-ignore\r\n // update can only not be a function if C extends T as described in \"UpdateCachePropFunction\" type definition\r\n // if C extends T the cast (context as T) is perfectly valid\r\n const newVal = update ? update(context, _value, _previous) : (context as T);\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return {\r\n _value,\r\n _previous,\r\n _changed: changed,\r\n };\r\n }) as CacheUpdate;\r\n\r\n return {\r\n _update: cacheUpdate,\r\n _current: (force?: boolean) => ({\r\n _value,\r\n _previous,\r\n _changed: !!force,\r\n }),\r\n };\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n return isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat) ? (length > 0 && isObject(obj) ? length - 1 in obj : true) : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj ? (instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType) : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null | undefined;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: Array, items: T | ArrayLike, arrayIsSingleItem?: boolean): Array => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items) ? Array.prototype.push.apply(array, items as Array) : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: Array | null | undefined) => array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, p1?: unknown): void => {\r\n const runFn = (fn: RunEachItem) => fn && fn(p1);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n } else {\r\n each(arr, runFn);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (elm: InputElementType, highBoundarySelector: string, deepBoundarySelector: string): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | false | null | undefined, preferredAnchor: Node | null | undefined, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null | undefined, 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 | undefined, 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 | undefined, 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 | undefined, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor: any | undefined = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | false | null | undefined, 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 | false | null | undefined, 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 | false | null | undefined, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string | null | undefined, classNameB: string | null | undefined) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","export interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the 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 | undefined): boolean => (elm ? elementHasDimensions(elm as HTMLElement) : false);\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, runEach } from 'support/utils/array';\r\n\r\nlet passiveEventsSupport: boolean;\r\nconst supportPassiveEvents = (): boolean => {\r\n if (isUndefined(passiveEventsSupport)) {\r\n passiveEventsSupport = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (target: EventTarget, eventNames: string, listener: (event: T) => any, capture?: boolean): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return 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 = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber } from 'support/utils/types';\r\nimport { cAF, rAF } from 'support/compatibility/apis';\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param timeout The timeout for debouncing. If 0 or lower animation frame is used for debouncing, a timeout otherwise.\r\n * @param maxWait A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\nexport const debounce = (functionToDebounce: (...args: any) => any, timeout?: number, maxWait?: number) => {\r\n let timeoutId: number | void;\r\n let lastCallTime: number;\r\n const hasTimeout = isNumber(timeout) && timeout > 0;\r\n const hasMaxWait = isNumber(maxWait) && maxWait > 0;\r\n const cancel = hasTimeout ? window.clearTimeout : cAF!;\r\n const set = hasTimeout ? window.setTimeout : rAF!;\r\n const setFn = function (args: IArguments) {\r\n lastCallTime = hasMaxWait ? performance.now() : 0;\r\n timeoutId && cancel(timeoutId);\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n return function () {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const boundSetFn = setFn.bind(this, arguments); // eslint-disable-line\r\n const forceCall = hasMaxWait ? performance.now() - lastCallTime >= maxWait! : false;\r\n\r\n timeoutId && cancel(timeoutId);\r\n timeoutId = forceCall ? boundSetFn() : (set(boundSetFn, timeout!) as number);\r\n };\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n //animationiterationcount: 1,\r\n //columncount: 1,\r\n //fillopacity: 1,\r\n //flexgrow: 1,\r\n //flexshrink: 1,\r\n //fontweight: 1,\r\n //lineheight: 1,\r\n 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[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | false | null | undefined, prop: string, val: string | number): void => {\r\n try {\r\n if (elm) {\r\n const { style } = elm;\r\n if (!isUndefined(style[prop])) {\r\n style[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n style.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: StyleObject): void;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: string): string;\r\nexport function style(elm: HTMLElement | false | null | undefined, styles: Array | string): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns a top\r\n * @param elm\r\n * @param property\r\n */\r\nexport const topRightBottomLeft = (elm: HTMLElement | false | null | undefined, propertyPrefix?: string, propertySuffix?: string): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: unknown, ...args: unknown[]) => unknown;\r\nexport type OptionsTemplateType = ExtractPropsKey;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = {\r\n readonly _foreign: Record;\r\n readonly _validated: PartialOptions;\r\n};\r\n\r\nexport type PartialOptions = {\r\n [P in keyof T]?: T[P] extends OptionsObjectType ? PartialOptions : T[P];\r\n};\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst { 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/**\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: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff: T,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const 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 T, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult._validated as any;\r\n optionsCopy[prop] = validatedResult._foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n _foreign: optionsCopy,\r\n _validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n options: PartialOptions,\r\n template: OptionsTemplate,\r\n optionsDiff?: T | null,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || ({} as T), doWriteErrors || false);\r\n};\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import {\r\n OptionsTemplate,\r\n OptionsObjectType,\r\n OptionsTemplateNativeTypes,\r\n OptionsTemplateTypes,\r\n OptionsTemplateValue,\r\n} from 'support/options/validation';\r\nimport { PlainObject } from 'typings';\r\nimport { isArray } from 'support/utils/types';\r\nimport { each, keys } from 'support/utils';\r\n\r\nexport interface OptionsWithOptionsTemplateTransformation {\r\n _template: OptionsTemplate;\r\n _options: T;\r\n}\r\n\r\nexport type OptionsWithOptionsTemplateValue = [T, OptionsTemplateValue];\r\n\r\nexport type OptionsWithOptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsWithOptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsWithOptionsTemplateValue\r\n : never;\r\n};\r\n\r\n/**\r\n * Transforms the given OptionsWithOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object.\r\n * @param optionsWithOptionsTemplate The OptionsWithOptionsTemplate object which shall be converted.\r\n * @param toTemplate True if the given OptionsWithOptionsTemplate shall be converted to its corresponding Template object.\r\n */\r\nexport const transformOptions = (optionsWithOptionsTemplate: OptionsWithOptionsTemplate): OptionsWithOptionsTemplateTransformation => {\r\n const result: any = {\r\n _template: {},\r\n _options: {},\r\n };\r\n\r\n each(keys(optionsWithOptionsTemplate), (key: Extract) => {\r\n const val: PlainObject | OptionsTemplateTypes | Array = optionsWithOptionsTemplate[key];\r\n\r\n if (isArray(val)) {\r\n result._template[key] = val[1];\r\n result._options[key] = val[0];\r\n } else {\r\n // if (isObject(val))\r\n const tmpResult = transformOptions(val as OptionsWithOptionsTemplate);\r\n result._template[key] = tmpResult._template;\r\n result._options[key] = tmpResult._options;\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const classNameHost = 'os-host';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n","import {\r\n optionsTemplateTypes as oTypes,\r\n transformOptions,\r\n OptionsTemplateValue,\r\n OptionsWithOptionsTemplateValue,\r\n OptionsWithOptionsTemplate,\r\n} from 'support/options';\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface OSOptions {\r\n resize: ResizeBehavior;\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: ReadonlyArray<[string, string]> | null;\r\n contentMutationDebounce: number;\r\n hostMutationDebounce: number;\r\n resizeDebounce: number;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n textarea: {\r\n dynWidth: boolean;\r\n dynHeight: boolean;\r\n inheritedAttrs: string | ReadonlyArray | null;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n /*\r\n callbacks?: {\r\n onInitialized?: BasicEventCallback | null;\r\n onInitializationWithdrawn?: BasicEventCallback | null;\r\n onDestroyed?: BasicEventCallback | null;\r\n onScrollStart?: ScrollEventCallback | null;\r\n onScroll?: ScrollEventCallback | null;\r\n onScrollStop?: ScrollEventCallback | null;\r\n onOverflowChanged?: OverflowChangedCallback | null;\r\n onOverflowAmountChanged?: OverflowAmountChangedCallback | null;\r\n onDirectionChanged?: DirectionChangedCallback | null;\r\n onContentSizeChanged?: SizeChangedCallback | null;\r\n onHostSizeChanged?: SizeChangedCallback | null;\r\n onUpdated?: UpdatedCallback | null;\r\n };\r\n */\r\n}\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst stringArrayNullAllowedValues: OptionsTemplateValue | null> = [oTypes.string, oTypes.array, oTypes.null];\r\nconst booleanTrueTemplate: OptionsWithOptionsTemplateValue = [true, oTypes.boolean];\r\nconst booleanFalseTemplate: OptionsWithOptionsTemplateValue = [false, oTypes.boolean];\r\n// const callbackTemplate: OptionsWithOptionsTemplateValue = [null, [oTypes.function, oTypes.null]];\r\nconst resizeAllowedValues: OptionsTemplateValue = 'none both horizontal vertical';\r\nconst overflowAllowedValues: OptionsTemplateValue = 'visible-hidden visible-scroll scroll hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue = 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue = 'never scroll leavemove';\r\n\r\n/**\r\n * A object which serves as \"default options object\" and \"options template object\".\r\n * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.\r\n *\r\n * The property value is a tuple:\r\n * the first value is the default value\r\n * the second value is the template value\r\n * Example:\r\n * {\r\n * a: ['default', [Type.string, Type.null]],\r\n * b: [250, Type.number]\r\n * }\r\n * Property \"a\" has a default value of 'default' and it can be a string or null\r\n * Property \"b\" has a default value of 250 and it can be number\r\n */\r\nconst defaultOptionsWithTemplate: OptionsWithOptionsTemplate = {\r\n resize: ['none', resizeAllowedValues], // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: booleanFalseTemplate, // true || false\r\n updating: {\r\n elementEvents: [[['img', 'load']], [oTypes.array, oTypes.null]], // array of tuples || null\r\n contentMutationDebounce: [80, numberAllowedValues], // number\r\n hostMutationDebounce: [0, numberAllowedValues], // number\r\n resizeDebounce: [0, numberAllowedValues], // number\r\n },\r\n overflow: {\r\n x: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowAllowedValues], // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], // visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], // number\r\n dragScroll: booleanTrueTemplate, // true || false\r\n clickScroll: booleanFalseTemplate, // true || false\r\n touch: booleanTrueTemplate, // true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, // true || false\r\n dynHeight: booleanFalseTemplate, // true || false\r\n inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], // string || array || null\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: booleanFalseTemplate, // true || false\r\n initialize: booleanFalseTemplate, // true || false\r\n },\r\n /*\r\n callbacks: {\r\n onInitialized: callbackTemplate, // null || function\r\n onInitializationWithdrawn: callbackTemplate, // null || function\r\n onDestroyed: callbackTemplate, // null || function\r\n onScrollStart: callbackTemplate, // null || function\r\n onScroll: callbackTemplate, // null || function\r\n onScrollStop: callbackTemplate, // null || function\r\n onOverflowChanged: callbackTemplate, // null || function\r\n onOverflowAmountChanged: callbackTemplate, // null || function\r\n onDirectionChanged: callbackTemplate, // null || function\r\n onContentSizeChanged: callbackTemplate, // null || function\r\n onHostSizeChanged: callbackTemplate, // null || function\r\n onUpdated: callbackTemplate, // null || function\r\n },\r\n */\r\n};\r\n\r\nexport const { _template: optionsTemplate, _options: defaultOptions } = transformOptions(defaultOptionsWithTemplate);\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 equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n PartialOptions,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { OSOptions, defaultOptions } from 'options';\r\n\r\nexport interface InitializationStrategy {\r\n _padding: boolean;\r\n _content: boolean;\r\n}\r\n\r\nexport type OnEnvironmentChanged = (env: Environment) => void;\r\nexport interface Environment {\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 _cssCustomProperties: boolean;\r\n _addListener(listener: OnEnvironmentChanged): void;\r\n _removeListener(listener: OnEnvironmentChanged): void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): OSOptions;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n _defaultInitializationStrategy: InitializationStrategy;\r\n _defaultDefaultOptions: OSOptions;\r\n}\r\n\r\nlet environmentInstance: Environment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n 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 getDefaultInitializationStrategy = (nativeScrollbarStyling: boolean): InitializationStrategy => ({\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\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 const onChangedListener: Set = new Set();\r\n const nativeScrollbarSize = getNativeScrollbarSize(body, envElm);\r\n const nativeScrollbarStyling = false; //getNativeScrollbarStyling(envElm); //TODO: Re - enable;\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);\r\n let initializationStrategy = defaultInitializationStrategy;\r\n let defaultDefaultOptions = defaultOptions;\r\n\r\n const env: Environment = {\r\n _nativeScrollbarSize: nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling: nativeScrollbarStyling,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\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 _getInitializationStrategy: () => ({ ...initializationStrategy }),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: () => ({ ...defaultDefaultOptions }),\r\n _setDefaultOptions(newDefaultOptions) {\r\n defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: defaultInitializationStrategy,\r\n _defaultDefaultOptions: defaultDefaultOptions,\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!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 isHTMLElement,\r\n appendChildren,\r\n is,\r\n createDiv,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n isUndefined,\r\n removeElements,\r\n removeClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n isBoolean,\r\n} from 'support';\r\nimport {\r\n classNameHost,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { OSTarget, OSTargetObject, OSTargetElement } from 'typings';\r\n\r\nexport interface OSTargetContext {\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: HTMLDocument;\r\n}\r\n\r\nexport interface PreparedOSTargetObject {\r\n _target: OSTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false | null;\r\n _content: HTMLElement | false | null;\r\n _viewportArrange: HTMLStyleElement | false | null;\r\n}\r\n\r\nexport interface StructureSetup {\r\n _targetObj: PreparedOSTargetObject;\r\n _targetCtx: OSTargetContext;\r\n _destroy: () => void;\r\n}\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement => {\r\n const elm = document.createElement('style');\r\n\r\n attr(elm, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n\r\n return elm;\r\n};\r\nconst evaluateCreationFromStrategy = (initializationValue: HTMLElement | boolean | undefined, strategy: boolean): HTMLElement | false | undefined => {\r\n const isBooleanValue = isBoolean(initializationValue);\r\n if (isBooleanValue || isUndefined(initializationValue)) {\r\n return (isBooleanValue ? initializationValue : strategy) && undefined;\r\n }\r\n return initializationValue as HTMLElement;\r\n};\r\n\r\nexport const createStructureSetup = (target: OSTarget | OSTargetObject): StructureSetup => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } = getEnvironment();\r\n const { _padding: paddingNeeded, _content: contentNeeded } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const osTargetObj: Partial = targetIsElm\r\n ? ({} as Partial)\r\n : {\r\n _host: (target as OSTargetObject).host,\r\n _target: (target as OSTargetObject).target,\r\n _viewport: (target as OSTargetObject).viewport,\r\n _padding: evaluateCreationFromStrategy((target as OSTargetObject).padding, paddingNeeded),\r\n _content: evaluateCreationFromStrategy((target as OSTargetObject).content, contentNeeded),\r\n };\r\n\r\n if (targetIsElm) {\r\n const viewport = createDiv(classNameViewport);\r\n const padding = paddingNeeded && createDiv(classNamePadding);\r\n const content = contentNeeded && createDiv(classNameContent);\r\n\r\n osTargetObj._target = target as OSTargetElement;\r\n osTargetObj._padding = padding;\r\n osTargetObj._viewport = viewport;\r\n osTargetObj._content = content;\r\n }\r\n\r\n let { _target, _padding, _viewport, _content } = osTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextarea = is(_target, 'textarea');\r\n const isBody = !isTextarea && is(_target, 'body');\r\n const _host = (isTextarea ? osTargetObj._host || createDiv() : _target) as HTMLElement;\r\n const getTargetContents = (contentSlot: HTMLElement) => (isTextarea ? (_target as HTMLTextAreaElement) : contents(contentSlot as HTMLElement));\r\n const isTextareaHostGenerated = isTextarea && _host !== osTargetObj._host;\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n if (targetIsElm) {\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, getTargetContents(_target!));\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n appendChildren(_host, contents(contentSlot));\r\n removeElements(_padding || _viewport);\r\n removeClass(_host, classNameHost);\r\n });\r\n } else {\r\n const contentContainingElm = _content || _viewport || _padding || _host;\r\n const createPadding = isUndefined(_padding);\r\n const createViewport = isUndefined(_viewport);\r\n const createContent = isUndefined(_content);\r\n const targetContents = getTargetContents(contentContainingElm);\r\n\r\n _padding = osTargetObj._padding = createPadding ? createDiv() : _padding;\r\n _viewport = osTargetObj._viewport = createViewport ? createDiv() : _viewport;\r\n _content = osTargetObj._content = createContent ? createDiv() : _content;\r\n\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n const contentSlot = _content || _viewport;\r\n appendChildren(contentSlot, targetContents);\r\n\r\n push(destroyFns, () => {\r\n if (createContent) {\r\n unwrap(_content);\r\n }\r\n if (createViewport) {\r\n unwrap(_viewport);\r\n }\r\n if (createPadding) {\r\n unwrap(_padding);\r\n }\r\n removeClass(_host, classNameHost);\r\n removeClass(_padding, classNamePadding);\r\n removeClass(_viewport, classNameViewport);\r\n removeClass(_content, classNameContent);\r\n });\r\n }\r\n\r\n addClass(_host, classNameHost);\r\n addClass(_padding, classNamePadding);\r\n addClass(_viewport, classNameViewport);\r\n addClass(_content, classNameContent);\r\n\r\n const ownerDocument: HTMLDocument = _target!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const ctx: OSTargetContext = {\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n };\r\n // @ts-ignore\r\n const obj: PreparedOSTargetObject = {\r\n ...osTargetObj,\r\n _host,\r\n };\r\n\r\n if (_nativeScrollbarStyling) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n } else if (!_cssCustomProperties && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y)) {\r\n const viewportArrangeElm = createUniqueViewportArrangeElement();\r\n\r\n insertBefore(_viewport, viewportArrangeElm);\r\n push(destroyFns, removeElements.bind(0, viewportArrangeElm));\r\n\r\n obj._viewportArrange = viewportArrangeElm;\r\n }\r\n\r\n return {\r\n _targetObj: obj,\r\n _targetCtx: ctx,\r\n _destroy: () => {\r\n runEach(destroyFns);\r\n },\r\n };\r\n};\r\n","import { style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createTrinsicLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup } = lifecycleHub;\r\n const { _content } = _structureSetup._targetObj;\r\n\r\n return (updateHints) => {\r\n const { _heightIntrinsic } = updateHints;\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: heightIntrinsic ? 'auto' : '100%',\r\n });\r\n }\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _setPaddingInfo, _setViewportPaddingStyle, _structureSetup } = lifecycleHub;\r\n const { _host, _padding, _viewport } = _structureSetup._targetObj;\r\n const { _update: updatePaddingCache, _current: currentPaddingCache } = createCache(() => topRightBottomLeft(_host, 'padding'), {\r\n _equal: equalTRBL,\r\n });\r\n\r\n return (updateHints, checkOption, force) => {\r\n let { _value: padding, _changed: paddingChanged } = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _sizeChanged, _directionIsRTL } = updateHints;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: paddingAbsolute, _changed: paddingAbsoluteChanged } = checkOption('paddingAbsolute');\r\n\r\n if (_sizeChanged || paddingChanged) {\r\n ({ _value: padding, _changed: paddingChanged } = updatePaddingCache(force));\r\n }\r\n\r\n const paddingStyleChanged = paddingAbsoluteChanged || directionChanged || paddingChanged;\r\n\r\n if (paddingStyleChanged) {\r\n const { _value: padding } = updatePaddingCache(force);\r\n // if there is no padding element and no scrollbar styling padding absolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding!.r + padding!.l;\r\n const paddingVertical = padding!.t + padding!.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: 0,\r\n top: paddingRelative ? -padding!.t : 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n maxWidth: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding!.t : 0,\r\n paddingRight: paddingRelative ? padding!.r : 0,\r\n paddingBottom: paddingRelative ? padding!.b : 0,\r\n paddingLeft: paddingRelative ? padding!.l : 0,\r\n };\r\n\r\n if (paddingRelative) {\r\n const horizontalPositionKey: keyof StyleObject = directionIsRTL ? 'right' : 'left';\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const horizontalPositionValue = directionIsRTL ? padding!.r : padding!.l;\r\n\r\n paddingStyle[horizontalPositionKey] = -horizontalPositionValue;\r\n paddingStyle[horizontalMarginKey] = -paddingHorizontal;\r\n }\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n _setPaddingInfo({\r\n _absolute: !paddingRelative,\r\n _padding: padding!,\r\n });\r\n _setViewportPaddingStyle(\r\n _padding\r\n ? viewportStyle\r\n : {\r\n ...paddingStyle,\r\n ...viewportStyle,\r\n }\r\n );\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n equalXY,\r\n style,\r\n scrollSize,\r\n CacheValues,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n offsetSize,\r\n getBoundingClientRect,\r\n noop,\r\n each,\r\n} from 'support';\r\nimport { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';\r\nimport { getEnvironment } from 'environment';\r\nimport { OverflowBehavior } from 'options';\r\nimport { StyleObject } from 'typings';\r\nimport { classNameViewportArrange, classNameViewportScrollbarStyling } from 'classnames';\r\n\r\ninterface ContentScrollSizeCacheContext {\r\n _viewportRect: DOMRect;\r\n _viewportOffsetSize: WH;\r\n _viewportScrollSize: WH;\r\n}\r\n\r\ninterface OverflowAmountCacheContext {\r\n _contentScrollSize: WH;\r\n _viewportSize: WH;\r\n}\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n}\r\n\r\ninterface UndoViewportArrangeResult {\r\n _redoViewportArrange: () => void;\r\n _viewportOverflowState?: ViewportOverflowState;\r\n}\r\n\r\ninterface OverflowOption {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n}\r\n\r\nconst overlaidScrollbarsHideOffset = 42;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param lifecycleHub\r\n * @returns\r\n */\r\nexport const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle => {\r\n const { _structureSetup, _doViewportArrange, _getViewportPaddingStyle, _getPaddingInfo, _setViewportOverflowScroll } = lifecycleHub;\r\n const { _host, _padding, _viewport, _viewportArrange } = _structureSetup._targetObj;\r\n const { _update: updateContentScrollSizeCache, _current: getCurrentContentScrollSizeCache } = createCache<\r\n WH,\r\n ContentScrollSizeCacheContext\r\n >((ctx) => fixScrollSizeRounding(ctx._viewportScrollSize, ctx._viewportOffsetSize, ctx._viewportRect), { _equal: equalWH });\r\n const { _update: updateOverflowAmountCache, _current: getCurrentOverflowAmountCache } = createCache, OverflowAmountCacheContext>(\r\n (ctx) => ({\r\n x: Math.max(0, ctx._contentScrollSize.w - ctx._viewportSize.w),\r\n y: Math.max(0, ctx._contentScrollSize.h - ctx._viewportSize.h),\r\n }),\r\n { _equal: equalXY, _initialValue: { x: 0, y: 0 } }\r\n );\r\n\r\n /**\r\n * Fixes incorrect roundng of scroll size.\r\n * @param viewportScrollSize The potential incorrect viewport scroll size.\r\n * @param viewportOffsetSize The viewport offset size.\r\n * @param viewportRect The viewport bounding client rect.\r\n * @returns The passed scroll size without rounding errors.\r\n */\r\n const fixScrollSizeRounding = (viewportScrollSize: WH, viewportOffsetSize: WH, viewportRect: DOMRect): WH => ({\r\n w: viewportScrollSize.w - Math.round(Math.max(0, viewportRect.width - viewportOffsetSize.w)),\r\n h: viewportScrollSize.h - Math.round(Math.max(0, viewportRect.height - viewportOffsetSize.h)),\r\n });\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (viewportOverflowState: ViewportOverflowState, heightIntrinsic: boolean) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _absolute: paddingAbsolute, _padding: padding } = _getPaddingInfo();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const hostBCR = getBoundingClientRect(_host);\r\n const hostOffsetSize = offsetSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n const paddingAbsoluteVertical = paddingAbsolute ? padding.b + padding.t : 0;\r\n const clientSizeWithoutRounding = hostClientSize.h + (hostBCR.height - hostOffsetSize.h);\r\n\r\n style(_viewport, {\r\n height: clientSizeWithoutRounding + (_overflowScroll.x ? _scrollbarsHideOffset.x : 0) - paddingAbsoluteVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (showNativeOverlaidScrollbars: boolean, viewportStyleObj?: StyleObject): ViewportOverflowState => {\r\n const { _nativeScrollbarSize, _nativeScrollbarIsOverlaid, _nativeScrollbarStyling } = getEnvironment();\r\n const { x: overlaidX, y: overlaidY } = _nativeScrollbarIsOverlaid;\r\n const determineOverflow = !viewportStyleObj;\r\n const arrangeHideOffset = !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const styleObj = determineOverflow ? style(_viewport, ['overflowX', 'overflowY']) : viewportStyleObj;\r\n const scroll = {\r\n x: styleObj!.overflowX === 'scroll',\r\n y: styleObj!.overflowY === 'scroll',\r\n };\r\n const scrollbarsHideOffset = {\r\n x: scroll.x && !_nativeScrollbarStyling ? (overlaidX ? arrangeHideOffset : _nativeScrollbarSize.x) : 0,\r\n y: scroll.y && !_nativeScrollbarStyling ? (overlaidY ? arrangeHideOffset : _nativeScrollbarSize.y) : 0,\r\n };\r\n\r\n return {\r\n _overflowScroll: scroll,\r\n _scrollbarsHideOffsetArrange: {\r\n x: overlaidX && !!arrangeHideOffset,\r\n y: overlaidY && !!arrangeHideOffset,\r\n },\r\n _scrollbarsHideOffset: scrollbarsHideOffset,\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n overflowAmount: XY,\r\n overflow: OverflowOption,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setPartialStylePerAxis = (horizontal: boolean, overflowAmount: number, behavior: OverflowBehavior, styleObj: StyleObject) => {\r\n const overflowKey: keyof StyleObject = horizontal ? 'overflowX' : 'overflowY';\r\n const behaviorIsScroll = behavior === 'scroll';\r\n const behaviorIsVisibleScroll = behavior === 'visible-scroll';\r\n const hideOverflow = behaviorIsScroll || behavior === 'hidden';\r\n const applyStyle = overflowAmount > 0 && hideOverflow;\r\n\r\n if (applyStyle) {\r\n styleObj[overflowKey] = behavior;\r\n }\r\n\r\n return {\r\n _visible: !applyStyle,\r\n _behavior: behaviorIsVisibleScroll ? 'scroll' : 'hidden',\r\n };\r\n };\r\n const { _visible: xVisible, _behavior: xVisibleBehavior } = setPartialStylePerAxis(true, overflowAmount!.x, overflow.x, viewportStyleObj);\r\n const { _visible: yVisible, _behavior: yVisibleBehavior } = setPartialStylePerAxis(false, overflowAmount!.y, overflow.y, viewportStyleObj);\r\n\r\n if (xVisible && !yVisible) {\r\n viewportStyleObj.overflowX = xVisibleBehavior;\r\n }\r\n if (yVisible && !xVisible) {\r\n viewportStyleObj.overflowY = yVisibleBehavior;\r\n }\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param contentScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (viewportOverflowState: ViewportOverflowState, contentScrollSize: WH, directionIsRTL: boolean) => {\r\n if (_doViewportArrange) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportPaddingStyle = _getViewportPaddingStyle();\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingRight' : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey] as number;\r\n const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;\r\n const arrangeSize = {\r\n w: hideOffsetY && arrangeY ? `${hideOffsetY + contentScrollSize.w - viewportArrangeHorizontalPaddingValue}px` : '',\r\n h: hideOffsetX && arrangeX ? `${hideOffsetX + contentScrollSize.h - viewportArrangeVerticalPaddingValue}px` : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(`#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, 0);\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--viewport-arrange-width' | '--viewport-arrange-height'>(_viewport, {\r\n '--viewport-arrange-width': arrangeSize.w,\r\n '--viewport-arrange-height': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return _doViewportArrange;\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ) => {\r\n const { _nativeScrollbarStyling } = getEnvironment();\r\n const { _overflowScroll, _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { x: scrollX, y: scrollY } = _overflowScroll;\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL ? 'paddingLeft' : 'paddingRight';\r\n const horizontalMarginValue = paddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = paddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = paddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = paddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.maxWidth = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] = horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n\r\n // hide overflowing scrollbars if there are any\r\n if (!_nativeScrollbarStyling) {\r\n style(_padding || _host, {\r\n overflow: scrollX || scrollY ? 'hidden' : '',\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (showNativeOverlaidScrollbars: boolean, viewportOverflowState?: ViewportOverflowState): UndoViewportArrangeResult => {\r\n if (_doViewportArrange) {\r\n const finalViewportOverflowState = viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const paddingStyle = _getViewportPaddingStyle();\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = paddingStyle[prop];\r\n });\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n if (arrangeX) {\r\n assignProps('marginTop marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n removeClass(_viewport, classNameViewportArrange);\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return {\r\n _redoViewportArrange: () => {\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n _viewportOverflowState: finalViewportOverflowState,\r\n };\r\n }\r\n return {\r\n _redoViewportArrange: noop,\r\n };\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const { _directionIsRTL, _heightIntrinsic, _sizeChanged, _hostMutation, _contentMutation, _paddingStyleChanged } = updateHints;\r\n const { _flexboxGlue, _nativeScrollbarStyling, _nativeScrollbarIsOverlaid } = getEnvironment();\r\n const { _value: heightIntrinsic, _changed: heightIntrinsicChanged } = _heightIntrinsic;\r\n const { _value: directionIsRTL, _changed: directionChanged } = _directionIsRTL;\r\n const { _value: showNativeOverlaidScrollbarsOption, _changed: showNativeOverlaidScrollbarsChanged } = checkOption(\r\n 'nativeScrollbarsOverlaid.show'\r\n );\r\n const showNativeOverlaidScrollbars = showNativeOverlaidScrollbarsOption && _nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_flexboxGlue && (_sizeChanged || _contentMutation || _hostMutation || showNativeOverlaidScrollbarsChanged || heightIntrinsicChanged);\r\n let overflowAmuntCache: CacheValues> = getCurrentOverflowAmountCache(force);\r\n let contentScrollSizeCache: CacheValues> = getCurrentContentScrollSizeCache(force);\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n if (showNativeOverlaidScrollbars) {\r\n removeClass(_viewport, classNameViewportScrollbarStyling);\r\n } else {\r\n addClass(_viewport, classNameViewportScrollbarStyling);\r\n }\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n if (_sizeChanged || _paddingStyleChanged || _contentMutation || showNativeOverlaidScrollbarsChanged || directionChanged) {\r\n const { _redoViewportArrange, _viewportOverflowState: undoViewportArrangeOverflowState } = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n preMeasureViewportOverflowState\r\n );\r\n const contentSize = clientSize(_viewport);\r\n const viewportRect = getBoundingClientRect(_viewport);\r\n const viewportOffsetSize = offsetSize(_viewport);\r\n let viewportScrollSize = scrollSize(_viewport);\r\n let viewportClientSize = contentSize;\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = (contentScrollSizeCache = updateContentScrollSizeCache(force, {\r\n _viewportRect: viewportRect,\r\n _viewportOffsetSize: viewportOffsetSize,\r\n _viewportScrollSize: viewportScrollSize,\r\n }));\r\n\r\n _redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (contentScrollSizeChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(undoViewportArrangeOverflowState, contentScrollSize!, directionIsRTL!)\r\n ) {\r\n viewportClientSize = clientSize(_viewport);\r\n viewportScrollSize = fixScrollSizeRounding(scrollSize(_viewport), offsetSize(_viewport), getBoundingClientRect(_viewport));\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(force, {\r\n _contentScrollSize: {\r\n w: Math.max(contentScrollSize!.w, viewportScrollSize.w),\r\n h: Math.max(contentScrollSize!.h, viewportScrollSize.h),\r\n },\r\n _viewportSize: {\r\n w: viewportClientSize.w + Math.max(0, contentSize.w - contentScrollSize!.w),\r\n h: viewportClientSize.h + Math.max(0, contentSize.h - contentScrollSize!.h),\r\n },\r\n });\r\n }\r\n\r\n const { _value: overflow, _changed: overflowChanged } = checkOption('overflow');\r\n const { _value: contentScrollSize, _changed: contentScrollSizeChanged } = contentScrollSizeCache;\r\n const { _value: overflowAmount, _changed: overflowAmountChanged } = overflowAmuntCache;\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n contentScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n directionChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n maxWidth: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n\r\n const viewportOverflowState = setViewportOverflowState(showNativeOverlaidScrollbars, overflowAmount!, overflow, viewportStyle);\r\n const viewportArranged = arrangeViewport(viewportOverflowState, contentScrollSize!, directionIsRTL!);\r\n hideNativeScrollbars(viewportOverflowState, directionIsRTL!, viewportArranged, viewportStyle);\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, !!heightIntrinsic);\r\n }\r\n\r\n // TODO: enlargen viewport if div too small for firefox scrollbar hiding behavior\r\n // TODO: hide host overflow if scroll x or y and no padding element there\r\n // TODO: Test without content\r\n // TODO: Test without padding\r\n\r\n style(_viewport, viewportStyle);\r\n\r\n _setViewportOverflowScroll(viewportOverflowState._overflowScroll);\r\n }\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n preventDefault,\r\n stopPropagation,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n indexOf,\r\n each,\r\n isBoolean,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\ninterface SizeObserverEntry {\r\n contentRect: DOMRectReadOnly;\r\n}\r\n\r\nexport type SizeObserverOptions = { _direction?: boolean; _appear?: boolean };\r\n\r\nexport interface SizeObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _directionIsRTL: CacheValues;\r\n };\r\n}\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst directionIsRTLMap = {\r\n direction: ['rtl'],\r\n // 'writing-mode': ['sideways-rl', 'tb', 'tb-rl', 'vertical-rl'],\r\n};\r\nconst directionIsRTL = (elm: HTMLElement): boolean => {\r\n let isRTL = false;\r\n const styles = style(elm, ['direction' /* , 'writing-mode' */]);\r\n each(styles, (value, key) => {\r\n isRTL = isRTL || indexOf(directionIsRTLMap[key], value) > -1;\r\n });\r\n return isRTL;\r\n};\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (directionIsRTLCache?: CacheValues) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } = options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(``);\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const { _update: updateResizeObserverContentRectCache } = createCache(0, {\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (sizeChangedContext?: CacheValues | SizeObserverEntry[] | Event) => {\r\n const hasDirectionCache = sizeChangedContext && isBoolean((sizeChangedContext as CacheValues)._value);\r\n\r\n let skip = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isArray(sizeChangedContext) && sizeChangedContext.length > 0) {\r\n const { _previous, _value, _changed } = updateResizeObserverContentRectCache(0, sizeChangedContext.pop()!.contentRect);\r\n skip = !_previous || !domRectHasDimensions(_value); // skip on initial RO. call or if display is none\r\n doDirectionScroll = !skip && _changed; // direction scroll when not skipping and changing from display: none to block, false otherwise\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n doDirectionScroll = (sizeChangedContext as CacheValues)._changed; // direction scroll when DirectionCache changed, false toherwise\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const rtl = hasDirectionCache ? (sizeChangedContext as CacheValues)._value : directionIsRTL(sizeObserver);\r\n scrollLeft(sizeObserver, rtl ? (rtlScrollBehavior.n ? -scrollAmount : rtlScrollBehavior.i ? 0 : scrollAmount) : scrollAmount);\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback(hasDirectionCache ? (sizeChangedContext as CacheValues) : undefined);\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange ? onSizeChangedCallbackProxy : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => resizeObserverInstance.disconnect());\r\n } else {\r\n const observerElementChildren = createDOM(\r\n ``\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(listenerElement);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = () => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy();\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event) => {\r\n currSize = offsetSize(listenerElement);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent && isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n } else if (!scrollEvent) {\r\n onResized();\r\n }\r\n\r\n reset();\r\n\r\n if (scrollEvent) {\r\n preventDefault(scrollEvent);\r\n stopPropagation(scrollEvent);\r\n }\r\n return false;\r\n };\r\n\r\n push(offListeners, [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n reset();\r\n appearCallback = observeAppearChange ? () => onScroll() : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(() => directionIsRTL(sizeObserver));\r\n const { _update: updateDirectionIsRTLCache } = directionIsRTLCache;\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const { _value, _changed } = directionIsRTLCacheValues;\r\n if (_changed) {\r\n if (_value) {\r\n style(listenerElement, { left: 'auto', right: 0 });\r\n } else {\r\n style(listenerElement, { left: 0, right: 'auto' });\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n preventDefault(event);\r\n stopPropagation(event);\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _directionIsRTL: directionIsRTLCache\r\n ? directionIsRTLCache._current(force)\r\n : {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n },\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDOM,\r\n offsetSize,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport interface TrinsicObserver {\r\n _destroy(): void;\r\n _getCurrentCacheValues(\r\n force?: boolean\r\n ): {\r\n _heightIntrinsic: CacheValues;\r\n };\r\n}\r\n\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): TrinsicObserver => {\r\n const trinsicObserver = createDOM(``)[0] as HTMLElement;\r\n const offListeners: (() => void)[] = [];\r\n const { _update: updateHeightIntrinsicCache, _current: getCurrentHeightIntrinsicCache } = createCache<\r\n boolean,\r\n IntersectionObserverEntry | WH\r\n >(\r\n (ioEntryOrSize: IntersectionObserverEntry | WH) =>\r\n (ioEntryOrSize! as WH).h === 0 ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize! as IntersectionObserverEntry).intersectionRatio > 0,\r\n {\r\n _initialValue: false,\r\n }\r\n );\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n const last = entries.pop();\r\n if (last) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(0, last);\r\n\r\n if (heightIntrinsic._changed) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => intersectionObserverInstance.disconnect());\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n const heightIntrinsicCache = updateHeightIntrinsicCache(0, newSize);\r\n if (heightIntrinsicCache._changed) {\r\n onTrinsicChangedCallback(heightIntrinsicCache);\r\n }\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged)._destroy);\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return {\r\n _destroy() {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n _getCurrentCacheValues(force?: boolean) {\r\n return {\r\n _heightIntrinsic: getCurrentHeightIntrinsicCache(force),\r\n };\r\n },\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n off,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n isUndefined,\r\n isFunction,\r\n} from 'support';\r\n\r\ntype StringNullUndefined = string | null | undefined;\r\nexport type DOMObserverEventContentChange =\r\n | Array<[StringNullUndefined, ((elms: Node[]) => string) | StringNullUndefined] | null | undefined>\r\n | false\r\n | null\r\n | undefined;\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions: DOMObserverOptions | undefined\r\n) => boolean;\r\nexport type DOMObserverIgnoreTargetAttrChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\nexport interface DOMObserverOptions {\r\n _observeContent?: boolean; // do observe children and trigger content change\r\n _attributes?: string[]; // observed attributes\r\n _styleChangingAttributes?: string[]; // list of attributes that trigger a contentChange or a targetStyleChange if changed\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname]\r\n _nestedTargetSelector?: string;\r\n _ignoreTargetAttrChange?: DOMObserverIgnoreTargetAttrChange;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange;\r\n}\r\nexport interface DOMObserver {\r\n _disconnect: () => void;\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => void;\r\n _update: () => void;\r\n}\r\n\r\n// const styleChangingAttributes = ['id', 'class', 'style', 'open'];\r\n// const mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n\r\nconst createEventContentChange = (\r\n target: Element,\r\n eventContentChange: DOMObserverEventContentChange,\r\n map: Map,\r\n callback: (...args: any) => any\r\n) => {\r\n let eventContentChangeRef: DOMObserverEventContentChange;\r\n const addEvent = (elm: Node, eventName: string) => {\r\n const entry = map.get(elm);\r\n const newEntry = isUndefined(entry);\r\n const registerEvent = () => {\r\n map.set(elm, eventName);\r\n on(elm, eventName, callback);\r\n };\r\n\r\n if (!newEntry && eventName !== entry) {\r\n off(elm, entry!, callback);\r\n registerEvent();\r\n } else if (newEntry) {\r\n registerEvent();\r\n }\r\n };\r\n const _destroy = () => {\r\n map.forEach((eventName: string, elm: Node) => {\r\n off(elm, eventName, callback);\r\n });\r\n map.clear();\r\n };\r\n const _updateElements = (getElements?: (selector: string) => Node[]) => {\r\n if (eventContentChangeRef) {\r\n const eventElmList = eventContentChangeRef.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventName = item[1];\r\n const elements = eventName && selector && (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements) {\r\n push(arr, [elements, isFunction(eventName) ? eventName(elements) : eventName!], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) => {\r\n const elements = item[0];\r\n const eventName = item[1];\r\n\r\n each(elements, (elm) => {\r\n addEvent(elm, eventName);\r\n });\r\n });\r\n }\r\n };\r\n const _update = (newEventContentChange: DOMObserverEventContentChange) => {\r\n eventContentChangeRef = newEventContentChange;\r\n _destroy();\r\n _updateElements();\r\n };\r\n\r\n if (eventContentChange) {\r\n _update(eventContentChange);\r\n }\r\n\r\n return {\r\n _destroy,\r\n _updateElements,\r\n _update,\r\n };\r\n};\r\n\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n callback: (targetChangedAttrs: string[], targetStyleChanged: boolean, contentChanged: boolean) => any,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _observeContent,\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetAttrChange: _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = options || {};\r\n const {\r\n _updateElements: updateEventContentChangeElements,\r\n _destroy: destroyEventContentChange,\r\n _update: updateEventContentChange,\r\n } = createEventContentChange(\r\n target,\r\n _observeContent && _eventContentChange,\r\n new Map(),\r\n debounce(() => {\r\n if (isConnected) {\r\n callback([], false, true);\r\n }\r\n }, 84)\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes); // TODO: observer textarea attrs if textarea\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue = isAttributesType && isString(attributeName) ? attr(mutationTarget as HTMLElement, attributeName!) : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const targetAttrChanged =\r\n attributeChanged &&\r\n targetIsMutationTarget &&\r\n !_observeContent &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null);\r\n const styleChangingAttrChanged = indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n if (targetAttrChanged) {\r\n push(targetChangedAttrs, attributeName!);\r\n }\r\n if (_observeContent) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged && !targetIsMutationTarget;\r\n const isNestedTarget = contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue as string | null)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged = baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n targetStyleChanged = targetStyleChanged || (targetAttrChanged && styleChangingAttrChanged);\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged || contentChanged) {\r\n callback(targetChangedAttrs, targetStyleChanged, contentChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: _observeContent,\r\n childList: _observeContent,\r\n characterData: _observeContent,\r\n });\r\n isConnected = true;\r\n\r\n return {\r\n _disconnect: () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n _updateEventContentChange: (newEventContentChange?: DOMObserverEventContentChange) => {\r\n updateEventContentChange(isConnected && _observeContent && newEventContentChange);\r\n },\r\n _update: () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n };\r\n};\r\n","import { XY, TRBL, CacheValues, PartialOptions, each, push, keys, hasOwnProperty, isNumber, scrollLeft, scrollTop } from 'support';\r\nimport { OSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport { StructureSetup } from 'setups/structureSetup';\r\nimport { createTrinsicLifecycle } from 'lifecycles/trinsicLifecycle';\r\nimport { createPaddingLifecycle } from 'lifecycles/paddingLifecycle';\r\nimport { createOverflowLifecycle } from 'lifecycles/overflowLifecycle';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver } from 'observers/domObserver';\r\nimport { StyleObject } from 'typings';\r\n\r\nexport type LifecycleCheckOption = (path: string) => LifecycleOptionInfo;\r\n\r\nexport interface PaddingInfo {\r\n _absolute: boolean;\r\n _padding: TRBL;\r\n}\r\n\r\nexport interface LifecycleOptionInfo {\r\n readonly _value: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface LifecycleAdaptiveUpdateHints {\r\n _sizeChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n _paddingStyleChanged: boolean;\r\n}\r\n\r\nexport interface LifecycleUpdateHints extends LifecycleAdaptiveUpdateHints {\r\n _directionIsRTL: CacheValues;\r\n _heightIntrinsic: CacheValues;\r\n}\r\n\r\nexport type Lifecycle = (\r\n updateHints: LifecycleUpdateHints,\r\n checkOption: LifecycleCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport interface LifecycleHubInstance {\r\n _update(changedOptions?: PartialOptions | null, force?: boolean): void;\r\n _destroy(): void;\r\n}\r\n\r\nexport interface LifecycleHub {\r\n _options: OSOptions;\r\n _structureSetup: StructureSetup;\r\n // whether the \"viewport arrange\" strategy must be used (true if no native scrollbar hiding and scrollbars are overlaid)\r\n _doViewportArrange: boolean;\r\n _getPaddingInfo(): PaddingInfo;\r\n _setPaddingInfo(newPadding?: PaddingInfo | null): void;\r\n // padding related styles applied to the viewport element\r\n _getViewportPaddingStyle(): StyleObject;\r\n _setViewportPaddingStyle(newPaddingStlye?: StyleObject | null): void;\r\n _getViewportOverflowScroll(): XY;\r\n _setViewportOverflowScroll(newViewportOverflowScroll: XY): void;\r\n}\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj && path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj);\r\n\r\nconst emptyStylePropsToZero = (stlyeObj: StyleObject, baseStyle?: StyleObject) =>\r\n keys(stlyeObj).reduce(\r\n (obj, key) => {\r\n const value = stlyeObj[key];\r\n obj[key] = value === '' ? 0 : value;\r\n return obj;\r\n },\r\n { ...baseStyle }\r\n );\r\n\r\n// TODO: tabindex, open etc.\r\nconst attrs = ['id', 'class', 'style', 'open'];\r\nconst paddingInfoFallback: PaddingInfo = {\r\n _absolute: false,\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n};\r\nconst viewportPaddingStyleFallback: StyleObject = {\r\n marginTop: 0,\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n};\r\nconst viewportOverflowScrollFallback: XY = {\r\n x: false,\r\n y: false,\r\n};\r\nconst directionIsRTLCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\nconst heightIntrinsicCacheValuesFallback: CacheValues = {\r\n _value: false,\r\n _previous: false,\r\n _changed: false,\r\n};\r\n\r\nexport const createLifecycleHub = (options: OSOptions, structureSetup: StructureSetup): LifecycleHubInstance => {\r\n let paddingInfo = paddingInfoFallback;\r\n let viewportPaddingStyle = viewportPaddingStyleFallback;\r\n let viewportOverflowScroll = viewportOverflowScrollFallback;\r\n const { _host, _viewport, _content } = structureSetup._targetObj;\r\n const {\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n _addListener: addEnvironmentListener,\r\n _removeListener: removeEnvironmentListener,\r\n } = getEnvironment();\r\n const doViewportArrange = !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const lifecycles: Lifecycle[] = [];\r\n const instance: LifecycleHub = {\r\n _options: options,\r\n _structureSetup: structureSetup,\r\n _doViewportArrange: doViewportArrange,\r\n _getPaddingInfo: () => paddingInfo,\r\n _setPaddingInfo(newPaddingInfo) {\r\n paddingInfo = newPaddingInfo || paddingInfoFallback;\r\n },\r\n _getViewportPaddingStyle: () => viewportPaddingStyle,\r\n _setViewportPaddingStyle(newPaddingStlye) {\r\n viewportPaddingStyle = newPaddingStlye ? emptyStylePropsToZero(newPaddingStlye, viewportPaddingStyleFallback) : viewportPaddingStyleFallback;\r\n },\r\n _getViewportOverflowScroll: () => viewportOverflowScroll,\r\n _setViewportOverflowScroll(newViewportOverflowScroll) {\r\n viewportOverflowScroll = newViewportOverflowScroll || viewportOverflowScrollFallback;\r\n },\r\n };\r\n\r\n push(lifecycles, createTrinsicLifecycle(instance));\r\n push(lifecycles, createPaddingLifecycle(instance));\r\n push(lifecycles, createOverflowLifecycle(instance));\r\n\r\n const updateLifecycles = (updateHints?: Partial | null, changedOptions?: Partial | null, force?: boolean) => {\r\n let {\r\n _directionIsRTL,\r\n _heightIntrinsic,\r\n _sizeChanged = force || false,\r\n _hostMutation = force || false,\r\n _contentMutation = force || false,\r\n _paddingStyleChanged = force || false,\r\n } = updateHints || {};\r\n const finalDirectionIsRTL =\r\n _directionIsRTL || (sizeObserver ? sizeObserver._getCurrentCacheValues(force)._directionIsRTL : directionIsRTLCacheValuesFallback);\r\n const finalHeightIntrinsic =\r\n _heightIntrinsic || (trinsicObserver ? trinsicObserver._getCurrentCacheValues(force)._heightIntrinsic : heightIntrinsicCacheValuesFallback);\r\n const checkOption: LifecycleCheckOption = (path) => ({\r\n _value: getPropByPath(options, path),\r\n _changed: force || getPropByPath(changedOptions, path) !== undefined,\r\n });\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n each(lifecycles, (lifecycle) => {\r\n const {\r\n _sizeChanged: adaptiveSizeChanged,\r\n _hostMutation: adaptiveHostMutation,\r\n _contentMutation: adaptiveContentMutation,\r\n _paddingStyleChanged: adaptivePaddingStyleChanged,\r\n } =\r\n lifecycle(\r\n {\r\n _directionIsRTL: finalDirectionIsRTL,\r\n _heightIntrinsic: finalHeightIntrinsic,\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n },\r\n checkOption,\r\n !!force\r\n ) || {};\r\n\r\n _sizeChanged = adaptiveSizeChanged || _sizeChanged;\r\n _hostMutation = adaptiveHostMutation || _hostMutation;\r\n _contentMutation = adaptiveContentMutation || _contentMutation;\r\n _paddingStyleChanged = adaptivePaddingStyleChanged || _paddingStyleChanged;\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n };\r\n\r\n const onSizeChanged = (directionIsRTL?: CacheValues) => {\r\n const sizeChanged = !directionIsRTL;\r\n updateLifecycles({\r\n _directionIsRTL: directionIsRTL,\r\n _sizeChanged: sizeChanged,\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsic: CacheValues) => {\r\n updateLifecycles({\r\n _heightIntrinsic: heightIntrinsic,\r\n });\r\n };\r\n const onHostMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _hostMutation: true,\r\n });\r\n });\r\n };\r\n const onContentMutation = () => {\r\n // TODO: rAF only here because IE\r\n requestAnimationFrame(() => {\r\n updateLifecycles({\r\n _contentMutation: true,\r\n });\r\n });\r\n };\r\n\r\n const trinsicObserver = (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const sizeObserver = createSizeObserver(_host, onSizeChanged, { _appear: true, _direction: !_nativeScrollbarStyling });\r\n const hostMutationObserver = createDOMObserver(_host, onHostMutation, {\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n });\r\n const contentMutationObserver = createDOMObserver(_content || _viewport, onContentMutation, {\r\n _observeContent: true,\r\n _styleChangingAttributes: attrs,\r\n _attributes: attrs,\r\n _eventContentChange: options!.updating!.elementEvents as [string, string][],\r\n /*\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n return isNestedTarget ? false : attributeName ? liesBetween(target as Element, hostSelector, '.content') : false;\r\n },\r\n _ignoreTargetAttrChange: (target, attrName, oldValue, newValue) => {\r\n if (attrName === 'class' && oldValue && newValue) {\r\n const diff = diffClass(oldValue, newValue);\r\n const ignore = diff.length === 1 && diff[0].startsWith(ignorePrefix);\r\n return ignore;\r\n }\r\n return false;\r\n },\r\n */\r\n });\r\n\r\n const update = (changedOptions?: Partial | null, force?: boolean) => {\r\n updateLifecycles(null, changedOptions, force);\r\n };\r\n const envUpdateListener = update.bind(null, null, true);\r\n addEnvironmentListener(envUpdateListener);\r\n\r\n return {\r\n _update: update,\r\n _destroy() {\r\n removeEnvironmentListener(envUpdateListener);\r\n },\r\n };\r\n};\r\n","import { OSTarget, OSTargetObject } from 'typings';\r\nimport { PartialOptions, validateOptions, assignDeep, isEmptyObject } from 'support';\r\nimport { createStructureSetup, StructureSetup } from 'setups/structureSetup';\r\nimport { createLifecycleHub } from 'lifecycles/lifecycleHub';\r\nimport { OSOptions, optionsTemplate } from 'options';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (target: OSTarget | OSTargetObject, options?: PartialOptions, extensions?: any): OverlayScrollbars;\r\n}\r\n\r\nexport interface OverlayScrollbars {\r\n options(): OSOptions;\r\n options(newOptions?: PartialOptions): OSOptions;\r\n\r\n update(force?: boolean): void;\r\n}\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: OSTarget | OSTargetObject,\r\n options?: PartialOptions,\r\n extensions?: any\r\n): OverlayScrollbars => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const currentOptions: OSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options || ({} as PartialOptions), optionsTemplate, null, true)._validated\r\n );\r\n const structureSetup: StructureSetup = createStructureSetup(target);\r\n const lifecycleHub = createLifecycleHub(currentOptions, structureSetup);\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const { _validated: _changedOptions } = validateOptions(newOptions, optionsTemplate, currentOptions, true);\r\n\r\n if (!isEmptyObject(_changedOptions)) {\r\n assignDeep(currentOptions, _changedOptions);\r\n lifecycleHub._update(_changedOptions);\r\n }\r\n }\r\n return currentOptions;\r\n },\r\n update(force?: boolean) {\r\n lifecycleHub._update(null, force);\r\n },\r\n };\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n};\r\n"],"names":["createCache","update","options","_equal","_initialValue","_alwaysUpdateValues","_value","_previous","cacheUpdate","force","context","curr","newVal","changed","_changed","_update","_current","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","Object","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","key","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","isElement","Element","each","source","callback","i","keys","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","result","elm","isEmptyArray","runEach","p1","runFn","fn","Set","forEach","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","value","attr","attrName","getAttribute","setAttribute","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","trim","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","prefix","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","addClass","add","removeClass","remove","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","split","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","bind","stopPropagation","preventDefault","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","timeout","maxWait","timeoutId","lastCallTime","hasTimeout","hasMaxWait","cancel","clearTimeout","set","setTimeout","setFn","args","performance","now","boundSetFn","arguments","forceCall","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","setProperty","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","_extends","module","assign","stringify","JSON","templateTypePrefixSuffix","optionsTemplateTypes","validateRecursive","template","optionsDiff","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsDiffValue","optionsValue","templateValue","templateIsComplex","propPrefix","validatedResult","_validated","_foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","string","doStringifyComparison","console","warn","join","validateOptions","transformOptions","optionsWithOptionsTemplate","_template","_options","tmpResult","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","classNameHost","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","numberAllowedValues","oTypes","number","stringArrayNullAllowedValues","null","booleanTrueTemplate","boolean","booleanFalseTemplate","resizeAllowedValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","defaultOptionsWithTemplate","resize","paddingAbsolute","updating","elementEvents","contentMutationDebounce","hostMutationDebounce","resizeDebounce","overflow","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","textarea","dynWidth","dynHeight","inheritedAttrs","nativeScrollbarsOverlaid","show","initialize","optionsTemplate","defaultOptions","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","cSize","oSize","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","getDefaultInitializationStrategy","nativeScrollbarStyling","_padding","_content","createEnvironment","envDOM","envElm","envChildElm","onChangedListener","nativeScrollbarSize","nativeScrollbarIsOverlaid","defaultInitializationStrategy","initializationStrategy","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_removeListener","delete","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","scrollbarSize","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","newScrollbarSize","getEnvironment","unwrap","contentArrangeCounter","createUniqueViewportArrangeElement","evaluateCreationFromStrategy","initializationValue","strategy","isBooleanValue","createStructureSetup","paddingNeeded","contentNeeded","targetIsElm","osTargetObj","_host","host","_target","_viewport","viewport","padding","content","destroyFns","isTextarea","isBody","getTargetContents","contentSlot","isTextareaHostGenerated","contentContainingElm","createPadding","createViewport","createContent","targetContents","ownerDocument","bodyElm","wnd","defaultView","ctx","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","viewportArrangeElm","_viewportArrange","_targetObj","_targetCtx","_destroy","createTrinsicLifecycle","lifecycleHub","_structureSetup","updateHints","_heightIntrinsic","heightIntrinsic","heightIntrinsicChanged","height","createPaddingLifecycle","_setPaddingInfo","_setViewportPaddingStyle","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_sizeChanged","_directionIsRTL","directionIsRTL","directionChanged","paddingAbsoluteChanged","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginTop","marginRight","marginBottom","marginLeft","maxWidth","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalPositionKey","horizontalMarginKey","horizontalPositionValue","_absolute","_paddingStyleChanged","overlaidScrollbarsHideOffset","createOverflowLifecycle","_doViewportArrange","_getViewportPaddingStyle","_getPaddingInfo","_setViewportOverflowScroll","updateContentScrollSizeCache","getCurrentContentScrollSizeCache","fixScrollSizeRounding","_viewportScrollSize","_viewportOffsetSize","_viewportRect","updateOverflowAmountCache","getCurrentOverflowAmountCache","max","_contentScrollSize","_viewportSize","viewportScrollSize","viewportOffsetSize","viewportRect","width","fixFlexboxGlue","viewportOverflowState","_overflowScroll","_scrollbarsHideOffset","hostBCR","hostOffsetSize","hostClientSize","paddingAbsoluteVertical","clientSizeWithoutRounding","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","overlaidX","overlaidY","determineOverflow","arrangeHideOffset","styleObj","scroll","scrollbarsHideOffset","_scrollbarsHideOffsetArrange","setViewportOverflowState","overflowAmount","setPartialStylePerAxis","horizontal","behavior","overflowKey","behaviorIsScroll","behaviorIsVisibleScroll","hideOverflow","applyStyle","_visible","_behavior","xVisible","xVisibleBehavior","yVisible","yVisibleBehavior","arrangeViewport","contentScrollSize","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportPaddingStyle","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","scrollX","scrollY","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","_redoViewportArrange","_viewportOverflowState","_hostMutation","_contentMutation","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","adjustFlexboxGlue","overflowAmuntCache","contentScrollSizeCache","preMeasureViewportOverflowState","undoViewportArrangeOverflowState","contentSize","viewportClientSize","contentScrollSizeChanged","overflowChanged","overflowAmountChanged","viewportArranged","animationStartEventName","scrollEventName","scrollAmount","directionIsRTLMap","isRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","hasDirectionCache","skip","pop","contentRect","doDirectionScroll","rtl","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","event","directionIsRTLCacheValues","_getCurrentCacheValues","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","getCurrentHeightIntrinsicCache","ioEntryOrSize","isIntersecting","intersectionRatio","intersectionObserverInstance","entries","last","root","onSizeChanged","newSize","heightIntrinsicCache","createEventContentChange","eventContentChange","map","eventContentChangeRef","addEvent","entry","newEntry","registerEvent","clear","_updateElements","getElements","eventElmList","elements","newEventContentChange","createDOMObserver","isConnected","_observeContent","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetAttrChange","_ignoreTargetChange","_ignoreContentChange","updateEventContentChangeElements","destroyEventContentChange","updateEventContentChange","Map","finalAttributes","finalStyleChangingAttributes","observedAttributes","concat","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","targetAttrChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","_disconnect","_updateEventContentChange","takeRecords","getPropByPath","path","o","emptyStylePropsToZero","stlyeObj","baseStyle","attrs","paddingInfoFallback","viewportPaddingStyleFallback","viewportOverflowScrollFallback","directionIsRTLCacheValuesFallback","heightIntrinsicCacheValuesFallback","createLifecycleHub","structureSetup","paddingInfo","viewportOverflowScroll","addEnvironmentListener","removeEnvironmentListener","doViewportArrange","lifecycles","instance","newPaddingInfo","newPaddingStlye","_getViewportOverflowScroll","newViewportOverflowScroll","updateLifecycles","changedOptions","finalDirectionIsRTL","finalHeightIntrinsic","adjustScrollOffset","scrollOffsetX","scrollOffsetY","lifecycle","adaptiveSizeChanged","adaptiveHostMutation","adaptiveContentMutation","adaptivePaddingStyleChanged","sizeChanged","onTrinsicChanged","onHostMutation","requestAnimationFrame","onContentMutation","hostMutationObserver","contentMutationObserver","envUpdateListener","OverlayScrollbars","extensions","currentOptions","newOptions","_changedOptions"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/cache/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/support/options/transformation.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/setups/structureSetup.ts","../src/lifecycles/trinsicLifecycle.ts","../src/lifecycles/paddingLifecycle.ts","../src/lifecycles/overflowLifecycle.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/lifecycles/lifecycleHub.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheValues {\r\n readonly _value?: T;\r\n readonly _previous?: T;\r\n _changed: boolean;\r\n}\r\n\r\nexport interface CacheOptions {\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // Initial value for _value\r\n _initialValue?: T;\r\n // If true updates always _value and _previous, otherwise they update only when changed\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport interface Cache {\r\n _current: (force?: boolean) => CacheValues;\r\n _update: CacheUpdate;\r\n}\r\n\r\nexport type CacheUpdate = undefined extends C\r\n ? (force?: boolean | 0, context?: C) => CacheValues\r\n : (force: boolean | 0, context: C) => CacheValues;\r\n\r\nexport type UpdateCachePropFunction = undefined extends C\r\n ? (context?: C, current?: T, previous?: T) => T\r\n : C extends T\r\n ? ((context: C, current?: T, previous?: T) => T) | 0\r\n : (context: C, current?: T, previous?: T) => T;\r\n\r\nexport type EqualCachePropFunction = (currentVal?: T, newVal?: T) => boolean;\r\n\r\nexport const createCache = (update: UpdateCachePropFunction, options?: CacheOptions