From a4482f96d65f234cf52f83fb109dfdc9237b3b46 Mon Sep 17 00:00:00 2001 From: Rene Date: Tue, 12 Jul 2022 12:56:27 +0200 Subject: [PATCH] improve event flow --- .../dist/overlayscrollbars.esm.js | 308 +++++---- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 641 +++++++++--------- .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- .../src/overlayscrollbars.ts | 142 ++-- packages/overlayscrollbars/src/plugins/api.ts | 1 - .../scrollbarsSetup.elements.ts | 13 +- .../setups/scrollbarsSetup/scrollbarsSetup.ts | 7 +- .../structureSetup/structureSetup.elements.ts | 88 +-- .../setups/structureSetup/structureSetup.ts | 40 +- .../structureSetup.elements.test.ts | 3 +- .../structureSetup/nesting/index.browser.ts | 6 +- .../structureSetup/update/index.browser.ts | 9 +- .../types/overlayscrollbars.d.ts | 52 +- 16 files changed, 685 insertions(+), 633 deletions(-) delete mode 100644 packages/overlayscrollbars/src/plugins/api.ts diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index d74a122..ba591eb 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -670,11 +670,11 @@ const createEventListenerHub = t => { }), e); return removeEvent.bind(0, t, e); } - function triggerEvent(t, ...e) { + function triggerEvent(t, e) { const o = n.get(t); each(from(o), (t => { - if (e) { - t(e); + if (e && !isEmptyArray(e)) { + t.apply(0, e); } else { t(); } @@ -1048,46 +1048,48 @@ const createStructureSetupElements = t => { const N = f && elementIsGenerated(z); const R = f ? L : contents([ P, E, D, z, L ].find((t => false === elementIsGenerated(t)))); const H = P || E; - const F = addDataAttrHost(z, y ? "viewport" : "host"); - const k = addClass(D, A); - const V = addClass(E, !y && $); - const B = addClass(P, I); - if (N) { - insertAfter(L, z); + const appendElements = () => { + const t = addDataAttrHost(z, y ? "viewport" : "host"); + const n = addClass(D, A); + const o = addClass(E, !y && $); + const s = addClass(P, I); + if (N) { + insertAfter(L, z); + push(j, (() => { + insertAfter(z, L); + removeElements(z); + })); + } + appendChildren(H, R); + appendChildren(z, D); + appendChildren(D || z, !y && E); + appendChildren(E, P); push(j, (() => { - insertAfter(z, L); - removeElements(z); + t(); + removeAttr(E, S); + removeAttr(E, C); + if (elementIsGenerated(P)) { + unwrap(P); + } + if (elementIsGenerated(E)) { + unwrap(E); + } + if (elementIsGenerated(D)) { + unwrap(D); + } + n(); + o(); + s(); })); - } - appendChildren(H, R); - appendChildren(z, D); - appendChildren(D || z, !y && E); - appendChildren(E, P); - push(j, (() => { - F(); - removeAttr(E, S); - removeAttr(E, C); - if (elementIsGenerated(P)) { - unwrap(P); + if (e && !y) { + push(j, removeClass.bind(0, E, T)); } - if (elementIsGenerated(E)) { - unwrap(E); + if (M) { + insertBefore(E, M); + push(j, removeElements.bind(0, M)); } - if (elementIsGenerated(D)) { - unwrap(D); - } - k(); - V(); - B(); - })); - if (e && !y) { - push(j, removeClass.bind(0, E, T)); - } - if (M) { - insertBefore(E, M); - push(j, removeElements.bind(0, M)); - } - return [ x, runEach.bind(0, j) ]; + }; + return [ x, appendElements, runEach.bind(0, j) ]; }; const createTrinsicUpdate = (t, n) => { @@ -2011,29 +2013,27 @@ const ut = { const createStructureSetup = (t, n) => { const e = createOptionCheck(n, {}); const o = createState(ut); - const s = new Set; - const [c] = o; - const runOnUpdatedListeners = (t, n, e) => { - runEach(s, [ t, n || {}, !!e ]); - }; - const [i, r] = createStructureSetupElements(t); - const a = createStructureSetupUpdate(i, o); - const [l, u] = createStructureSetupObservers(i, o, (t => { - runOnUpdatedListeners(a(e, t)); + const [s, c, i] = createEventListenerHub(); + const [r] = o; + const [a, l, u] = createStructureSetupElements(t); + const f = createStructureSetupUpdate(a, o); + const [d, _] = createStructureSetupObservers(a, o, (t => { + i("u", [ f(e, t), {}, false ]); })); - const f = c.bind(0); - f.Pt = t => { - s.add(t); + const g = r.bind(0); + g.Pt = t => { + s("u", t); }; - f.Mt = i; + g.Mt = l; + g.jt = a; return [ (t, e) => { const o = createOptionCheck(n, t, e); - l(o); - runOnUpdatedListeners(a(o, {}, e)); - }, f, () => { - s.clear(); + d(o); + i("u", [ f(o, {}, e), t, !!e ]); + }, g, () => { + c(); + _(); u(); - r(); } ]; }; @@ -2044,41 +2044,44 @@ const generateScrollbarDOM = t => { appendChildren(n, e); appendChildren(e, o); return { - jt: n, - Nt: e, - Rt: o + Nt: n, + Rt: e, + Ht: o }; }; const createScrollbarsSetupElements = (t, n) => { const {N: e} = getEnvironment(); - const {Ht: o} = e(); + const {Ft: o} = e(); const {Y: s, B: c, U: i, tt: r} = n; const a = !r && t.scrollbarsSlot; const l = dynamicInitializationElement([ s, c, i ], (() => c), o, a); const u = generateScrollbarDOM(F); const f = generateScrollbarDOM(k); - const {jt: d} = u; - const {jt: _} = f; - appendChildren(l, d); - appendChildren(l, _); + const {Nt: d} = u; + const {Nt: _} = f; + const appendElements = () => { + appendChildren(l, d); + appendChildren(l, _); + }; return [ { - Ft: u, - kt: f - }, removeElements.bind(0, [ d, _ ]) ]; + kt: u, + Vt: f + }, appendElements, removeElements.bind(0, [ d, _ ]) ]; }; const createScrollbarsSetup = (t, n, e) => { const o = createState({}); const [s] = o; - const [c, i] = createScrollbarsSetupElements(t, e); - const r = s.bind(0); - r.Mt = c; + const [c, i, r] = createScrollbarsSetupElements(t, e); + const a = s.bind(0); + a.jt = c; + a.Mt = i; return [ (t, e) => { const o = createOptionCheck(n, t, e); console.log(o); - }, r, () => { - i(); + }, a, () => { + r(); } ]; }; @@ -2157,34 +2160,95 @@ const removeInstance = t => { const getInstance = t => mt.get(t); const OverlayScrollbars = (t, n, e) => { - const {H: o, I: s, j: c} = getEnvironment(); - const i = getPlugins(); - const r = isHTMLElement(t) ? t : t.target; - const a = getInstance(r); - if (a) { - return a; + let o = false; + const {H: s, I: c, j: i} = getEnvironment(); + const r = getPlugins(); + const a = isHTMLElement(t) ? t : t.target; + const l = getInstance(a); + if (l) { + return l; } - const l = i[bt]; + const u = r[bt]; const validateOptions = t => { const n = t || {}; - const e = l && l.Vt; + const e = u && u.Bt; return e ? e(n, true) : n; }; - const u = assignDeep({}, o(), validateOptions(n)); - const [f, d, _] = createEventListenerHub(e); - if (s.x && s.y && !u.nativeScrollbarsOverlaid.initialize) { - _("initializationWithdrawn"); - } - const [g, h, p] = createStructureSetup(t, u); - const [v, , w] = createScrollbarsSetup(t, u, h.Mt); + const f = assignDeep({}, s(), validateOptions(n)); + const [d, _, g] = createEventListenerHub(e); + const [h, p, v] = createStructureSetup(t, f); + const [w, b, y] = createScrollbarsSetup(t, f, p.jt); const update = (t, n) => { - g(t, n); - v(t, n); + h(t, n); + w(t, n); }; - const b = c(update.bind(0, {}, true)); - h.Pt(((t, n, e) => { + const m = i(update.bind(0, {}, true)); + const destroy = t => { + removeInstance(a); + m(); + y(); + v(); + o = true; + g("destroyed", [ S, !!t ]); + _(); + }; + const S = { + options(t) { + if (t) { + const n = getOptionsDiff(f, validateOptions(t)); + if (!isEmptyObject(n)) { + assignDeep(f, n); + update(n); + } + } + return assignDeep({}, f); + }, + on: d, + off: _, + state() { + const {yt: t, vt: n, St: e, A: s, ft: c} = p(); + return assignDeep({}, { + overflowAmount: t, + overflowStyle: n, + hasOverflow: e, + padding: s, + paddingAbsolute: c, + destroyed: o + }); + }, + elements() { + const {Y: t, B: n, A: e, U: o, $: s} = p.jt; + return assignDeep({}, { + target: t, + host: n, + padding: e || o, + viewport: o, + content: s || o + }); + }, + update(t) { + update({}, t); + return S; + }, + destroy: destroy.bind(0) + }; + if (c.x && c.y && !f.nativeScrollbarsOverlaid.initialize) { + destroy(true); + return S; + } + each(keys(r), (t => { + const n = r[t]; + if (isFunction(n)) { + n(OverlayScrollbars, S); + } + })); + p.Mt(); + b.Mt(); + addInstance(a, S); + g("initialized", [ S ]); + p.Pt(((t, n, e) => { const {it: o, ut: s, ct: c, xt: i, Ct: r, rt: a, bt: l} = t; - _("updated", { + g("updated", [ S, { updateHints: { sizeChanged: o, directionChanged: s, @@ -2196,63 +2260,9 @@ const OverlayScrollbars = (t, n, e) => { }, changedOptions: n, force: e - }); + } ]); })); - const y = { - options(t) { - if (t) { - const n = getOptionsDiff(u, validateOptions(t)); - if (!isEmptyObject(n)) { - assignDeep(u, n); - update(n); - } - } - return assignDeep({}, u); - }, - on: f, - off: d, - state() { - const {yt: t, vt: n, St: e, A: o, ft: s} = h(); - return assignDeep({}, { - overflowAmount: t, - overflowStyle: n, - hasOverflow: e, - padding: o, - paddingAbsolute: s - }); - }, - elements() { - const {Y: t, B: n, A: e, U: o, $: s} = h.Mt; - return assignDeep({}, { - target: t, - host: n, - padding: e || o, - viewport: o, - content: s || o - }); - }, - update(t) { - update({}, t); - }, - destroy: () => { - removeInstance(r); - b(); - d(); - w(); - p(); - _("destroyed"); - } - }; - each(keys(i), (t => { - const n = i[t]; - if (isFunction(n)) { - n(OverlayScrollbars, y); - } - })); - y.update(true); - addInstance(r, y); - _("initialized"); - return y; + return S.update(true); }; OverlayScrollbars.plugin = addPlugin; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index df2bfb6..da3f97e 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.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/style.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidation/validation.ts","../src/plugins/optionsValidation/optionsValidation.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport 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 isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport 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: any[]) => any {\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)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport 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\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\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: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, args?: any[]): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\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 =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\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(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\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): T & U & V & W & X;\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): 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 { from } from 'support/utils/array';\r\nimport { 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 | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): 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 | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): 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 | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !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\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, 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 = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (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): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]\r\n ) => void;\r\n\r\n const events = new Map>();\r\n\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener[]\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n }\r\n\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener[]\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n }\r\n\r\n function triggerEvent(\r\n name: Name,\r\n ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]\r\n ): void {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args) {\r\n (event as (args: EventMap[keyof EventMap]) => void)(args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n }\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [\r\n typeof addEvent,\r\n typeof removeEvent,\r\n typeof triggerEvent\r\n ];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\nexport interface EnvironmentListenersNameArgsMap {\r\n _: undefined;\r\n}\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarSize: XY;\r\n readonly _nativeScrollbarIsOverlaid: XY;\r\n readonly _nativeScrollbarStyling: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\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) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isFunction, isBoolean, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [targetObj: StructureSetupElementsObj, destroy: () => void];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } =\r\n getEnvironment();\r\n /* istanbul ignore next */\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarStyling;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n hostInitializationStrategy,\r\n targetStructureInitialization.host\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarStyling && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return [evaluatedTargetObj, runEach.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n noop,\r\n each,\r\n equalXY,\r\n attrClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportArrange,\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\ntype UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarSize,\r\n _flexboxGlue,\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * 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 { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(_viewport, classNameViewportArrange);\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n 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 type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { runEach } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _addOnUpdatedListener: (listener: OnUpdatedListener) => void;\r\n}\r\n\r\nexport type OnUpdatedListener = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n) => void;\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const onUpdatedListeners = new Set();\r\n const [getState] = state;\r\n const runOnUpdatedListeners = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions?: PartialOptions,\r\n force?: boolean\r\n ) => {\r\n runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]);\r\n };\r\n\r\n const [elements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints));\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n onUpdatedListeners.add(listener);\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n runOnUpdatedListeners(updateStructure(checkOption, {}, force));\r\n },\r\n structureSetupState,\r\n () => {\r\n onUpdatedListeners.clear();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [elements: ScrollbarsSetupElementsObj, destroy: () => void];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements);\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { assignDeep, each, isArray } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type OSPluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type OSPlugin = [string, T];\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: OSPlugin | OSPlugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as OSPlugin[], (plugin) => {\r\n pluginRegistry[plugin[0]] = plugin[1];\r\n });\r\n","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, PartialOptions } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n PartialOptions, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { OSPlugin } from 'plugins';\r\nimport { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidation/validation';\r\nimport { PartialOptions } from 'typings';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: OSPlugin = [\r\n optionsValidationPluginName,\r\n {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n];\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n OSPlugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\n/*\r\nonScrollStart : null,\r\nonScroll : null,\r\nonScrollStop : null,\r\nonOverflowChanged : null,\r\nonOverflowAmountChanged : null, // fusion with onOverflowChanged\r\nonDirectionChanged : null, // gone\r\nonContentSizeChanged : null, // gone\r\nonHostSizeChanged : null, // gone\r\n*/\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: OSPlugin | OSPlugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarSize: XY;\r\n scrollbarIsOverlaid: XY;\r\n scrollbarStyling: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport interface EventListenerMap {\r\n initialized: undefined;\r\n initializationWithdrawn: undefined;\r\n updated: OnUpdatedEventListenerArgs;\r\n destroyed: undefined;\r\n}\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): void;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener?: EventListener): void;\r\n off(name: Name, listener?: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n triggerEvent('initializationWithdrawn');\r\n }\r\n\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, , destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n });\r\n });\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: removeEvent,\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n },\r\n destroy: () => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n removeEvent();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n triggerEvent('destroyed');\r\n },\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n instance.update(true);\r\n\r\n addInstance(instanceTarget, instance);\r\n\r\n triggerEvent('initialized');\r\n\r\n return instance;\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarSize: _nativeScrollbarSize,\r\n scrollbarIsOverlaid: _nativeScrollbarIsOverlaid,\r\n scrollbarStyling: _nativeScrollbarStyling,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","o","_initialValue","u","_equal","_","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isUndefined","obj","undefined","isNull","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","type","key","cstr","ctor","ctorProto","prototype","hasOwnConstructor","hasOwnProperty","call","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","ElementNodeType","isElement","Element","each","source","callback","i","Object","keys","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","scrollLeft","scrollTop","style","styles","getSingleStyle","getStyles","getStylesResult","computedStyle","getComputedStyle","getCSSVal","reduce","result","setCSSVal","Node","ELEMENT_NODE","toString","replace","toLowerCase","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","Set","forEach","isEmptyArray","runEach","args","runFn","fn","prop","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","g","_timeout","p","_maxDelay","v","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","removeEvent","eventSet","events","currListener","clear","addEvent","set","triggerEvent","event","Map","initialListenerKeys","getPropByPath","path","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarStyling","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","envDOM","envElm","envChildElm","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","getEnvironment","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","contentArrangeCounter","createNewDiv","unwrap","createUniqueViewportArrangeElement","T","I","D","create","addDataAttrHost","createStructureSetupElements","N","_host","hostInitializationStrategy","_viewport","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","viewport","filter","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","Y","B","A","U","$","q","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","getState","updateHints","M","st","_heightIntrinsic","ct","_heightIntrinsicChanged","heightIntrinsicChanged","height","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","lt","_directionIsRTL","it","rt","ut","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_viewportPaddingStyle","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportScrollSize","viewportClientSize","sizeFraction","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","nt","ot","L","doViewportArrange","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowStyleCache","fixFlexboxGlue","viewportOverflowState","heightIntrinsic","ft","gt","_overflowScroll","ht","_scrollbarsHideOffset","hostClientSize","isContentBox","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","_scrollbarsHideOffsetArrange","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","visibleBehaviorX","visibleBehaviorY","arrangeViewport","directionIsRTL","dt","wt","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","bt","_hostMutation","_t","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Lt","_attributes","It","_styleChangingAttributes","Tt","_eventContentChange","zt","_nestedTargetSelector","Dt","_ignoreTargetChange","Et","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","K","et","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","onUpdatedListeners","runOnUpdatedListeners","destroyElements","updateStructure","updateObservers","destroyObservers","structureSetupState","_addOnUpdatedListener","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","_scrollbarsSlot","environmentScrollbarSlot","tt","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","scrollbarsSetupState","console","log","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","optionsTemplateTypes","boolean","number","string","object","function","null","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsValidationPluginName","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","H","addEnvListener","plugins","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","destroyScrollbars","removeEnvListener","xt","Ct","sizeChanged","hostMutation","instance","yt","vt","St","pluginName","pluginInstance","P","k","V","R","F","scrollbarIsOverlaid","scrollbarStyling","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/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/style.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidation/validation.ts","../src/plugins/optionsValidation/optionsValidation.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport 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 isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport 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: any[]) => any {\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)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport 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\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\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: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, args?: any[]): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\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 =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\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(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\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): T & U & V & W & X;\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): 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 { from } from 'support/utils/array';\r\nimport { 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 | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): 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 | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): 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 | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !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\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, 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 = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (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): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from, isEmptyArray } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name]\r\n ) => void;\r\n\r\n const events = new Map>();\r\n\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener[]\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n }\r\n\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener[]\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n }\r\n\r\n function triggerEvent(name: Name, args?: EventMap[Name]): void {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n }\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [\r\n typeof addEvent,\r\n typeof removeEvent,\r\n typeof triggerEvent\r\n ];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarSize: XY;\r\n readonly _nativeScrollbarIsOverlaid: XY;\r\n readonly _nativeScrollbarStyling: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\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) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } =\r\n getEnvironment();\r\n /* istanbul ignore next */\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarStyling;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n hostInitializationStrategy,\r\n targetStructureInitialization.host\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarStyling && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEach.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n noop,\r\n each,\r\n equalXY,\r\n attrClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportArrange,\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\ntype UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarSize,\r\n _flexboxGlue,\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * 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 { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(_viewport, classNameViewportArrange);\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n 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 type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [updateStructure(checkOptionsFallback, updateHints), {}, false]);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\r\n );\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { assignDeep, each, isArray } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type OSPluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type OSPlugin = [string, T];\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: OSPlugin | OSPlugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as OSPlugin[], (plugin) => {\r\n pluginRegistry[plugin[0]] = plugin[1];\r\n });\r\n","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, PartialOptions } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n PartialOptions, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { OSPlugin } from 'plugins';\r\nimport { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidation/validation';\r\nimport { PartialOptions } from 'typings';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: OSPlugin = [\r\n optionsValidationPluginName,\r\n {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n];\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n OSPlugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: OSPlugin | OSPlugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarSize: XY;\r\n scrollbarIsOverlaid: XY;\r\n scrollbarStyling: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, withdrawn: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: removeEvent,\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarSize: _nativeScrollbarSize,\r\n scrollbarIsOverlaid: _nativeScrollbarIsOverlaid,\r\n scrollbarStyling: _nativeScrollbarStyling,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","o","_initialValue","u","_equal","_","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isUndefined","obj","undefined","isNull","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","type","key","cstr","ctor","ctorProto","prototype","hasOwnConstructor","hasOwnProperty","call","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","ElementNodeType","isElement","Element","each","source","callback","i","Object","keys","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","scrollLeft","scrollTop","style","styles","getSingleStyle","getStyles","getStylesResult","computedStyle","getComputedStyle","getCSSVal","reduce","result","setCSSVal","Node","ELEMENT_NODE","toString","replace","toLowerCase","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","Set","forEach","isEmptyArray","runEach","args","runFn","fn","prop","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","g","_timeout","p","_maxDelay","v","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","removeEvent","eventSet","events","currListener","clear","addEvent","set","triggerEvent","event","Map","initialListenerKeys","getPropByPath","path","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarStyling","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","envDOM","envElm","envChildElm","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","getEnvironment","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","contentArrangeCounter","createNewDiv","unwrap","createUniqueViewportArrangeElement","T","I","D","create","addDataAttrHost","createStructureSetupElements","N","_host","hostInitializationStrategy","_viewport","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","viewport","filter","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","Y","B","A","U","$","q","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","getState","updateHints","M","st","_heightIntrinsic","ct","_heightIntrinsicChanged","heightIntrinsicChanged","height","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","lt","_directionIsRTL","it","rt","ut","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_viewportPaddingStyle","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportScrollSize","viewportClientSize","sizeFraction","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","nt","ot","L","doViewportArrange","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowStyleCache","fixFlexboxGlue","viewportOverflowState","heightIntrinsic","ft","gt","_overflowScroll","ht","_scrollbarsHideOffset","hostClientSize","isContentBox","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","_scrollbarsHideOffsetArrange","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","visibleBehaviorX","visibleBehaviorY","arrangeViewport","directionIsRTL","dt","wt","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","finalPaddingStyle","assignProps","prevStyle","bt","_hostMutation","_t","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_direction","observeDirectionChange","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Lt","_attributes","It","_styleChangingAttributes","Tt","_eventContentChange","zt","_nestedTargetSelector","Dt","_ignoreTargetChange","Et","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","K","et","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","updateObservers","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","_scrollbarsSlot","environmentScrollbarSlot","tt","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","scrollbarsSetupState","console","log","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","optionsTemplateTypes","boolean","number","string","object","function","null","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsValidationPluginName","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","H","addEnvListener","plugins","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","yt","vt","St","pluginName","pluginInstance","xt","Ct","sizeChanged","hostMutation","P","k","V","R","F","scrollbarIsOverlaid","scrollbarStyling","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js index d2bc6e9..6c885c5 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -function t(t,e){const{o:n,u:o,_:r}=t;let i,s=n;const c=(t,e)=>{const n=s,c=t,l=e||(o?!o(n,c):n!==c);return(l||r)&&(s=c,i=n),[s,l,i]};return[e?t=>c(e(s,i),t):c,t=>[s,!!t,i]]}function e(t){return void 0===t}function n(t){return null===t}function o(t){return"number"==typeof t}function r(t){return"string"==typeof t}function i(t){return"function"==typeof t}function s(t){return Array.isArray(t)}function c(t){return"object"==typeof t&&!s(t)&&!n(t)}function l(t){const e=!!t&&t.length,n=o(e)&&e>-1&&e%1==0;return!(!(s(t)||!i(t)&&n)||e>0&&c(t)&&!(e-1 in t))}function a(t){if(!t||!c(t)||"object"!==$(t))return!1;let n;const o="constructor",r=t[o],i=r&&r.prototype,s=x.call(t,o),l=i&&x.call(i,"isPrototypeOf");if(r&&!s&&!l)return!1;for(n in t);return e(n)||x.call(t,n)}function d(t){const e=window.HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===v)}function u(t){const e=window.Element;return!!t&&(e?t instanceof e:t.nodeType===v)}function f(t,e){if(l(t))for(let n=0;ne(t[n],n,t)));return t}function h(t,e,o,r,c,l,d){const u=[e,o,r,c,l,d];return"object"==typeof t&&!n(t)||i(t)||(t={}),f(u,(e=>{f(E(e),(n=>{const o=e[n];if(t===o)return!0;const r=s(o);if(o&&(a(o)||r)){const e=t[n];let i=e;r&&!s(e)?i=[]:r||a(e)||(i={}),t[n]=h(i,o)}else t[n]=o}))})),t}function w(t,n,o,r){if(e(r))return o?o[t]:n;o&&(o[t]=r)}function p(t,n,o){if(e(o))return t?t.getAttribute(n):null;t&&t.setAttribute(n,o)}function g(t,e){return w("scrollLeft",0,t,e)}function b(t,e){return w("scrollTop",0,t,e)}function y(t,e){const n=r(e);if(s(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?bt(t,r,e):e.reduce(((e,n)=>(e[n]=bt(t,r,n),e)),o)}return o}f(E(e),(n=>yt(t,n,e[n])))}const v=Node.ELEMENT_NODE,{toString:m,hasOwnProperty:x}=Object.prototype,$=t=>e(t)||n(t)?`${t}`:m.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),S=(t,e,n)=>t.indexOf(e,n),O=(t,e,n)=>(n||r(e)||!l(e)?t.push(e):Array.prototype.push.apply(t,e),t),A=t=>{if(Array.from&&t)return Array.from(t);const e=[];return t instanceof Set?t.forEach((t=>{O(e,t)})):f(t,(t=>{O(e,t)})),e},L=t=>!!t&&0===t.length,M=(t,e)=>{const n=t=>t&&t.apply(void 0,e||[]);t instanceof Set?t.forEach(n):f(t,n)},C=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),E=t=>t?Object.keys(t):[],B=(t,e,n,o)=>{const r=p(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),p(t,e,A(i).join(" ").trim())},R=(t,e)=>{t&&t.removeAttribute(e)},T=Element.prototype,z=(t,e)=>{const n=[],o=e?u(e)?e:null:document;return o?O(n,o.querySelectorAll(t)):n},I=(t,e)=>!!u(t)&&(T.matches||T.msMatchesSelector).call(t,e),P=t=>t?A(t.childNodes):[],N=t=>t?t.parentElement:null,j=(t,e)=>{if(u(t)){const n=T.closest;if(n)return n.call(t,e);do{if(I(t,e))return t;t=N(t)}while(t)}return null},D=(t,e,n)=>{if(n){let o,r=e;t&&(l(n)?(o=document.createDocumentFragment(),f(n,(t=>{t===r&&(r=t.previousSibling),o.appendChild(t)}))):o=n,e&&(r?r!==e&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r||null))}},k=(t,e)=>{D(t,null,e)},H=(t,e)=>{D(t,t&&t.firstChild,e)},F=(t,e)=>{D(N(t),t&&t.nextSibling,e)},U=t=>{if(l(t))f(A(t),(t=>U(t)));else if(t){const e=N(t);e&&e.removeChild(t)}},V=t=>{const e=document.createElement("div");return t&&p(e,"class",t),e},Y=t=>{const e=V();return e.innerHTML=t.trim(),f(P(e),(t=>U(t)))},_=t=>t.charAt(0).toUpperCase()+t.slice(1),W=["-webkit-","-moz-","-o-","-ms-"],X=["WebKit","Moz","O","MS","webkit","moz","o","ms"],q={},K={},G=t=>{let e=K[t];if(C(K,t))return e;const n=_(t),o=V().style;return f(W,(r=>{const i=r.replace(/-/g,""),s=[t,r+t,i+n,_(i)+n];return!(e=s.find((t=>void 0!==o[t])))})),K[t]=e||""},J=t=>{let e=q[t]||window[t];return C(q,t)||(f(X,(n=>(e=e||window[n+_(t)],!e))),q[t]=e),e},Z=J("MutationObserver"),Q=J("IntersectionObserver"),tt=J("ResizeObserver"),et=J("cancelAnimationFrame"),nt=J("requestAnimationFrame"),ot=/[^\x20\t\r\n\f]+/g,rt=(t,e,n)=>{let o,i=0,s=!1;if(t&&e&&r(e)){const r=e.match(ot)||[];for(s=r.length>0;o=r[i++];)s=!!n(t.classList,o)&&s}return s},it=(t,e)=>{rt(t,e,((t,e)=>t.remove(e)))},st=(t,e)=>(rt(t,e,((t,e)=>t.add(e))),it.bind(0,t,e)),ct=(t,e,n,o)=>{if(t&&e){let r=!0;return f(n,(n=>{(o?o(t[n]):t[n])!==(o?o(e[n]):e[n])&&(r=!1)})),r}return!1},lt=(t,e)=>ct(t,e,["w","h"]),at=(t,e)=>ct(t,e,["x","y"]),dt=(t,e)=>ct(t,e,["t","r","b","l"]),ut=(t,e,n)=>ct(t,e,["width","height"],n&&(t=>Math.round(t))),ft=t=>{t&&window.clearTimeout(t),t&&et(t)},ht=()=>{},wt=(t,e)=>{let n,r,s,c;const{g:l,p:a,v:d}=e||{},u=window.setTimeout,f=function(e){ft(n),ft(r),r=n=s=void 0,t.apply(this,e)},h=t=>d&&s?d(s,t):t,w=()=>{n&&f(h(c)||c)},p=function(){const t=A(arguments),e=i(l)?l():l,d=o(e)&&e>=0;if(d){const l=i(a)?a():a,d=o(l)&&l>=0,p=e>0?u:nt,g=h(t)||t,b=f.bind(0,g);ft(n),n=p(b,e),d&&!r&&(r=u(w,l)),s=c=g}else f(t)};return p.m=w,p},pt={opacity:1,zindex:1},gt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},bt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],yt=(t,n,r)=>{try{if(t){const{style:i}=t;e(i[n])?i.setProperty(n,r):i[n]=((t,e)=>!pt[t.toLowerCase()]&&o(e)?`${e}px`:e)(n,r)}}catch(T){}},vt=(t,e,n)=>{const o=e?`${e}-`:"",r=n?`-${n}`:"",i=`${o}top${r}`,s=`${o}right${r}`,c=`${o}bottom${r}`,l=`${o}left${r}`,a=y(t,[i,s,c,l]);return{t:gt(a[i]),r:gt(a[s]),b:gt(a[c]),l:gt(a[l])}},mt={w:0,h:0},xt=()=>({w:window.innerWidth,h:window.innerHeight}),$t=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:mt,St=t=>t?{w:t.clientWidth,h:t.clientHeight}:mt,Ot=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:mt,At=t=>{const e=parseFloat(y(t,"height"))||0,n=parseFloat(y(t,"height"))||0;return{w:n-Math.round(n),h:e-Math.round(e)}},Lt=t=>t.getBoundingClientRect();let Mt;const Ct=t=>t.split(" "),Et=(t,e,n,o)=>{f(Ct(e),(e=>{t.removeEventListener(e,n,o)}))},Bt=(t,n,o,r)=>{const i=(()=>{if(e(Mt)){Mt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){Mt=!0}}))}catch(t){}}return Mt})(),s=i&&r&&r.S||!1,c=r&&r.C||!1,l=r&&r.O||!1,a=[],d=i?{passive:s,capture:c}:c;return f(Ct(n),(e=>{const n=l?r=>{t.removeEventListener(e,n,c),o&&o(r)}:o;O(a,Et.bind(null,t,e,n,c)),t.addEventListener(e,n,d)})),M.bind(0,a)},Rt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),Tt={x:0,y:0},zt=t=>{const e=t?Lt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Tt},It=(t,e)=>{f(s(e)?e:[e],t)},Pt=t=>{function e(t,e){if(t){const n=o.get(t);It((t=>{n&&n[t?"delete":"clear"](t)}),e)}else o.forEach((t=>{t.clear()})),o.clear()}function n(t,n){const r=o.get(t)||new Set;return o.set(t,r),It((t=>{t&&r.add(t)}),n),e.bind(0,t,n)}const o=new Map;return f(E(t),(e=>{n(e,t[e])})),[n,e,function(t,...e){const n=o.get(t);f(A(n),(t=>{e?t(e):t()}))}]},Nt=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&C(t,e)?t[e]:void 0),t):void 0,jt=(t,e,n)=>o=>[Nt(t,o),n||void 0!==Nt(e,o)],Dt=t=>{let e=t;return[()=>e,t=>{e=h({},e,t)}]},kt="os-environment",Ht=`${kt}-flexbox-glue`,Ft=`${Ht}-max`,Ut="data-overlayscrollbars",Vt=`${Ut}-overflow-x`,Yt=`${Ut}-overflow-y`,_t="overflowVisible",Wt="viewportStyled",Xt="os-padding",qt="os-viewport",Kt=`${qt}-arrange`,Gt="os-content",Jt=`${qt}-scrollbar-styled`,Zt=`os-overflow-visible`,Qt="os-size-observer",te=`${Qt}-appear`,ee=`${Qt}-listener`,ne=`${ee}-scroll`,oe=`${ee}-item`,re=`${oe}-final`,ie="os-trinsic-observer",se="os-scrollbar",ce=`${se}-horizontal`,le=`${se}-vertical`,ae="os-scrollbar-track",de="os-scrollbar-handle",ue=t=>JSON.stringify(t,((t,e)=>{if(i(e))throw new Error;return e})),fe={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},he=(t,e)=>{const n={};return f(E(e).concat(E(t)),(o=>{const r=t[o],i=e[o];if(c(r)&&c(i))h(n[o]={},he(r,i));else if(C(e,o)&&i!==r){let t=!0;if(s(r)||s(i))try{ue(r)===ue(i)&&(t=!1)}catch(q){}t&&(n[o]=i)}})),n};let we;const{abs:pe,round:ge}=Math,be=(t,e,n)=>{k(t,e);const o=St(e),r=$t(e),i=At(n);return{x:r.h-o.h+i.h,y:r.w-o.w+i.w}},ye=(t,e)=>{const n="hidden";y(t,{overflowX:n,overflowY:n,direction:"rtl"}),g(t,0);const o=zt(t),r=zt(e);g(t,-999);const i=zt(e);return{i:o.x===r.x,n:r.x!==i.x}},ve=(t,e)=>{const n=st(t,Ht),o=Lt(t),r=Lt(e),i=ut(r,o,!0),s=st(t,Ft),c=Lt(t),l=Lt(e),a=ut(l,c,!0);return n(),s(),i&&a},me=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},xe=()=>(we||(we=(()=>{const{body:e}=document,n=Y(`
`)[0],o=n.firstChild,[r,,i]=Pt(),[s,c]=t({o:be(e,n,o),u:at}),[l]=c(),a=(t=>{let e=!1;const n=st(t,Jt);try{e="none"===y(t,G("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(o){}return n(),e})(n),d={x:0===l.x,y:0===l.y},u={A:!a,$:!1},f=h({},fe),w={L:l,I:d,T:a,D:"-1"===y(n,"zIndex"),P:ye(n,o),M:ve(n,o),j:t=>r("_",t),N:h.bind(0,{},u),R(t){h(u,t)},H:h.bind(0,{},f),F(t){h(f,t)},k:h({},u),V:h({},f)};if(R(n,"style"),U(n),!(a||d.x&&d.y)){let t=xt(),r=me();window.addEventListener("resize",(()=>{const c=xt(),l={w:c.w-t.w,h:c.h-t.h};if(0===l.w&&0===l.h)return;const a=pe(l.w),d=pe(l.h),u={w:pe(ge(c.w/(t.w/100))),h:pe(ge(c.h/(t.h/100)))},f=me(),w=a>2&&d>2,p=!((t,e)=>{const n=pe(t),o=pe(e);return!(n===o||n+1===o||n-1===o)})(u.w,u.h);if(w&&p&&f!==r&&r>0){const[t,r]=s(be(e,n,o));h(we.L,t),U(n),r&&i("_")}t=c,r=f}))}return w})()),we),$e=(t,e)=>i(t)?t.apply(0,e):t,Se=(t,e,n,o)=>$e(o||$e(n,t),t)||e.apply(0,t),Oe=(t,o,r,i)=>{let s=$e(i,t);return(n(s)||e(s))&&(s=$e(r,t)),!0===s||n(s)||e(s)?o.apply(0,t):s};let Ae=0;const Le=V.bind(0,""),Me=t=>{k(N(t),P(t)),U(t)},Ce=()=>{const{T:t,I:e,D:n}=xe(),o=!(n||t||!e.x&&!e.y)&&document.createElement("style");return o&&(p(o,"id",`${Kt}-${Ae}`),Ae++),o},Ee=t=>{const{N:e,T:n}=xe(),{B:o,U:r,A:i,$:s}=e(),c=d(t),l=t,a=c?t:l.target,u=I(a,"textarea"),f=!u&&I(a,"body"),h=a.ownerDocument,w=h.body,g=h.defaultView,b=!!tt&&!u&&n,y=Se.bind(0,[a]),v=Oe.bind(0,[a]),m=[y(Le,r,l.viewport),y(Le,r),y(Le)].filter((t=>!!b||t!==a))[0],x=m===a,$={Y:a,B:u?y(Le,o,l.host):a,U:m,A:!x&&v(Le,i,l.padding),$:!x&&v(Le,s,l.content),q:!x&&Ce(),G:g,W:h,X:N(w),J:w,K:u,Z:f,tt:c,nt:x,et:(t,e)=>x?((t,e,n)=>{const o=p(t,Ut)||"";return new Set(o.split(" ")).has(n)})(m,0,e):((t,e)=>rt(t,e,((t,e)=>t.contains(e))))(m,t),ot:(t,e,n)=>x?B(m,Ut,e,n):(n?st:it)(m,t)},A=E($).reduce(((t,e)=>{const n=$[e];return O(t,!(!n||N(n))&&n)}),[]),L=t=>t?S(A,t)>-1:null,{Y:C,B:T,A:z,U:j,$:H,q:V}=$,Y=[],_=u&&L(T),W=u?C:P([H,j,z,T,C].find((t=>!1===L(t)))),X=H||j,q=((t,e)=>(p(t,Ut,e),R.bind(0,t,Ut)))(T,x?"viewport":"host"),K=st(z,Xt),G=st(j,!x&&qt),J=st(H,Gt);return _&&(F(C,T),O(Y,(()=>{F(T,C),U(T)}))),k(X,W),k(T,z),k(z||T,!x&&j),k(j,H),O(Y,(()=>{q(),R(j,Vt),R(j,Yt),L(H)&&Me(H),L(j)&&Me(j),L(z)&&Me(z),K(),G(),J()})),n&&!x&&O(Y,it.bind(0,j,Jt)),V&&(((t,e)=>{D(N(t),t,e)})(j,V),O(Y,U.bind(0,V))),[$,M.bind(0,Y)]},Be=(t,e)=>{const{$:n}=t,[o]=e;return t=>{const{M:e}=xe(),{st:r}=o(),{ct:i}=t,s=(n||!e)&&i;return s&&y(n,{height:r?"":"100%"}),{it:s,rt:s}}},Re=(e,n)=>{const[o,r]=n,{B:i,A:s,U:c,nt:l}=e,[a,d]=t({u:dt,o:vt()},vt.bind(0,i,"padding",""));return(t,e,n)=>{let[i,u]=d(n);const{T:f,M:w}=xe(),{lt:p}=o(),{it:g,rt:b,ut:v}=t,[m,x]=e("paddingAbsolute");(g||u||!w&&b)&&([i,u]=a(n));const $=!l&&(x||v||u);if($){const t=!m||!s&&!f,e=i.r+i.l,n=i.t+i.b,o={marginRight:t&&!p?-e:0,marginBottom:t?-n:0,marginLeft:t&&p?-e:0,top:t?-i.t:0,right:t?p?-i.r:"auto":0,left:t?p?"auto":-i.l:0,width:t?`calc(100% + ${e}px)`:""},l={paddingTop:t?i.t:0,paddingRight:t?i.r:0,paddingBottom:t?i.b:0,paddingLeft:t?i.l:0};y(s||c,o),y(c,l),r({A:i,ft:!t,dt:s?l:h({},o,l)})}return{_t:$}}},{max:Te}=Math,ze="visible",Ie="hidden",Pe=42,Ne={u:lt,o:{w:0,h:0}},je={u:at,o:{x:Ie,y:Ie}},De=(t,e,n)=>n?st(t,e):it(t,e),ke=t=>0===t.indexOf(ze),He=(e,n)=>{const[o,r]=n,{B:i,A:s,U:c,q:l,nt:a,ot:d}=e,{L:u,M:h,T:w,I:g}=xe(),b=!a&&!w&&(g.x||g.y),[v,m]=t(Ne,At.bind(0,c)),[x,$]=t(Ne,Ot.bind(0,c)),[S,O]=t(Ne),[A]=t(je),L=(t,e)=>{if(y(c,{height:""}),e){const{ft:e,A:n}=o(),{gt:r,ht:s}=t,l=At(i),a=St(i),d="content-box"===y(c,"boxSizing"),u=e||d?n.b+n.t:0,f=!(g.x&&d);y(c,{height:a.h+l.h+(r.x&&f?s.x:0)-u})}},M=(t,e)=>{const n=w||t?0:Pe,o=(t,o,r)=>{const i=y(c,t),s="scroll"===(e?e[t]:i);return[i,s,s&&!w?o?n:r:0,o&&!!n]},[r,i,s,l]=o("overflowX",g.x,u.x),[a,d,f,h]=o("overflowY",g.y,u.y);return{vt:{x:r,y:a},gt:{x:i,y:d},ht:{x:s,y:f},wt:{x:l,y:h}}},C=(t,e,n,o)=>{const r=(t,e)=>{const n=ke(t),o=e&&n&&t.replace(`${ze}-`,"")||"";return[e&&!n?t:"",ke(o)?"hidden":o]},[i,s]=r(n.x,e.x),[c,l]=r(n.y,e.y);return o.overflowX=s&&c?s:i,o.overflowY=l&&i?l:c,M(t,o)},R=(t,e,n,r)=>{if(b){const{dt:i}=o(),{ht:s,wt:a}=t,{x:d,y:u}=a,{x:f,y:h}=s,w=i[r?"paddingRight":"paddingLeft"],g=i.paddingTop,b=e.w+n.w,v=e.h+n.h,m={w:h&&u?`${h+b-w}px`:"",h:f&&d?`${f+v-g}px`:""};if(l){const{sheet:t}=l;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${p(l,"id")} + .${Kt}::before {}`,0);const n=e[0].style;n.width=m.w,n.height=m.h}}}else y(c,{"--os-vaw":m.w,"--os-vah":m.h})}return b},T=(t,e,n,r)=>{const{ht:i,wt:s}=t,{x:c,y:l}=s,{x:a,y:d}=i,{dt:u}=o(),f=e?"marginLeft":"marginRight",h=e?"paddingLeft":"paddingRight",w=u[f],p=u.marginBottom,g=u[h],b=u.paddingBottom;r.width=`calc(100% + ${d+-1*w}px)`,r[f]=-d+w,r.marginBottom=-a+p,n&&(r[h]=g+(l?d:0),r.paddingBottom=b+(c?a:0))},z=(t,e,n)=>{if(b){const r=n||M(t),{dt:i}=o(),{wt:s}=r,{x:l,y:a}=s,d={},u=t=>f(t.split(" "),(t=>{d[t]=i[t]}));l&&u("marginBottom paddingTop paddingBottom"),a&&u("marginLeft marginRight paddingLeft paddingRight");const w=y(c,E(d));return it(c,Kt),h||(d.height=""),y(c,d),[()=>{T(r,e,b,w),y(c,w),st(c,Kt)},r]}return[ht]};return(t,e,n)=>{const{it:l,bt:u,rt:f,_t:b,ct:E,ut:I}=t,{st:P,lt:N}=o(),[j,D]=e("nativeScrollbarsOverlaid.show"),[k,H]=e("overflow"),F=j&&g.x&&g.y,U=!a&&!h&&(l||f||u||D||E),V=ke(k.x),Y=ke(k.y),_=V||Y;let W,X=m(n),q=$(n),K=O(n);if(D&&w&&d(Jt,Wt,!F),U&&(W=M(F),L(W,P)),l||b||f||I||D){_&&d(Zt,_t,!1);const[t,e]=z(F,N,W),[o,r]=X=v(n),[i,s]=q=x(n),l=St(c);let a=i,u=l;t(),(s||r||D)&&e&&!F&&R(e,i,o,N)&&(u=St(c),a=Ot(c)),K=S(((t,e,n)=>{const o=window.devicePixelRatio%1!=0?1:0,r={w:Te(0,t.w-e.w-Te(0,n.w)),h:Te(0,t.h-e.h-Te(0,n.h))};return{w:r.w>o?r.w:0,h:r.h>o?r.h:0}})({w:Te(i.w,a.w),h:Te(i.h,a.h)},{w:u.w+Te(0,l.w-i.w),h:u.h+Te(0,l.h-i.h)},o),n)}const[G,J]=K,[Z,Q]=q,[tt,et]=X,nt={x:G.w>0,y:G.h>0},ot=V&&Y&&(nt.x||nt.y)||V&&nt.x&&!nt.y||Y&&nt.y&&!nt.x;if(b||I||et||Q||J||H||D||U){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=C(F,nt,k,t),n=R(e,Z,tt,N);a||T(e,N,n,t),U&&L(e,P),a?(p(i,Vt,t.overflowX),p(i,Yt,t.overflowY)):y(c,t)}B(i,Ut,_t,ot),De(s,Zt,ot),!a&&De(c,Zt,_);const[rt,it]=A(M(F).vt);return r({vt:rt,yt:{x:G.w,y:G.h},St:nt}),{Ct:it,xt:J}}},Fe=(t,e,n)=>{const o={},r=e||{};return f(E(t).concat(E(r)),(e=>{const i=t[e],s=r[e];o[e]=!!(n||i||s)})),o},Ue="animationstart",Ve="scroll",Ye=3333333,_e=t=>"rtl"===y(t,"direction"),We=t=>t&&(t.height||t.width),Xe=(e,n,o)=>{const{Ot:r=!1,At:i=!1}=o||{},{P:l}=xe(),a=Y(`
`)[0],d=a.firstChild,u=_e.bind(0,a),[f]=t({o:void 0,_:!0,u:(t,e)=>!(!t||!We(t)&&We(e))}),h=t=>{const e=s(t)&&t.length>0&&c(t[0]),o=!e&&function(t){return"boolean"==typeof t}(t[0]);let i=!1,d=!1,u=!0;if(e){const[e,,n]=f(t.pop().contentRect),o=We(e),r=We(n);i=!n||!o,d=!r&&o,u=!i}else o?[,u]=t:d=!0===t;if(r&&u){const e=o?t[0]:_e(a);g(a,e?l.n?-Ye:l.i?0:Ye:Ye),b(a,Ye)}i||n({it:!o,$t:o?t:void 0,At:!!d})},w=[];let p,v=!!i&&h;if(tt){const t=new tt(h);t.observe(d),O(w,(()=>{t.disconnect()}))}else{const t=Y(`
`);k(d,t),st(d,ne);const e=t[0],n=e.lastChild,o=e.firstChild,r=null==o?void 0:o.firstChild;let s,c=$t(e),l=c,a=!1;const u=()=>{g(o,Ye),b(o,Ye),g(n,Ye),b(n,Ye)},f=t=>{s=0,a&&(c=l,h(!0===t))},p=t=>{l=$t(e),a=!t||!lt(l,c),t?(Rt(t),a&&!s&&(et(s),s=nt(f))):f(!1===t),u()};O(w,[Bt(o,Ve,p),Bt(n,Ve,p)]),y(r,{width:Ye,height:Ye}),u(),v=i?p.bind(0,!1):u}if(r){p=t({o:!u()},u);const[e]=p;O(w,Bt(a,Ve,(t=>{const n=e(),[o,r]=n;r&&(it(d,"ltr rtl"),st(d,o?"rtl":"ltr"),h(n)),Rt(t)})))}return v&&(st(a,te),O(w,Bt(a,Ue,v,{O:!!tt}))),H(e,a),()=>{M(w),U(a)}},qe=(e,n)=>{const o=V(ie),r=[],[i]=t({o:!1}),s=t=>{if(t){const e=i((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=e;o&&n(e)}};if(Q){const t=new Q((t=>{t&&t.length>0&&s(t.pop())}),{root:e});t.observe(o),O(r,(()=>{t.disconnect()}))}else{const t=()=>{const t=$t(o);s(t)};O(r,Xe(o,t)),t()}return H(e,o),()=>{M(r),U(o)}},Ke=(t,e,n,o)=>{let i=!1;const{Lt:s,It:c,Tt:l,zt:a,Dt:d,Et:u}=o||{},[h,w]=((t,e,n)=>{let o,i=!1;const s=s=>{if(n){const c=n.reduce(((e,n)=>{if(n){const o=n[0],i=n[1],c=i&&o&&(s?s(o):z(o,t));c&&c.length&&i&&r(i)&&O(e,[c,i.trim()],!0)}return e}),[]);f(c,(t=>f(t[0],(n=>{const r=t[1],s=o.get(n);if(s){const t=s[0],e=s[1];t===r&&e()}const c=Bt(n,r,(t=>{i?(c(),o.delete(n)):e(t)}));o.set(n,[r,c])}))))}};return n&&(o=new WeakMap,s()),[()=>{i=!0},s]})(t,wt((()=>{i&&n(!0)}),{g:33,p:99}),l),g=c||[],b=(s||[]).concat(g),y=i=>{const s=d||ht,c=u||ht,l=[],h=[];let b=!1,y=!1,v=!1;f(i,(n=>{const{attributeName:i,target:d,type:u,oldValue:f,addedNodes:w}=n,m="attributes"===u,x="childList"===u,$=t===d,A=m&&r(i)?p(d,i):0,L=0!==A&&f!==A,M=S(g,i)>-1&&L;if(e&&!$){const e=!m,r=m&&M,l=r&&a&&I(d,a),u=(l?!s(d,i,f,A):e||r)&&!c(n,!!l,t,o);O(h,w),y=y||u,v=v||x}!e&&$&&L&&!s(d,i,f,A)&&(O(l,i),b=b||M)})),v&&!L(h)&&w((t=>h.reduce(((e,n)=>(O(e,z(t,n)),I(n,t)?O(e,n):e)),[]))),e?y&&n(!1):L(l)&&!b||n(l,b)},v=new Z(y);return v.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:e,childList:e,characterData:e}),i=!0,[()=>{i&&(h(),v.disconnect(),i=!1)},()=>{i&&y(v.takeRecords())}]},Ge=`[${Ut}]`,Je=`.${qt}`,Ze=["tabindex"],Qe=["wrap","cols","rows"],tn=["id","class","style","open"],en=(e,n,c)=>{let l,a,d;const[,h]=n,{B:w,U:g,$:b,K:y,nt:v,et:m,ot:x}=e,{T:$,M:O}=xe(),[A]=t({u:lt,o:{w:0,h:0}},(()=>{const t=m(Zt,_t);t&&x(Zt,_t);const e=Ot(b),n=Ot(g),o=At(g);return t&&x(Zt,_t,!0),{w:n.w+e.w+o.w,h:n.h+e.h+o.h}})),L=y?Qe:tn.concat(Qe),M=wt(c,{g:()=>l,p:()=>a,v(t,e){const[n]=t,[o]=e;return[E(n).concat(E(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),C=t=>{f(t||Ze,(t=>{if(S(Ze,t)>-1){const e=p(w,t);r(e)?p(g,t,e):R(g,t)}}))},B=({it:t,$t:e,At:n})=>{const o=!t||n?c:M;let r=!1;if(e){const[t,n]=e;r=n,h({lt:t})}o({it:t,ut:r})},T=t=>{const[,e]=A();e&&(t?c:M)({rt:!0})},z=(b||!O)&&qe(w,(t=>{const[e,n]=t;h({st:e}),c({ct:n})})),I=!v&&Xe(w,B,{At:!0,Ot:!$}),[P]=Ke(w,!1,((t,e)=>{e?M({bt:!0}):v||C(t)}),{It:tn,Lt:tn.concat(Ze)}),N=v&&new tt(B.bind(0,{it:!0}));return N&&N.observe(w),C(),[t=>{const[e]=t("updating.ignoreMutation"),[n,r]=t("updating.attributes"),[c,f]=t("updating.elementEvents"),[h,w]=t("updating.debounce"),p=t=>i(e)&&e(t);if((f||r)&&(d&&(d[1](),d[0]()),d=Ke(b||g,!0,T,{It:L.concat(n||[]),Lt:L.concat(n||[]),Tt:c,zt:Ge,Et:(t,e)=>{const{target:n,attributeName:o}=t;return!(e||!o)&&((t,e,n)=>{const o=t&&j(t,e),r=t&&((t,e)=>{const n=e?u(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r||o!==t&&r!==t&&j(j(t,n),e)===o)})(n,Ge,Je)||!!p(t)}})),w)if(M.m(),s(h)){const t=h[0],e=h[1];l=!!o(t)&&t,a=!!o(e)&&e}else o(h)?(l=h,a=!1):(l=!1,a=!1)},()=>{d&&d[0](),z&&z(),I&&I(),N&&N.disconnect(),P()}]},nn={A:{t:0,r:0,b:0,l:0},ft:!1,dt:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},yt:{x:0,y:0},vt:{x:"hidden",y:"hidden"},St:{x:!1,y:!1},st:!1,lt:!1},on=t=>{const e=V(`${se} ${t}`),n=V(ae),o=V(de);return k(e,n),k(n,o),{jt:e,Nt:n,Rt:o}},rn={},sn="__osOptionsValidationPlugin",cn=new Set,ln=new WeakMap,an=(t,e,n)=>{const{H:r,I:s,j:c}=xe(),l=h({},rn),a=d(t)?t:t.target,u=(t=>ln.get(t))(a);if(u)return u;const w=l[sn],p=t=>{const e=t||{},n=w&&w.Vt;return n?n(e,!0):e},y=h({},r(),p(e)),[v,m,x]=Pt(n);s.x&&s.y&&!y.nativeScrollbarsOverlaid.initialize&&x("initializationWithdrawn");const[$,S,O]=((t,e)=>{const n=jt(e,{}),r=Dt(nn),i=new Set,[s]=r,c=(t,e,n)=>{M(i,[t,e||{},!!n])},[l,a]=Ee(t),d=((t,e)=>{const{U:n}=t,{T:r,I:i,M:s}=xe(),c=!r&&(i.x||i.y),l=[Be(t,e),Re(t,e),He(t,e)];return(t,e,r)=>{const i=Fe(h({it:!1,_t:!1,ut:!1,ct:!1,xt:!1,Ct:!1,bt:!1,rt:!1},e),{},r),a=c||!s,d=a&&g(n),u=a&&b(n);let w=i;return f(l,(e=>{w=Fe(w,e(w,t,!!r)||{},r)})),o(d)&&g(n,d),o(u)&&b(n,u),w}})(l,r),[u,w]=en(l,r,(t=>{c(d(n,t))})),p=s.bind(0);return p.Pt=t=>{i.add(t)},p.Mt=l,[(t,n)=>{const o=jt(e,t,n);u(o),c(d(o,{},n))},p,()=>{i.clear(),w(),a()}]})(t,y),[A,,L]=((t,e,n)=>{const o=Dt({}),[r]=o,[i,s]=((t,e)=>{const{N:n}=xe(),{Ht:o}=n(),{Y:r,B:i,U:s,tt:c}=e,l=!c&&t.scrollbarsSlot,a=Oe([r,i,s],(()=>i),o,l),d=on(ce),u=on(le),{jt:f}=d,{jt:h}=u;return k(a,f),k(a,h),[{Ft:d,kt:u},U.bind(0,[f,h])]})(t,n),c=r.bind(0);return c.Mt=i,[(t,n)=>{const o=jt(e,t,n);console.log(o)},c,()=>{s()}]})(t,y,S.Mt),C=(t,e)=>{$(t,e),A(t,e)},B=c(C.bind(0,{},!0));S.Pt(((t,e,n)=>{const{it:o,ut:r,ct:i,xt:s,Ct:c,rt:l,bt:a}=t;x("updated",{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowAmountChanged:s,overflowStyleChanged:c,contentMutation:l,hostMutation:a},changedOptions:e,force:n})}));const R={options(t){if(t){const e=he(y,p(t));(function(t){for(const e in t)return!1;return!0})(e)||(h(y,e),C(e))}return h({},y)},on:v,off:m,state(){const{yt:t,vt:e,St:n,A:o,ft:r}=S();return h({},{overflowAmount:t,overflowStyle:e,hasOverflow:n,padding:o,paddingAbsolute:r})},elements(){const{Y:t,B:e,A:n,U:o,$:r}=S.Mt;return h({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update(t){C({},t)},destroy:()=>{(t=>{ln.delete(t),cn.delete(t)})(a),B(),m(),L(),O(),x("destroyed")}};return f(E(l),(t=>{const e=l[t];i(e)&&e(an,R)})),R.update(!0),((t,e)=>{ln.set(t,e),cn.add(t)})(a,R),x("initialized"),R};an.plugin=t=>f(s(t)?t:[t],(t=>{rn[t[0]]=t[1]})),an.env=()=>{const{L:t,I:e,T:n,P:o,M:r,D:i,k:s,V:c,N:l,R:a,H:d,F:u}=xe();return h({},{scrollbarSize:t,scrollbarIsOverlaid:e,scrollbarStyling:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,defaultInitializationStrategy:s,defaultDefaultOptions:c,getInitializationStrategy:l,setInitializationStrategy:a,getDefaultOptions:d,setDefaultOptions:u})};export{an as default}; \ No newline at end of file +function t(t,e){const{o:n,u:o,_:r}=t;let i,s=n;const c=(t,e)=>{const n=s,c=t,l=e||(o?!o(n,c):n!==c);return(l||r)&&(s=c,i=n),[s,l,i]};return[e?t=>c(e(s,i),t):c,t=>[s,!!t,i]]}function e(t){return void 0===t}function n(t){return null===t}function o(t){return"number"==typeof t}function r(t){return"string"==typeof t}function i(t){return"function"==typeof t}function s(t){return Array.isArray(t)}function c(t){return"object"==typeof t&&!s(t)&&!n(t)}function l(t){const e=!!t&&t.length,n=o(e)&&e>-1&&e%1==0;return!(!(s(t)||!i(t)&&n)||e>0&&c(t)&&!(e-1 in t))}function a(t){if(!t||!c(t)||"object"!==$(t))return!1;let n;const o="constructor",r=t[o],i=r&&r.prototype,s=x.call(t,o),l=i&&x.call(i,"isPrototypeOf");if(r&&!s&&!l)return!1;for(n in t);return e(n)||x.call(t,n)}function d(t){const e=window.HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===v)}function u(t){const e=window.Element;return!!t&&(e?t instanceof e:t.nodeType===v)}function f(t,e){if(l(t))for(let n=0;ne(t[n],n,t)));return t}function h(t,e,o,r,c,l,d){const u=[e,o,r,c,l,d];return"object"==typeof t&&!n(t)||i(t)||(t={}),f(u,(e=>{f(B(e),(n=>{const o=e[n];if(t===o)return!0;const r=s(o);if(o&&(a(o)||r)){const e=t[n];let i=e;r&&!s(e)?i=[]:r||a(e)||(i={}),t[n]=h(i,o)}else t[n]=o}))})),t}function p(t,n,o,r){if(e(r))return o?o[t]:n;o&&(o[t]=r)}function w(t,n,o){if(e(o))return t?t.getAttribute(n):null;t&&t.setAttribute(n,o)}function g(t,e){return p("scrollLeft",0,t,e)}function y(t,e){return p("scrollTop",0,t,e)}function b(t,e){const n=r(e);if(s(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?yt(t,r,e):e.reduce(((e,n)=>(e[n]=yt(t,r,n),e)),o)}return o}f(B(e),(n=>bt(t,n,e[n])))}const v=Node.ELEMENT_NODE,{toString:m,hasOwnProperty:x}=Object.prototype,$=t=>e(t)||n(t)?`${t}`:m.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),S=(t,e,n)=>t.indexOf(e,n),O=(t,e,n)=>(n||r(e)||!l(e)?t.push(e):Array.prototype.push.apply(t,e),t),A=t=>{if(Array.from&&t)return Array.from(t);const e=[];return t instanceof Set?t.forEach((t=>{O(e,t)})):f(t,(t=>{O(e,t)})),e},L=t=>!!t&&0===t.length,M=(t,e)=>{const n=t=>t&&t.apply(void 0,e||[]);t instanceof Set?t.forEach(n):f(t,n)},C=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),B=t=>t?Object.keys(t):[],E=(t,e,n,o)=>{const r=w(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),w(t,e,A(i).join(" ").trim())},R=(t,e)=>{t&&t.removeAttribute(e)},T=Element.prototype,z=(t,e)=>{const n=[],o=e?u(e)?e:null:document;return o?O(n,o.querySelectorAll(t)):n},I=(t,e)=>!!u(t)&&(T.matches||T.msMatchesSelector).call(t,e),P=t=>t?A(t.childNodes):[],N=t=>t?t.parentElement:null,j=(t,e)=>{if(u(t)){const n=T.closest;if(n)return n.call(t,e);do{if(I(t,e))return t;t=N(t)}while(t)}return null},D=(t,e,n)=>{if(n){let o,r=e;t&&(l(n)?(o=document.createDocumentFragment(),f(n,(t=>{t===r&&(r=t.previousSibling),o.appendChild(t)}))):o=n,e&&(r?r!==e&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r||null))}},k=(t,e)=>{D(t,null,e)},H=(t,e)=>{D(t,t&&t.firstChild,e)},F=(t,e)=>{D(N(t),t&&t.nextSibling,e)},U=t=>{if(l(t))f(A(t),(t=>U(t)));else if(t){const e=N(t);e&&e.removeChild(t)}},V=t=>{const e=document.createElement("div");return t&&w(e,"class",t),e},Y=t=>{const e=V();return e.innerHTML=t.trim(),f(P(e),(t=>U(t)))},_=t=>t.charAt(0).toUpperCase()+t.slice(1),X=["-webkit-","-moz-","-o-","-ms-"],W=["WebKit","Moz","O","MS","webkit","moz","o","ms"],q={},K={},G=t=>{let e=K[t];if(C(K,t))return e;const n=_(t),o=V().style;return f(X,(r=>{const i=r.replace(/-/g,""),s=[t,r+t,i+n,_(i)+n];return!(e=s.find((t=>void 0!==o[t])))})),K[t]=e||""},J=t=>{let e=q[t]||window[t];return C(q,t)||(f(W,(n=>(e=e||window[n+_(t)],!e))),q[t]=e),e},Z=J("MutationObserver"),Q=J("IntersectionObserver"),tt=J("ResizeObserver"),et=J("cancelAnimationFrame"),nt=J("requestAnimationFrame"),ot=/[^\x20\t\r\n\f]+/g,rt=(t,e,n)=>{let o,i=0,s=!1;if(t&&e&&r(e)){const r=e.match(ot)||[];for(s=r.length>0;o=r[i++];)s=!!n(t.classList,o)&&s}return s},it=(t,e)=>{rt(t,e,((t,e)=>t.remove(e)))},st=(t,e)=>(rt(t,e,((t,e)=>t.add(e))),it.bind(0,t,e)),ct=(t,e,n,o)=>{if(t&&e){let r=!0;return f(n,(n=>{(o?o(t[n]):t[n])!==(o?o(e[n]):e[n])&&(r=!1)})),r}return!1},lt=(t,e)=>ct(t,e,["w","h"]),at=(t,e)=>ct(t,e,["x","y"]),dt=(t,e)=>ct(t,e,["t","r","b","l"]),ut=(t,e,n)=>ct(t,e,["width","height"],n&&(t=>Math.round(t))),ft=t=>{t&&window.clearTimeout(t),t&&et(t)},ht=()=>{},pt=(t,e)=>{let n,r,s,c;const{g:l,p:a,v:d}=e||{},u=window.setTimeout,f=function(e){ft(n),ft(r),r=n=s=void 0,t.apply(this,e)},h=t=>d&&s?d(s,t):t,p=()=>{n&&f(h(c)||c)},w=function(){const t=A(arguments),e=i(l)?l():l,d=o(e)&&e>=0;if(d){const l=i(a)?a():a,d=o(l)&&l>=0,w=e>0?u:nt,g=h(t)||t,y=f.bind(0,g);ft(n),n=w(y,e),d&&!r&&(r=u(p,l)),s=c=g}else f(t)};return w.m=p,w},wt={opacity:1,zindex:1},gt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},yt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],bt=(t,n,r)=>{try{if(t){const{style:i}=t;e(i[n])?i.setProperty(n,r):i[n]=((t,e)=>!wt[t.toLowerCase()]&&o(e)?`${e}px`:e)(n,r)}}catch(T){}},vt=(t,e,n)=>{const o=e?`${e}-`:"",r=n?`-${n}`:"",i=`${o}top${r}`,s=`${o}right${r}`,c=`${o}bottom${r}`,l=`${o}left${r}`,a=b(t,[i,s,c,l]);return{t:gt(a[i]),r:gt(a[s]),b:gt(a[c]),l:gt(a[l])}},mt={w:0,h:0},xt=()=>({w:window.innerWidth,h:window.innerHeight}),$t=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:mt,St=t=>t?{w:t.clientWidth,h:t.clientHeight}:mt,Ot=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:mt,At=t=>{const e=parseFloat(b(t,"height"))||0,n=parseFloat(b(t,"height"))||0;return{w:n-Math.round(n),h:e-Math.round(e)}},Lt=t=>t.getBoundingClientRect();let Mt;const Ct=t=>t.split(" "),Bt=(t,e,n,o)=>{f(Ct(e),(e=>{t.removeEventListener(e,n,o)}))},Et=(t,n,o,r)=>{const i=(()=>{if(e(Mt)){Mt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){Mt=!0}}))}catch(t){}}return Mt})(),s=i&&r&&r.S||!1,c=r&&r.C||!1,l=r&&r.O||!1,a=[],d=i?{passive:s,capture:c}:c;return f(Ct(n),(e=>{const n=l?r=>{t.removeEventListener(e,n,c),o&&o(r)}:o;O(a,Bt.bind(null,t,e,n,c)),t.addEventListener(e,n,d)})),M.bind(0,a)},Rt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),Tt={x:0,y:0},zt=t=>{const e=t?Lt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Tt},It=(t,e)=>{f(s(e)?e:[e],t)},Pt=t=>{function e(t,e){if(t){const n=o.get(t);It((t=>{n&&n[t?"delete":"clear"](t)}),e)}else o.forEach((t=>{t.clear()})),o.clear()}function n(t,n){const r=o.get(t)||new Set;return o.set(t,r),It((t=>{t&&r.add(t)}),n),e.bind(0,t,n)}const o=new Map;return f(B(t),(e=>{n(e,t[e])})),[n,e,function(t,e){const n=o.get(t);f(A(n),(t=>{e&&!L(e)?t.apply(0,e):t()}))}]},Nt=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&C(t,e)?t[e]:void 0),t):void 0,jt=(t,e,n)=>o=>[Nt(t,o),n||void 0!==Nt(e,o)],Dt=t=>{let e=t;return[()=>e,t=>{e=h({},e,t)}]},kt="os-environment",Ht=`${kt}-flexbox-glue`,Ft=`${Ht}-max`,Ut="data-overlayscrollbars",Vt=`${Ut}-overflow-x`,Yt=`${Ut}-overflow-y`,_t="overflowVisible",Xt="viewportStyled",Wt="os-padding",qt="os-viewport",Kt=`${qt}-arrange`,Gt="os-content",Jt=`${qt}-scrollbar-styled`,Zt=`os-overflow-visible`,Qt="os-size-observer",te=`${Qt}-appear`,ee=`${Qt}-listener`,ne=`${ee}-scroll`,oe=`${ee}-item`,re=`${oe}-final`,ie="os-trinsic-observer",se="os-scrollbar",ce=`${se}-horizontal`,le=`${se}-vertical`,ae="os-scrollbar-track",de="os-scrollbar-handle",ue=t=>JSON.stringify(t,((t,e)=>{if(i(e))throw new Error;return e})),fe={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},he=(t,e)=>{const n={};return f(B(e).concat(B(t)),(o=>{const r=t[o],i=e[o];if(c(r)&&c(i))h(n[o]={},he(r,i));else if(C(e,o)&&i!==r){let t=!0;if(s(r)||s(i))try{ue(r)===ue(i)&&(t=!1)}catch(q){}t&&(n[o]=i)}})),n};let pe;const{abs:we,round:ge}=Math,ye=(t,e,n)=>{k(t,e);const o=St(e),r=$t(e),i=At(n);return{x:r.h-o.h+i.h,y:r.w-o.w+i.w}},be=(t,e)=>{const n="hidden";b(t,{overflowX:n,overflowY:n,direction:"rtl"}),g(t,0);const o=zt(t),r=zt(e);g(t,-999);const i=zt(e);return{i:o.x===r.x,n:r.x!==i.x}},ve=(t,e)=>{const n=st(t,Ht),o=Lt(t),r=Lt(e),i=ut(r,o,!0),s=st(t,Ft),c=Lt(t),l=Lt(e),a=ut(l,c,!0);return n(),s(),i&&a},me=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},xe=()=>(pe||(pe=(()=>{const{body:e}=document,n=Y(`
`)[0],o=n.firstChild,[r,,i]=Pt(),[s,c]=t({o:ye(e,n,o),u:at}),[l]=c(),a=(t=>{let e=!1;const n=st(t,Jt);try{e="none"===b(t,G("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(o){}return n(),e})(n),d={x:0===l.x,y:0===l.y},u={A:!a,$:!1},f=h({},fe),p={L:l,I:d,T:a,D:"-1"===b(n,"zIndex"),P:be(n,o),M:ve(n,o),j:t=>r("_",t),N:h.bind(0,{},u),R(t){h(u,t)},H:h.bind(0,{},f),F(t){h(f,t)},k:h({},u),V:h({},f)};if(R(n,"style"),U(n),!(a||d.x&&d.y)){let t=xt(),r=me();window.addEventListener("resize",(()=>{const c=xt(),l={w:c.w-t.w,h:c.h-t.h};if(0===l.w&&0===l.h)return;const a=we(l.w),d=we(l.h),u={w:we(ge(c.w/(t.w/100))),h:we(ge(c.h/(t.h/100)))},f=me(),p=a>2&&d>2,w=!((t,e)=>{const n=we(t),o=we(e);return!(n===o||n+1===o||n-1===o)})(u.w,u.h);if(p&&w&&f!==r&&r>0){const[t,r]=s(ye(e,n,o));h(pe.L,t),U(n),r&&i("_")}t=c,r=f}))}return p})()),pe),$e=(t,e)=>i(t)?t.apply(0,e):t,Se=(t,e,n,o)=>$e(o||$e(n,t),t)||e.apply(0,t),Oe=(t,o,r,i)=>{let s=$e(i,t);return(n(s)||e(s))&&(s=$e(r,t)),!0===s||n(s)||e(s)?o.apply(0,t):s};let Ae=0;const Le=V.bind(0,""),Me=t=>{k(N(t),P(t)),U(t)},Ce=()=>{const{T:t,I:e,D:n}=xe(),o=!(n||t||!e.x&&!e.y)&&document.createElement("style");return o&&(w(o,"id",`${Kt}-${Ae}`),Ae++),o},Be=t=>{const{N:e,T:n}=xe(),{B:o,U:r,A:i,$:s}=e(),c=d(t),l=t,a=c?t:l.target,u=I(a,"textarea"),f=!u&&I(a,"body"),h=a.ownerDocument,p=h.body,g=h.defaultView,y=!!tt&&!u&&n,b=Se.bind(0,[a]),v=Oe.bind(0,[a]),m=[b(Le,r,l.viewport),b(Le,r),b(Le)].filter((t=>!!y||t!==a))[0],x=m===a,$={Y:a,B:u?b(Le,o,l.host):a,U:m,A:!x&&v(Le,i,l.padding),$:!x&&v(Le,s,l.content),q:!x&&Ce(),G:g,W:h,X:N(p),J:p,K:u,Z:f,tt:c,nt:x,et:(t,e)=>x?((t,e,n)=>{const o=w(t,Ut)||"";return new Set(o.split(" ")).has(n)})(m,0,e):((t,e)=>rt(t,e,((t,e)=>t.contains(e))))(m,t),ot:(t,e,n)=>x?E(m,Ut,e,n):(n?st:it)(m,t)},A=B($).reduce(((t,e)=>{const n=$[e];return O(t,!(!n||N(n))&&n)}),[]),L=t=>t?S(A,t)>-1:null,{Y:C,B:T,A:z,U:j,$:H,q:V}=$,Y=[],_=u&&L(T),X=u?C:P([H,j,z,T,C].find((t=>!1===L(t)))),W=H||j;return[$,()=>{const t=((t,e)=>(w(t,Ut,e),R.bind(0,t,Ut)))(T,x?"viewport":"host"),e=st(z,Wt),o=st(j,!x&&qt),r=st(H,Gt);_&&(F(C,T),O(Y,(()=>{F(T,C),U(T)}))),k(W,X),k(T,z),k(z||T,!x&&j),k(j,H),O(Y,(()=>{t(),R(j,Vt),R(j,Yt),L(H)&&Me(H),L(j)&&Me(j),L(z)&&Me(z),e(),o(),r()})),n&&!x&&O(Y,it.bind(0,j,Jt)),V&&(((t,e)=>{D(N(t),t,e)})(j,V),O(Y,U.bind(0,V)))},M.bind(0,Y)]},Ee=(t,e)=>{const{$:n}=t,[o]=e;return t=>{const{M:e}=xe(),{st:r}=o(),{ct:i}=t,s=(n||!e)&&i;return s&&b(n,{height:r?"":"100%"}),{it:s,rt:s}}},Re=(e,n)=>{const[o,r]=n,{B:i,A:s,U:c,nt:l}=e,[a,d]=t({u:dt,o:vt()},vt.bind(0,i,"padding",""));return(t,e,n)=>{let[i,u]=d(n);const{T:f,M:p}=xe(),{lt:w}=o(),{it:g,rt:y,ut:v}=t,[m,x]=e("paddingAbsolute");(g||u||!p&&y)&&([i,u]=a(n));const $=!l&&(x||v||u);if($){const t=!m||!s&&!f,e=i.r+i.l,n=i.t+i.b,o={marginRight:t&&!w?-e:0,marginBottom:t?-n:0,marginLeft:t&&w?-e:0,top:t?-i.t:0,right:t?w?-i.r:"auto":0,left:t?w?"auto":-i.l:0,width:t?`calc(100% + ${e}px)`:""},l={paddingTop:t?i.t:0,paddingRight:t?i.r:0,paddingBottom:t?i.b:0,paddingLeft:t?i.l:0};b(s||c,o),b(c,l),r({A:i,ft:!t,dt:s?l:h({},o,l)})}return{_t:$}}},{max:Te}=Math,ze="visible",Ie="hidden",Pe=42,Ne={u:lt,o:{w:0,h:0}},je={u:at,o:{x:Ie,y:Ie}},De=(t,e,n)=>n?st(t,e):it(t,e),ke=t=>0===t.indexOf(ze),He=(e,n)=>{const[o,r]=n,{B:i,A:s,U:c,q:l,nt:a,ot:d}=e,{L:u,M:h,T:p,I:g}=xe(),y=!a&&!p&&(g.x||g.y),[v,m]=t(Ne,At.bind(0,c)),[x,$]=t(Ne,Ot.bind(0,c)),[S,O]=t(Ne),[A]=t(je),L=(t,e)=>{if(b(c,{height:""}),e){const{ft:e,A:n}=o(),{gt:r,ht:s}=t,l=At(i),a=St(i),d="content-box"===b(c,"boxSizing"),u=e||d?n.b+n.t:0,f=!(g.x&&d);b(c,{height:a.h+l.h+(r.x&&f?s.x:0)-u})}},M=(t,e)=>{const n=p||t?0:Pe,o=(t,o,r)=>{const i=b(c,t),s="scroll"===(e?e[t]:i);return[i,s,s&&!p?o?n:r:0,o&&!!n]},[r,i,s,l]=o("overflowX",g.x,u.x),[a,d,f,h]=o("overflowY",g.y,u.y);return{vt:{x:r,y:a},gt:{x:i,y:d},ht:{x:s,y:f},wt:{x:l,y:h}}},C=(t,e,n,o)=>{const r=(t,e)=>{const n=ke(t),o=e&&n&&t.replace(`${ze}-`,"")||"";return[e&&!n?t:"",ke(o)?"hidden":o]},[i,s]=r(n.x,e.x),[c,l]=r(n.y,e.y);return o.overflowX=s&&c?s:i,o.overflowY=l&&i?l:c,M(t,o)},R=(t,e,n,r)=>{if(y){const{dt:i}=o(),{ht:s,wt:a}=t,{x:d,y:u}=a,{x:f,y:h}=s,p=i[r?"paddingRight":"paddingLeft"],g=i.paddingTop,y=e.w+n.w,v=e.h+n.h,m={w:h&&u?`${h+y-p}px`:"",h:f&&d?`${f+v-g}px`:""};if(l){const{sheet:t}=l;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${w(l,"id")} + .${Kt}::before {}`,0);const n=e[0].style;n.width=m.w,n.height=m.h}}}else b(c,{"--os-vaw":m.w,"--os-vah":m.h})}return y},T=(t,e,n,r)=>{const{ht:i,wt:s}=t,{x:c,y:l}=s,{x:a,y:d}=i,{dt:u}=o(),f=e?"marginLeft":"marginRight",h=e?"paddingLeft":"paddingRight",p=u[f],w=u.marginBottom,g=u[h],y=u.paddingBottom;r.width=`calc(100% + ${d+-1*p}px)`,r[f]=-d+p,r.marginBottom=-a+w,n&&(r[h]=g+(l?d:0),r.paddingBottom=y+(c?a:0))},z=(t,e,n)=>{if(y){const r=n||M(t),{dt:i}=o(),{wt:s}=r,{x:l,y:a}=s,d={},u=t=>f(t.split(" "),(t=>{d[t]=i[t]}));l&&u("marginBottom paddingTop paddingBottom"),a&&u("marginLeft marginRight paddingLeft paddingRight");const p=b(c,B(d));return it(c,Kt),h||(d.height=""),b(c,d),[()=>{T(r,e,y,p),b(c,p),st(c,Kt)},r]}return[ht]};return(t,e,n)=>{const{it:l,bt:u,rt:f,_t:y,ct:B,ut:I}=t,{st:P,lt:N}=o(),[j,D]=e("nativeScrollbarsOverlaid.show"),[k,H]=e("overflow"),F=j&&g.x&&g.y,U=!a&&!h&&(l||f||u||D||B),V=ke(k.x),Y=ke(k.y),_=V||Y;let X,W=m(n),q=$(n),K=O(n);if(D&&p&&d(Jt,Xt,!F),U&&(X=M(F),L(X,P)),l||y||f||I||D){_&&d(Zt,_t,!1);const[t,e]=z(F,N,X),[o,r]=W=v(n),[i,s]=q=x(n),l=St(c);let a=i,u=l;t(),(s||r||D)&&e&&!F&&R(e,i,o,N)&&(u=St(c),a=Ot(c)),K=S(((t,e,n)=>{const o=window.devicePixelRatio%1!=0?1:0,r={w:Te(0,t.w-e.w-Te(0,n.w)),h:Te(0,t.h-e.h-Te(0,n.h))};return{w:r.w>o?r.w:0,h:r.h>o?r.h:0}})({w:Te(i.w,a.w),h:Te(i.h,a.h)},{w:u.w+Te(0,l.w-i.w),h:u.h+Te(0,l.h-i.h)},o),n)}const[G,J]=K,[Z,Q]=q,[tt,et]=W,nt={x:G.w>0,y:G.h>0},ot=V&&Y&&(nt.x||nt.y)||V&&nt.x&&!nt.y||Y&&nt.y&&!nt.x;if(y||I||et||Q||J||H||D||U){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=C(F,nt,k,t),n=R(e,Z,tt,N);a||T(e,N,n,t),U&&L(e,P),a?(w(i,Vt,t.overflowX),w(i,Yt,t.overflowY)):b(c,t)}E(i,Ut,_t,ot),De(s,Zt,ot),!a&&De(c,Zt,_);const[rt,it]=A(M(F).vt);return r({vt:rt,yt:{x:G.w,y:G.h},St:nt}),{Ct:it,xt:J}}},Fe=(t,e,n)=>{const o={},r=e||{};return f(B(t).concat(B(r)),(e=>{const i=t[e],s=r[e];o[e]=!!(n||i||s)})),o},Ue="animationstart",Ve="scroll",Ye=3333333,_e=t=>"rtl"===b(t,"direction"),Xe=t=>t&&(t.height||t.width),We=(e,n,o)=>{const{Ot:r=!1,At:i=!1}=o||{},{P:l}=xe(),a=Y(`
`)[0],d=a.firstChild,u=_e.bind(0,a),[f]=t({o:void 0,_:!0,u:(t,e)=>!(!t||!Xe(t)&&Xe(e))}),h=t=>{const e=s(t)&&t.length>0&&c(t[0]),o=!e&&function(t){return"boolean"==typeof t}(t[0]);let i=!1,d=!1,u=!0;if(e){const[e,,n]=f(t.pop().contentRect),o=Xe(e),r=Xe(n);i=!n||!o,d=!r&&o,u=!i}else o?[,u]=t:d=!0===t;if(r&&u){const e=o?t[0]:_e(a);g(a,e?l.n?-Ye:l.i?0:Ye:Ye),y(a,Ye)}i||n({it:!o,$t:o?t:void 0,At:!!d})},p=[];let w,v=!!i&&h;if(tt){const t=new tt(h);t.observe(d),O(p,(()=>{t.disconnect()}))}else{const t=Y(`
`);k(d,t),st(d,ne);const e=t[0],n=e.lastChild,o=e.firstChild,r=null==o?void 0:o.firstChild;let s,c=$t(e),l=c,a=!1;const u=()=>{g(o,Ye),y(o,Ye),g(n,Ye),y(n,Ye)},f=t=>{s=0,a&&(c=l,h(!0===t))},w=t=>{l=$t(e),a=!t||!lt(l,c),t?(Rt(t),a&&!s&&(et(s),s=nt(f))):f(!1===t),u()};O(p,[Et(o,Ve,w),Et(n,Ve,w)]),b(r,{width:Ye,height:Ye}),u(),v=i?w.bind(0,!1):u}if(r){w=t({o:!u()},u);const[e]=w;O(p,Et(a,Ve,(t=>{const n=e(),[o,r]=n;r&&(it(d,"ltr rtl"),st(d,o?"rtl":"ltr"),h(n)),Rt(t)})))}return v&&(st(a,te),O(p,Et(a,Ue,v,{O:!!tt}))),H(e,a),()=>{M(p),U(a)}},qe=(e,n)=>{const o=V(ie),r=[],[i]=t({o:!1}),s=t=>{if(t){const e=i((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=e;o&&n(e)}};if(Q){const t=new Q((t=>{t&&t.length>0&&s(t.pop())}),{root:e});t.observe(o),O(r,(()=>{t.disconnect()}))}else{const t=()=>{const t=$t(o);s(t)};O(r,We(o,t)),t()}return H(e,o),()=>{M(r),U(o)}},Ke=(t,e,n,o)=>{let i=!1;const{Lt:s,It:c,Tt:l,zt:a,Dt:d,Et:u}=o||{},[h,p]=((t,e,n)=>{let o,i=!1;const s=s=>{if(n){const c=n.reduce(((e,n)=>{if(n){const o=n[0],i=n[1],c=i&&o&&(s?s(o):z(o,t));c&&c.length&&i&&r(i)&&O(e,[c,i.trim()],!0)}return e}),[]);f(c,(t=>f(t[0],(n=>{const r=t[1],s=o.get(n);if(s){const t=s[0],e=s[1];t===r&&e()}const c=Et(n,r,(t=>{i?(c(),o.delete(n)):e(t)}));o.set(n,[r,c])}))))}};return n&&(o=new WeakMap,s()),[()=>{i=!0},s]})(t,pt((()=>{i&&n(!0)}),{g:33,p:99}),l),g=c||[],y=(s||[]).concat(g),b=i=>{const s=d||ht,c=u||ht,l=[],h=[];let y=!1,b=!1,v=!1;f(i,(n=>{const{attributeName:i,target:d,type:u,oldValue:f,addedNodes:p}=n,m="attributes"===u,x="childList"===u,$=t===d,A=m&&r(i)?w(d,i):0,L=0!==A&&f!==A,M=S(g,i)>-1&&L;if(e&&!$){const e=!m,r=m&&M,l=r&&a&&I(d,a),u=(l?!s(d,i,f,A):e||r)&&!c(n,!!l,t,o);O(h,p),b=b||u,v=v||x}!e&&$&&L&&!s(d,i,f,A)&&(O(l,i),y=y||M)})),v&&!L(h)&&p((t=>h.reduce(((e,n)=>(O(e,z(t,n)),I(n,t)?O(e,n):e)),[]))),e?b&&n(!1):L(l)&&!y||n(l,y)},v=new Z(b);return v.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:e,childList:e,characterData:e}),i=!0,[()=>{i&&(h(),v.disconnect(),i=!1)},()=>{i&&b(v.takeRecords())}]},Ge=`[${Ut}]`,Je=`.${qt}`,Ze=["tabindex"],Qe=["wrap","cols","rows"],tn=["id","class","style","open"],en=(e,n,c)=>{let l,a,d;const[,h]=n,{B:p,U:g,$:y,K:b,nt:v,et:m,ot:x}=e,{T:$,M:O}=xe(),[A]=t({u:lt,o:{w:0,h:0}},(()=>{const t=m(Zt,_t);t&&x(Zt,_t);const e=Ot(y),n=Ot(g),o=At(g);return t&&x(Zt,_t,!0),{w:n.w+e.w+o.w,h:n.h+e.h+o.h}})),L=b?Qe:tn.concat(Qe),M=pt(c,{g:()=>l,p:()=>a,v(t,e){const[n]=t,[o]=e;return[B(n).concat(B(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),C=t=>{f(t||Ze,(t=>{if(S(Ze,t)>-1){const e=w(p,t);r(e)?w(g,t,e):R(g,t)}}))},E=({it:t,$t:e,At:n})=>{const o=!t||n?c:M;let r=!1;if(e){const[t,n]=e;r=n,h({lt:t})}o({it:t,ut:r})},T=t=>{const[,e]=A();e&&(t?c:M)({rt:!0})},z=(y||!O)&&qe(p,(t=>{const[e,n]=t;h({st:e}),c({ct:n})})),I=!v&&We(p,E,{At:!0,Ot:!$}),[P]=Ke(p,!1,((t,e)=>{e?M({bt:!0}):v||C(t)}),{It:tn,Lt:tn.concat(Ze)}),N=v&&new tt(E.bind(0,{it:!0}));return N&&N.observe(p),C(),[t=>{const[e]=t("updating.ignoreMutation"),[n,r]=t("updating.attributes"),[c,f]=t("updating.elementEvents"),[h,p]=t("updating.debounce"),w=t=>i(e)&&e(t);if((f||r)&&(d&&(d[1](),d[0]()),d=Ke(y||g,!0,T,{It:L.concat(n||[]),Lt:L.concat(n||[]),Tt:c,zt:Ge,Et:(t,e)=>{const{target:n,attributeName:o}=t;return!(e||!o)&&((t,e,n)=>{const o=t&&j(t,e),r=t&&((t,e)=>{const n=e?u(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r||o!==t&&r!==t&&j(j(t,n),e)===o)})(n,Ge,Je)||!!w(t)}})),p)if(M.m(),s(h)){const t=h[0],e=h[1];l=!!o(t)&&t,a=!!o(e)&&e}else o(h)?(l=h,a=!1):(l=!1,a=!1)},()=>{d&&d[0](),z&&z(),I&&I(),N&&N.disconnect(),P()}]},nn={A:{t:0,r:0,b:0,l:0},ft:!1,dt:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},yt:{x:0,y:0},vt:{x:"hidden",y:"hidden"},St:{x:!1,y:!1},st:!1,lt:!1},on=t=>{const e=V(`${se} ${t}`),n=V(ae),o=V(de);return k(e,n),k(n,o),{Nt:e,Rt:n,Ht:o}},rn={},sn="__osOptionsValidationPlugin",cn=new Set,ln=new WeakMap,an=(t,e,n)=>{let r=!1;const{H:s,I:c,j:l}=xe(),a=h({},rn),u=d(t)?t:t.target,p=(t=>ln.get(t))(u);if(p)return p;const w=a[sn],b=t=>{const e=t||{},n=w&&w.Bt;return n?n(e,!0):e},v=h({},s(),b(e)),[m,x,$]=Pt(n),[S,O,A]=((t,e)=>{const n=jt(e,{}),r=Dt(nn),[i,s,c]=Pt(),[l]=r,[a,d,u]=Be(t),p=((t,e)=>{const{U:n}=t,{T:r,I:i,M:s}=xe(),c=!r&&(i.x||i.y),l=[Ee(t,e),Re(t,e),He(t,e)];return(t,e,r)=>{const i=Fe(h({it:!1,_t:!1,ut:!1,ct:!1,xt:!1,Ct:!1,bt:!1,rt:!1},e),{},r),a=c||!s,d=a&&g(n),u=a&&y(n);let p=i;return f(l,(e=>{p=Fe(p,e(p,t,!!r)||{},r)})),o(d)&&g(n,d),o(u)&&y(n,u),p}})(a,r),[w,b]=en(a,r,(t=>{c("u",[p(n,t),{},!1])})),v=l.bind(0);return v.Pt=t=>{i("u",t)},v.Mt=d,v.jt=a,[(t,n)=>{const o=jt(e,t,n);w(o),c("u",[p(o,{},n),t,!!n])},v,()=>{s(),b(),u()}]})(t,v),[L,M,C]=((t,e,n)=>{const o=Dt({}),[r]=o,[i,s,c]=((t,e)=>{const{N:n}=xe(),{Ft:o}=n(),{Y:r,B:i,U:s,tt:c}=e,l=!c&&t.scrollbarsSlot,a=Oe([r,i,s],(()=>i),o,l),d=on(ce),u=on(le),{Nt:f}=d,{Nt:h}=u;return[{kt:d,Vt:u},()=>{k(a,f),k(a,h)},U.bind(0,[f,h])]})(t,n),l=r.bind(0);return l.jt=i,l.Mt=s,[(t,n)=>{const o=jt(e,t,n);console.log(o)},l,()=>{c()}]})(t,v,O.jt),E=(t,e)=>{S(t,e),L(t,e)},R=l(E.bind(0,{},!0)),T=t=>{(t=>{ln.delete(t),cn.delete(t)})(u),R(),C(),A(),r=!0,$("destroyed",[z,!!t]),x()},z={options(t){if(t){const e=he(v,b(t));(function(t){for(const e in t)return!1;return!0})(e)||(h(v,e),E(e))}return h({},v)},on:m,off:x,state(){const{yt:t,vt:e,St:n,A:o,ft:i}=O();return h({},{overflowAmount:t,overflowStyle:e,hasOverflow:n,padding:o,paddingAbsolute:i,destroyed:r})},elements(){const{Y:t,B:e,A:n,U:o,$:r}=O.jt;return h({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update:t=>(E({},t),z),destroy:T.bind(0)};return c.x&&c.y&&!v.nativeScrollbarsOverlaid.initialize?(T(!0),z):(f(B(a),(t=>{const e=a[t];i(e)&&e(an,z)})),O.Mt(),M.Mt(),((t,e)=>{ln.set(t,e),cn.add(t)})(u,z),$("initialized",[z]),O.Pt(((t,e,n)=>{const{it:o,ut:r,ct:i,xt:s,Ct:c,rt:l,bt:a}=t;$("updated",[z,{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowAmountChanged:s,overflowStyleChanged:c,contentMutation:l,hostMutation:a},changedOptions:e,force:n}])})),z.update(!0))};an.plugin=t=>f(s(t)?t:[t],(t=>{rn[t[0]]=t[1]})),an.env=()=>{const{L:t,I:e,T:n,P:o,M:r,D:i,k:s,V:c,N:l,R:a,H:d,F:u}=xe();return h({},{scrollbarSize:t,scrollbarIsOverlaid:e,scrollbarStyling:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,defaultInitializationStrategy:s,defaultDefaultOptions:c,getInitializationStrategy:l,setInitializationStrategy:a,getDefaultOptions:d,setDefaultOptions:u})};export{an as default}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 95b0889..a397c63 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -98,7 +98,7 @@ r = {}; } each(o, (function(a) { - each(c(a), (function(e) { + each(l(a), (function(e) { var t = a[e]; if (r === t) { return true; @@ -158,7 +158,7 @@ } return n; } - each(c(a), (function(e) { + each(l(a), (function(e) { return or(r, e, a[e]); })); } @@ -206,10 +206,10 @@ var s = function hasOwnProperty(r, a) { return Object.prototype.hasOwnProperty.call(r, a); }; - var c = function keys(r) { + var l = function keys(r) { return r ? Object.keys(r) : []; }; - var l = function attrClass(r, a, e, t) { + var c = function attrClass(r, a, e, t) { var n = attr(r, a) || ""; var i = new Set(n.split(" ")); i[t ? "add" : "delete"](e); @@ -372,8 +372,8 @@ var V = j("MutationObserver"); var B = j("IntersectionObserver"); var k = j("ResizeObserver"); - var U = j("cancelAnimationFrame"); - var H = j("requestAnimationFrame"); + var H = j("cancelAnimationFrame"); + var U = j("requestAnimationFrame"); var q = /[^\x20\t\r\n\f]+/g; var W = function classListAction(r, a, e) { var t; @@ -434,7 +434,7 @@ }; var rr = function clearTimeouts(r) { r && window.clearTimeout(r); - r && U(r); + r && H(r); }; var ar = function noop() {}; var er = function debounce(r, a) { @@ -443,8 +443,8 @@ var n; var i; var v = a || {}, u = v.g, f = v.p, s = v.m; - var c = window.setTimeout; - var l = function invokeFunctionToDebounce(a) { + var l = window.setTimeout; + var c = function invokeFunctionToDebounce(a) { rr(e); rr(t); t = e = n = void 0; @@ -455,7 +455,7 @@ }; var g = function flush() { if (e) { - l(d(i) || i); + c(d(i) || i); } }; var p = function debouncedFn() { @@ -465,18 +465,18 @@ if (v) { var s = isFunction(f) ? f() : f; var p = isNumber(s) && s >= 0; - var h = a > 0 ? c : H; + var h = a > 0 ? l : U; var w = d(r); var y = w || r; - var m = l.bind(0, y); + var m = c.bind(0, y); rr(e); e = h(m, a); if (p && !t) { - t = c(g, s); + t = l(g, s); } n = i = y; } else { - l(r); + c(r); } }; p._ = g; @@ -533,13 +533,13 @@ h: window.innerHeight }; }; - var cr = function offsetSize(r) { + var lr = function offsetSize(r) { return r ? { w: r.offsetWidth, h: r.offsetHeight } : fr; }; - var lr = function clientSize(r) { + var cr = function clientSize(r) { return r ? { w: r.clientWidth, h: r.clientHeight @@ -590,7 +590,7 @@ var o = t && t.C || false; var u = t && t.O || false; var s = []; - var c = n ? { + var l = n ? { passive: i, capture: o } : o; @@ -600,7 +600,7 @@ e && e(n); } : e; v(s, mr.bind(null, r, a, t, o)); - r.addEventListener(a, t, c); + r.addEventListener(a, t, l); })); return f.bind(0, s); }; @@ -651,21 +651,18 @@ }), e); return removeEvent.bind(0, r, e); } - function triggerEvent(r) { - for (var e = arguments.length, t = new Array(e > 1 ? e - 1 : 0), n = 1; n < e; n++) { - t[n - 1] = arguments[n]; - } - var i = a.get(r); - each(o(i), (function(r) { - if (t) { - r(t); + function triggerEvent(r, e) { + var t = a.get(r); + each(o(t), (function(r) { + if (e && !u(e)) { + r.apply(0, e); } else { r(); } })); } var a = new Map; - var e = c(r); + var e = l(r); each(e, (function(a) { addEvent(a, r[a]); })); @@ -700,8 +697,8 @@ var Vr = "os-padding"; var Br = "os-viewport"; var kr = Br + "-arrange"; - var Ur = "os-content"; - var Hr = Br + "-scrollbar-styled"; + var Hr = "os-content"; + var Ur = Br + "-scrollbar-styled"; var qr = "os-overflow-visible"; var Wr = "os-size-observer"; var Gr = Wr + "-appear"; @@ -750,7 +747,7 @@ }; var ia = function getOptionsDiff(r, a) { var e = {}; - var t = c(a).concat(c(r)); + var t = l(a).concat(l(r)); each(t, (function(t) { var n = r[t]; var i = a[t]; @@ -781,24 +778,24 @@ }; var sa = function getNativeScrollbarSize(r, a, e) { O(r, a); - var t = lr(a); - var n = cr(a); + var t = cr(a); + var n = lr(a); var i = gr(e); return { x: n.h - t.h + i.h, y: n.w - t.w + i.w }; }; - var ca = function getNativeScrollbarStyling(r) { + var la = function getNativeScrollbarStyling(r) { var a = false; - var e = Y(r, Hr); + var e = Y(r, Ur); try { a = "none" === style(r, F("scrollbar-width")) || "none" === window.getComputedStyle(r, "::-webkit-scrollbar").getPropertyValue("display"); } catch (t) {} e(); return a; }; - var la = function getRtlScrollBehavior(r, a) { + var ca = function getRtlScrollBehavior(r, a) { var e = "hidden"; style(r, { overflowX: e, @@ -843,11 +840,11 @@ v: sa(a, t, n), o: K }), f = u[0], s = u[1]; - var c = s(), l = c[0]; - var d = ca(t); + var l = s(), c = l[0]; + var d = la(t); var p = { - x: 0 === l.x, - y: 0 === l.y + x: 0 === c.x, + y: 0 === c.y }; var h = { A: !d, @@ -855,11 +852,11 @@ }; var w = assignDeep({}, na); var y = { - L: l, + L: c, I: p, T: d, M: "-1" === style(t, "zIndex"), - P: la(t, n), + P: ca(t, n), R: da(t, n), N: function _addListener(r) { return v("_", r); @@ -873,7 +870,7 @@ assignDeep(w, r); }, k: assignDeep({}, h), - U: assignDeep({}, w) + H: assignDeep({}, w) }; g(t, "style"); E(t); @@ -899,9 +896,9 @@ }; var u = ga(); var s = i.w > 2 && i.h > 2; - var c = !fa(v.w, v.h); - var l = u !== b && b > 0; - var d = s && c && l; + var l = !fa(v.w, v.h); + var c = u !== b && b > 0; + var d = s && l && c; if (d) { var g = f(sa(a, t, n)), p = g[0], h = g[1]; assignDeep(va.L, p); @@ -957,7 +954,7 @@ }; var Aa = function createStructureSetupElements(r) { var a = ha(), e = a.F, t = a.T; - var n = e(), o = n.H, u = n.q, s = n.A, p = n.D; + var n = e(), o = n.U, u = n.q, s = n.A, p = n.D; var h = isHTMLElement(r); var w = r; var _ = h ? r : w.target; @@ -975,7 +972,7 @@ var R = P === _; var N = { W: _, - H: S ? T(_a, o, w.host) : _, + U: S ? T(_a, o, w.host) : _, q: P, A: !R && M(_a, s, w.padding), D: !R && M(_a, p, w.content), @@ -992,63 +989,65 @@ return R ? d(P, Pr, a) : G(P, r); }, tr: function _viewportAddRemoveClass(r, a, e) { - return R ? l(P, Pr, a, e) : (e ? Y : X)(P, r); + return R ? c(P, Pr, a, e) : (e ? Y : X)(P, r); } }; - var F = c(N).reduce((function(r, a) { + var F = l(N).reduce((function(r, a) { var e = N[a]; return v(r, e && !b(e) ? e : false); }), []); var j = function elementIsGenerated(r) { return r ? i(F, r) > -1 : null; }; - var V = N.W, B = N.H, U = N.A, H = N.q, q = N.D, W = N.G; + var V = N.W, B = N.U, H = N.A, U = N.q, q = N.D, W = N.G; var $ = []; var J = S && j(B); - var K = S ? V : m([ q, H, U, B, V ].find((function(r) { + var K = S ? V : m([ q, U, H, B, V ].find((function(r) { return false === j(r); }))); - var Z = q || H; - var Q = Oa(B, R ? "viewport" : "host"); - var rr = Y(U, Vr); - var ar = Y(H, !R && Br); - var er = Y(q, Ur); - if (J) { - D(V, B); + var Z = q || U; + var Q = function appendElements() { + var r = Oa(B, R ? "viewport" : "host"); + var a = Y(H, Vr); + var e = Y(U, !R && Br); + var n = Y(q, Hr); + if (J) { + D(V, B); + v($, (function() { + D(B, V); + E(B); + })); + } + O(Z, K); + O(B, H); + O(H || B, !R && U); + O(U, q); v($, (function() { - D(B, V); - E(B); + r(); + g(U, Rr); + g(U, Nr); + if (j(q)) { + Sa(q); + } + if (j(U)) { + Sa(U); + } + if (j(H)) { + Sa(H); + } + a(); + e(); + n(); })); - } - O(Z, K); - O(B, U); - O(U || B, !R && H); - O(H, q); - v($, (function() { - Q(); - g(H, Rr); - g(H, Nr); - if (j(q)) { - Sa(q); + if (t && !R) { + v($, X.bind(0, U, Ur)); } - if (j(H)) { - Sa(H); + if (W) { + x(U, W); + v($, E.bind(0, W)); } - if (j(U)) { - Sa(U); - } - rr(); - ar(); - er(); - })); - if (t && !R) { - v($, X.bind(0, H, Hr)); - } - if (W) { - x(H, W); - v($, E.bind(0, W)); - } - return [ N, f.bind(0, $) ]; + }; + return [ N, Q, f.bind(0, $) ]; }; var xa = function createTrinsicUpdate(r, a) { var e = r.D; @@ -1071,48 +1070,48 @@ }; var Da = function createPaddingUpdate(r, a) { var e = a[0], t = a[1]; - var n = r.H, i = r.A, v = r.q, o = r.ar; + var n = r.U, i = r.A, v = r.q, o = r.ar; var u = createCache({ o: Z, v: ur() }, ur.bind(0, n, "padding", "")), f = u[0], s = u[1]; return function(r, a, n) { - var u = s(n), c = u[0], l = u[1]; + var u = s(n), l = u[0], c = u[1]; var d = ha(), g = d.T, p = d.R; var h = e(), w = h.sr; - var y = r.vr, m = r.ur, b = r.cr; + var y = r.vr, m = r.ur, b = r.lr; var _ = a("paddingAbsolute"), S = _[0], C = _[1]; var O = !p && m; - if (y || l || O) { + if (y || c || O) { var A = f(n); - c = A[0]; - l = A[1]; + l = A[0]; + c = A[1]; } - var x = !o && (C || b || l); + var x = !o && (C || b || c); if (x) { var D = !S || !i && !g; - var E = c.r + c.l; - var z = c.t + c.b; + var E = l.r + l.l; + var z = l.t + l.b; var L = { marginRight: D && !w ? -E : 0, marginBottom: D ? -z : 0, marginLeft: D && w ? -E : 0, - top: D ? -c.t : 0, - right: D ? w ? -c.r : "auto" : 0, - left: D ? w ? "auto" : -c.l : 0, + top: D ? -l.t : 0, + right: D ? w ? -l.r : "auto" : 0, + left: D ? w ? "auto" : -l.l : 0, width: D ? "calc(100% + " + E + "px)" : "" }; var I = { - paddingTop: D ? c.t : 0, - paddingRight: D ? c.r : 0, - paddingBottom: D ? c.b : 0, - paddingLeft: D ? c.l : 0 + paddingTop: D ? l.t : 0, + paddingRight: D ? l.r : 0, + paddingBottom: D ? l.b : 0, + paddingLeft: D ? l.l : 0 }; style(i || v, L); style(v, I); t({ - A: c, - lr: !D, + A: l, + cr: !D, dr: i ? I : assignDeep({}, L, I) }); } @@ -1158,7 +1157,7 @@ }; var Fa = function createOverflowUpdate(r, a) { var e = a[0], t = a[1]; - var n = r.H, i = r.A, v = r.q, o = r.G, u = r.ar, f = r.tr; + var n = r.U, i = r.A, v = r.q, o = r.G, u = r.ar, f = r.tr; var s = ha(), d = s.L, g = s.R, p = s.T, h = s.I; var w = !u && !p && (h.x || h.y); var y = createCache(Ta, gr.bind(0, v)), m = y[0], b = y[1]; @@ -1170,15 +1169,15 @@ height: "" }); if (a) { - var t = e(), i = t.lr, o = t.A; + var t = e(), i = t.cr, o = t.A; var u = r.pr, f = r.hr; var s = gr(n); - var c = lr(n); - var l = "content-box" === style(v, "boxSizing"); - var d = i || l ? o.b + o.t : 0; - var g = !(h.x && l); + var l = cr(n); + var c = "content-box" === style(v, "boxSizing"); + var d = i || c ? o.b + o.t : 0; + var g = !(h.x && c); style(v, { - height: c.h + s.h + (u.x && g ? f.x : 0) - d + height: l.h + s.h + (u.x && g ? f.x : 0) - d }); } }; @@ -1190,19 +1189,19 @@ var u = "scroll" === o; var f = t ? e : n; var s = u && !p ? f : 0; - var c = t && !!e; - return [ i, u, s, c ]; + var l = t && !!e; + return [ i, u, s, l ]; }; var n = t("overflowX", h.x, d.x), i = n[0], o = n[1], u = n[2], f = n[3]; - var s = t("overflowY", h.y, d.y), c = s[0], l = s[1], g = s[2], w = s[3]; + var s = t("overflowY", h.y, d.y), l = s[0], c = s[1], g = s[2], w = s[3]; return { wr: { x: i, - y: c + y: l }, pr: { x: o, - y: l + y: c }, hr: { x: u, @@ -1230,7 +1229,7 @@ if (w) { var i = e(), u = i.dr; var f = r.hr, s = r.yr; - var c = s.x, l = s.y; + var l = s.x, c = s.y; var d = f.x, g = f.y; var p = n ? "paddingRight" : "paddingLeft"; var h = u[p]; @@ -1238,8 +1237,8 @@ var m = a.w + t.w; var b = a.h + t.h; var _ = { - w: g && l ? g + m - h + "px" : "", - h: d && c ? d + b - y + "px" : "" + w: g && c ? g + m - h + "px" : "", + h: d && l ? d + b - y + "px" : "" }; if (o) { var S = o.sheet; @@ -1267,13 +1266,13 @@ var i = r.hr, v = r.yr; var o = v.x, u = v.y; var f = i.x, s = i.y; - var c = e(), l = c.dr; + var l = e(), c = l.dr; var d = a ? "marginLeft" : "marginRight"; var g = a ? "paddingLeft" : "paddingRight"; - var p = l[d]; - var h = l.marginBottom; - var w = l[g]; - var y = l.paddingBottom; + var p = c[d]; + var h = c.marginBottom; + var w = c[g]; + var y = c.paddingBottom; n.width = "calc(100% + " + (s + -1 * p) + "px)"; n[d] = -s + p; n.marginBottom = -f + h; @@ -1288,10 +1287,10 @@ var i = e(), o = i.dr; var u = n.yr; var f = u.x, s = u.y; - var l = {}; + var c = {}; var d = function assignProps(r) { return each(r.split(" "), (function(r) { - l[r] = o[r]; + c[r] = o[r]; })); }; if (f) { @@ -1300,12 +1299,12 @@ if (s) { d("marginLeft marginRight paddingLeft paddingRight"); } - var p = style(v, c(l)); + var p = style(v, l(c)); X(v, kr); if (!g) { - l.height = ""; + c.height = ""; } - style(v, l); + style(v, c); return [ function() { M(n, a, w, p); style(v, p); @@ -1315,12 +1314,12 @@ return [ ar ]; }; return function(r, a, o) { - var s = r.vr, c = r.mr, d = r.ur, w = r.gr, y = r.ir, _ = r.cr; + var s = r.vr, l = r.mr, d = r.ur, w = r.gr, y = r.ir, _ = r.lr; var O = e(), D = O.nr, R = O.sr; var N = a("nativeScrollbarsOverlaid.show"), F = N[0], j = N[1]; var V = a("overflow"), B = V[0], k = V[1]; - var U = F && h.x && h.y; - var H = !u && !g && (s || d || c || j || y); + var H = F && h.x && h.y; + var U = !u && !g && (s || d || l || j || y); var q = Na(B.x); var W = Na(B.y); var G = q || W; @@ -1329,25 +1328,25 @@ var $ = x(o); var J; if (j && p) { - f(Hr, jr, !U); + f(Ur, jr, !H); } - if (H) { - J = L(U); + if (U) { + J = L(H); z(J, D); } if (s || w || d || _ || j) { if (G) { f(qr, Fr, false); } - var K = P(U, R, J), Z = K[0], Q = K[1]; + var K = P(H, R, J), Z = K[0], Q = K[1]; var rr = X = m(o), ar = rr[0], er = rr[1]; var tr = Y = S(o), nr = tr[0], ir = tr[1]; - var vr = lr(v); + var vr = cr(v); var or = nr; var ur = vr; Z(); - if ((ir || er || j) && Q && !U && T(Q, nr, ar, R)) { - ur = lr(v); + if ((ir || er || j) && Q && !H && T(Q, nr, ar, R)) { + ur = cr(v); or = dr(v); } $ = A(Pa({ @@ -1358,7 +1357,7 @@ h: ur.h + Ea(0, vr.h - nr.h) }, ar), o); } - var fr = $, sr = fr[0], cr = fr[1]; + var fr = $, sr = fr[0], lr = fr[1]; var gr = Y, pr = gr[0], hr = gr[1]; var wr = X, yr = wr[0], mr = wr[1]; var br = { @@ -1366,7 +1365,7 @@ y: sr.h > 0 }; var _r = q && W && (br.x || br.y) || q && br.x && !br.y || W && br.y && !br.x; - if (w || _ || mr || hr || cr || k || j || H) { + if (w || _ || mr || hr || lr || k || j || U) { var Sr = { marginRight: 0, marginBottom: 0, @@ -1375,12 +1374,12 @@ overflowY: "", overflowX: "" }; - var Cr = I(U, br, B, Sr); + var Cr = I(H, br, B, Sr); var Or = T(Cr, pr, yr, R); if (!u) { M(Cr, R, Or, Sr); } - if (H) { + if (U) { z(Cr, D); } if (u) { @@ -1390,10 +1389,10 @@ style(v, Sr); } } - l(n, Pr, Fr, _r); + c(n, Pr, Fr, _r); Ra(i, qr, _r); !u && Ra(v, qr, G); - var Ar = E(L(U).wr), xr = Ar[0], Dr = Ar[1]; + var Ar = E(L(H).wr), xr = Ar[0], Dr = Ar[1]; t({ wr: xr, br: { @@ -1404,14 +1403,14 @@ }); return { Sr: Dr, - Cr: cr + Cr: lr }; }; }; var ja = function prepareUpdateHints(r, a, e) { var t = {}; var n = a || {}; - var i = c(r).concat(c(n)); + var i = l(r).concat(l(n)); each(i, (function(a) { var i = r[a]; var v = n[a]; @@ -1428,7 +1427,7 @@ var n = ja(assignDeep({ vr: false, gr: false, - cr: false, + lr: false, ir: false, Cr: false, Sr: false, @@ -1438,9 +1437,9 @@ var i = o || !v; var f = i && scrollLeft(e); var s = i && scrollTop(e); - var c = n; + var l = n; each(u, (function(a) { - c = ja(c, a(c, r, !!t) || {}, t); + l = ja(l, a(l, r, !!t) || {}, t); })); if (isNumber(f)) { scrollLeft(e, f); @@ -1448,13 +1447,13 @@ if (isNumber(s)) { scrollTop(e, s); } - return c; + return l; }; }; var Ba = "animationstart"; var ka = "scroll"; - var Ua = 3333333; - var Ha = function getElmDirectionIsRTL(r) { + var Ha = 3333333; + var Ua = function getElmDirectionIsRTL(r) { return "rtl" === style(r, "direction"); }; var qa = function domRectHasDimensions(r) { @@ -1462,11 +1461,11 @@ }; var Wa = function createSizeObserver(r, a, e) { var t = e || {}, n = t.Or, i = void 0 === n ? false : n, o = t.Ar, u = void 0 === o ? false : o; - var s = ha(), c = s.P; - var l = L('
'); - var d = l[0]; + var s = ha(), l = s.P; + var c = L('
'); + var d = c[0]; var g = d.firstChild; - var p = Ha.bind(0, d); + var p = Ua.bind(0, d); var h = createCache({ v: void 0, u: true, @@ -1482,10 +1481,10 @@ var o = true; if (e) { var u = w(r.pop().contentRect), f = u[0], s = u[2]; - var l = qa(f); + var c = qa(f); var g = qa(s); - n = !s || !l; - v = !g && l; + n = !s || !c; + v = !g && c; o = !n; } else if (t) { o = r[1]; @@ -1493,9 +1492,9 @@ v = true === r; } if (i && o) { - var p = t ? r[0] : Ha(d); - scrollLeft(d, p ? c.n ? -Ua : c.i ? 0 : Ua : Ua); - scrollTop(d, Ua); + var p = t ? r[0] : Ua(d); + scrollLeft(d, p ? l.n ? -Ha : l.i ? 0 : Ha : Ha); + scrollTop(d, Ha); } if (!n) { a({ @@ -1522,15 +1521,15 @@ var D = x.lastChild; var z = x.firstChild; var I = null == z ? void 0 : z.firstChild; - var T = cr(x); + var T = lr(x); var M = T; var P = false; var R; var N = function reset() { - scrollLeft(z, Ua); - scrollTop(z, Ua); - scrollLeft(D, Ua); - scrollTop(D, Ua); + scrollLeft(z, Ha); + scrollTop(z, Ha); + scrollLeft(D, Ha); + scrollTop(D, Ha); }; var F = function onResized(r) { R = 0; @@ -1540,13 +1539,13 @@ } }; var j = function onScroll(r) { - M = cr(x); + M = lr(x); P = !r || !J(M, T); if (r) { Cr(r); if (P && !R) { - U(R); - R = H(F); + H(R); + R = U(F); } } else { F(false === r); @@ -1555,8 +1554,8 @@ }; v(m, [ br(z, ka, j), br(D, ka, j) ]); style(I, { - width: Ua, - height: Ua + width: Ha, + height: Ha }); N(); b = u ? j.bind(0, false) : N; @@ -1625,7 +1624,7 @@ })); } else { var s = function onSizeChanged() { - var r = cr(e); + var r = lr(e); o(r); }; v(t, Wa(e, s)); @@ -1688,7 +1687,7 @@ }; var $a = function createDOMObserver(r, a, e, t) { var n = false; - var o = t || {}, f = o.Er, s = o.zr, c = o.Lr, l = o.Ir, d = o.Tr, g = o.Mr; + var o = t || {}, f = o.Er, s = o.zr, l = o.Lr, c = o.Ir, d = o.Tr, g = o.Mr; var p = Ya(r, er((function() { if (n) { e(true); @@ -1696,7 +1695,7 @@ }), { g: 33, p: 99 - }), c), w = p[0], m = p[1]; + }), l), w = p[0], m = p[1]; var b = f || []; var _ = s || []; var S = b.concat(_); @@ -1704,7 +1703,7 @@ var o = d || ar; var f = g || ar; var s = []; - var c = []; + var l = []; var p = false; var w = false; var b = false; @@ -1719,10 +1718,10 @@ if (a && !C) { var D = !m; var E = m && x; - var z = E && l && y(u, l); + var z = E && c && y(u, c); var L = z ? !o(u, n, g, O) : D || E; var I = L && !f(e, !!z, r, t); - v(c, h); + v(l, h); w = w || I; b = b || S; } @@ -1731,9 +1730,9 @@ p = p || x; } })); - if (b && !u(c)) { + if (b && !u(l)) { m((function(r) { - return c.reduce((function(a, e) { + return l.reduce((function(a, e) { v(a, h(r, e)); return y(e, r) ? v(a, e) : a; }), []); @@ -1777,7 +1776,7 @@ var n; var v; var o = a[1]; - var u = r.H, f = r.q, s = r.D, l = r.K, d = r.ar, p = r.er, h = r.tr; + var u = r.U, f = r.q, s = r.D, c = r.K, d = r.ar, p = r.er, h = r.tr; var w = ha(), y = w.T, m = w.R; var b = createCache({ o: J, @@ -1797,7 +1796,7 @@ h: e.h + a.h + t.h }; })), _ = b[0]; - var C = l ? Qa : re.concat(Qa); + var C = c ? Qa : re.concat(Qa); var O = er(e, { g: function _timeout() { return t; @@ -1808,7 +1807,7 @@ m: function _mergeParams(r, a) { var e = r[0]; var t = a[0]; - return [ c(e).concat(c(t)).reduce((function(r, a) { + return [ l(e).concat(l(t)).reduce((function(r, a) { r[a] = e[a] || t[a]; return r; }), {}) ]; @@ -1848,7 +1847,7 @@ } i({ vr: a, - cr: v + lr: v }); }; var E = function onContentMutation(r) { @@ -1886,7 +1885,7 @@ return [ function(r) { var a = r("updating.ignoreMutation"), e = a[0]; var i = r("updating.attributes"), o = i[0], u = i[1]; - var c = r("updating.elementEvents"), l = c[0], d = c[1]; + var l = r("updating.elementEvents"), c = l[0], d = l[1]; var g = r("updating.debounce"), p = g[0], h = g[1]; var w = d || u; var y = function ignoreMutationFromOptions(r) { @@ -1900,7 +1899,7 @@ v = $a(s || f, true, E, { zr: C.concat(o || []), Er: C.concat(o || []), - Lr: l, + Lr: c, Ir: Ja, Mr: function _ignoreContentChange(r, a) { var e = r.target, t = r.attributeName; @@ -1939,7 +1938,7 @@ b: 0, l: 0 }, - lr: false, + cr: false, dr: { marginRight: 0, marginBottom: 0, @@ -1967,29 +1966,27 @@ var te = function createStructureSetup(r, a) { var e = zr(a, {}); var t = Lr(ee); - var n = new Set; - var i = t[0]; - var v = function runOnUpdatedListeners(r, a, e) { - f(n, [ r, a || {}, !!e ]); + var n = Dr(), i = n[0], v = n[1], o = n[2]; + var u = t[0]; + var f = Aa(r), s = f[0], l = f[1], c = f[2]; + var d = Va(s, t); + var g = ae(s, t, (function(r) { + o("u", [ d(e, r), {}, false ]); + })), p = g[0], h = g[1]; + var w = u.bind(0); + w.Pr = function(r) { + i("u", r); }; - var o = Aa(r), u = o[0], s = o[1]; - var c = Va(u, t); - var l = ae(u, t, (function(r) { - v(c(e, r)); - })), d = l[0], g = l[1]; - var p = i.bind(0); - p.Pr = function(r) { - n.add(r); - }; - p.Rr = u; + w.Rr = l; + w.Nr = s; return [ function(r, e) { var t = zr(a, r, e); - d(t); - v(c(t, {}, e)); - }, p, function() { - n.clear(); - g(); - s(); + p(t); + o("u", [ d(t, {}, e), r, !!e ]); + }, w, function() { + v(); + h(); + c(); } ]; }; var ne = function generateScrollbarDOM(r) { @@ -1999,41 +1996,44 @@ O(a, e); O(e, t); return { - Nr: a, - Fr: e, - jr: t + Fr: a, + jr: e, + Vr: t }; }; var ie = function createScrollbarsSetupElements(r, a) { var e = ha(), t = e.F; - var n = t(), i = n.Vr; - var v = a.W, o = a.H, u = a.q, f = a.rr; + var n = t(), i = n.Br; + var v = a.W, o = a.U, u = a.q, f = a.rr; var s = !f && r.scrollbarsSlot; - var c = ma([ v, o, u ], (function() { + var l = ma([ v, o, u ], (function() { return o; }), i, s); - var l = ne(Qr); + var c = ne(Qr); var d = ne(ra); - var g = l.Nr; - var p = d.Nr; - O(c, g); - O(c, p); + var g = c.Fr; + var p = d.Fr; + var h = function appendElements() { + O(l, g); + O(l, p); + }; return [ { - Br: l, - kr: d - }, E.bind(0, [ g, p ]) ]; + kr: c, + Hr: d + }, h, E.bind(0, [ g, p ]) ]; }; var ve = function createScrollbarsSetup(r, a, e) { var t = Lr({}); var n = t[0]; - var i = ie(r, e), v = i[0], o = i[1]; - var u = n.bind(0); - u.Rr = v; + var i = ie(r, e), v = i[0], o = i[1], u = i[2]; + var f = n.bind(0); + f.Nr = v; + f.Rr = o; return [ function(r, e) { var t = zr(a, r, e); console.log(t); - }, u, function() { - o(); + }, f, function() { + u(); } ]; }; var oe = {}; @@ -2046,48 +2046,109 @@ })); }; var se = "__osOptionsValidationPlugin"; - var ce = new Set; - var le = new WeakMap; + var le = new Set; + var ce = new WeakMap; var de = function addInstance(r, a) { - le.set(r, a); - ce.add(r); + ce.set(r, a); + le.add(r); }; var ge = function removeInstance(r) { - le.delete(r); ce.delete(r); + le.delete(r); }; var pe = function getInstance(r) { - return le.get(r); + return ce.get(r); }; var he = function OverlayScrollbars(r, a, e) { - var t = ha(), n = t.V, i = t.I, v = t.N; - var o = ue(); - var u = isHTMLElement(r) ? r : r.target; - var f = pe(u); - if (f) { - return f; + var t = false; + var n = ha(), i = n.V, v = n.I, o = n.N; + var u = ue(); + var f = isHTMLElement(r) ? r : r.target; + var s = pe(f); + if (s) { + return s; } - var s = o[se]; - var l = function validateOptions(r) { + var c = u[se]; + var d = function validateOptions(r) { var a = r || {}; - var e = s && s.Ur; + var e = c && c.Ur; return e ? e(a, true) : a; }; - var d = assignDeep({}, n(), l(a)); - var g = Dr(e), p = g[0], h = g[1], w = g[2]; - if (i.x && i.y && !d.nativeScrollbarsOverlaid.initialize) { - w("initializationWithdrawn"); - } - var y = te(r, d), m = y[0], b = y[1], _ = y[2]; - var S = ve(r, d, b.Rr), C = S[0], O = S[2]; - var A = function update(r, a) { - m(r, a); - C(r, a); + var g = assignDeep({}, i(), d(a)); + var p = Dr(e), h = p[0], w = p[1], y = p[2]; + var m = te(r, g), b = m[0], _ = m[1], S = m[2]; + var C = ve(r, g, _.Nr), O = C[0], A = C[1], x = C[2]; + var D = function update(r, a) { + b(r, a); + O(r, a); }; - var x = v(A.bind(0, {}, true)); - b.Pr((function(r, a, e) { - var t = r.vr, n = r.cr, i = r.ir, v = r.Cr, o = r.Sr, u = r.ur, f = r.mr; - w("updated", { + var E = o(D.bind(0, {}, true)); + var z = function destroy(r) { + ge(f); + E(); + x(); + S(); + t = true; + y("destroyed", [ L, !!r ]); + w(); + }; + var L = { + options: function options(r) { + if (r) { + var a = ia(g, d(r)); + if (!isEmptyObject(a)) { + assignDeep(g, a); + D(a); + } + } + return assignDeep({}, g); + }, + on: h, + off: w, + state: function state() { + var r = _(), a = r.br, e = r.wr, n = r._r, i = r.A, v = r.cr; + return assignDeep({}, { + overflowAmount: a, + overflowStyle: e, + hasOverflow: n, + padding: i, + paddingAbsolute: v, + destroyed: t + }); + }, + elements: function elements() { + var r = _.Nr, a = r.W, e = r.U, t = r.A, n = r.q, i = r.D; + return assignDeep({}, { + target: a, + host: e, + padding: t || n, + viewport: n, + content: i || n + }); + }, + update: function update(r) { + D({}, r); + return L; + }, + destroy: z.bind(0) + }; + if (v.x && v.y && !g.nativeScrollbarsOverlaid.initialize) { + z(true); + return L; + } + each(l(u), (function(r) { + var a = u[r]; + if (isFunction(a)) { + a(OverlayScrollbars, L); + } + })); + _.Rr(); + A.Rr(); + de(f, L); + y("initialized", [ L ]); + _.Pr((function(r, a, e) { + var t = r.vr, n = r.lr, i = r.ir, v = r.Cr, o = r.Sr, u = r.ur, f = r.mr; + y("updated", [ L, { updateHints: { sizeChanged: t, directionChanged: n, @@ -2099,67 +2160,13 @@ }, changedOptions: a, force: e - }); + } ]); })); - var D = { - options: function options(r) { - if (r) { - var a = ia(d, l(r)); - if (!isEmptyObject(a)) { - assignDeep(d, a); - A(a); - } - } - return assignDeep({}, d); - }, - on: p, - off: h, - state: function state() { - var r = b(), a = r.br, e = r.wr, t = r._r, n = r.A, i = r.lr; - return assignDeep({}, { - overflowAmount: a, - overflowStyle: e, - hasOverflow: t, - padding: n, - paddingAbsolute: i - }); - }, - elements: function elements() { - var r = b.Rr, a = r.W, e = r.H, t = r.A, n = r.q, i = r.D; - return assignDeep({}, { - target: a, - host: e, - padding: t || n, - viewport: n, - content: i || n - }); - }, - update: function update(r) { - A({}, r); - }, - destroy: function destroy() { - ge(u); - x(); - h(); - O(); - _(); - w("destroyed"); - } - }; - each(c(o), (function(r) { - var a = o[r]; - if (isFunction(a)) { - a(OverlayScrollbars, D); - } - })); - D.update(true); - de(u, D); - w("initialized"); - return D; + return L.update(true); }; he.plugin = fe; he.env = function() { - var r = ha(), a = r.L, e = r.I, t = r.T, n = r.P, i = r.R, v = r.M, o = r.k, u = r.U, f = r.F, s = r.j, c = r.V, l = r.B; + var r = ha(), a = r.L, e = r.I, t = r.T, n = r.P, i = r.R, v = r.M, o = r.k, u = r.H, f = r.F, s = r.j, l = r.V, c = r.B; return assignDeep({}, { scrollbarSize: a, scrollbarIsOverlaid: e, @@ -2171,8 +2178,8 @@ defaultDefaultOptions: u, getInitializationStrategy: f, setInitializationStrategy: s, - getDefaultOptions: c, - setDefaultOptions: l + getDefaultOptions: l, + setDefaultOptions: c }); }; return he; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 3d64cb9..a095a4e 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/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/style.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidation/optionsValidation.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport 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 isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport 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: any[]) => any {\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)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport 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\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\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: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, args?: any[]): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\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 =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\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(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\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): T & U & V & W & X;\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): 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 { from } from 'support/utils/array';\r\nimport { 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 | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): 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 | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): 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 | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !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\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, 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 = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (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): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]\r\n ) => void;\r\n\r\n const events = new Map>();\r\n\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener[]\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n }\r\n\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener[]\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n }\r\n\r\n function triggerEvent(\r\n name: Name,\r\n ...args: EventMap[Name] extends undefined ? [] : [args: EventMap[Name]]\r\n ): void {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args) {\r\n (event as (args: EventMap[keyof EventMap]) => void)(args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n }\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [\r\n typeof addEvent,\r\n typeof removeEvent,\r\n typeof triggerEvent\r\n ];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\nexport interface EnvironmentListenersNameArgsMap {\r\n _: undefined;\r\n}\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarSize: XY;\r\n readonly _nativeScrollbarIsOverlaid: XY;\r\n readonly _nativeScrollbarStyling: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\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) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isFunction, isBoolean, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [targetObj: StructureSetupElementsObj, destroy: () => void];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } =\r\n getEnvironment();\r\n /* istanbul ignore next */\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarStyling;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n hostInitializationStrategy,\r\n targetStructureInitialization.host\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarStyling && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n\r\n return [evaluatedTargetObj, runEach.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n noop,\r\n each,\r\n equalXY,\r\n attrClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportArrange,\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\ntype UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarSize,\r\n _flexboxGlue,\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * 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 { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(_viewport, classNameViewportArrange);\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n 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 type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { runEach } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _addOnUpdatedListener: (listener: OnUpdatedListener) => void;\r\n}\r\n\r\nexport type OnUpdatedListener = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n) => void;\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const onUpdatedListeners = new Set();\r\n const [getState] = state;\r\n const runOnUpdatedListeners = (\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions?: PartialOptions,\r\n force?: boolean\r\n ) => {\r\n runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]);\r\n };\r\n\r\n const [elements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints));\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n onUpdatedListeners.add(listener);\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n runOnUpdatedListeners(updateStructure(checkOption, {}, force));\r\n },\r\n structureSetupState,\r\n () => {\r\n onUpdatedListeners.clear();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [elements: ScrollbarsSetupElementsObj, destroy: () => void];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements);\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { assignDeep, each, isArray } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type OSPluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type OSPlugin = [string, T];\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: OSPlugin | OSPlugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as OSPlugin[], (plugin) => {\r\n pluginRegistry[plugin[0]] = plugin[1];\r\n });\r\n","import { OSPlugin } from 'plugins';\r\nimport { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidation/validation';\r\nimport { PartialOptions } from 'typings';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: OSPlugin = [\r\n optionsValidationPluginName,\r\n {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n];\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n OSPlugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\n/*\r\nonScrollStart : null,\r\nonScroll : null,\r\nonScrollStop : null,\r\nonOverflowChanged : null,\r\nonOverflowAmountChanged : null, // fusion with onOverflowChanged\r\nonDirectionChanged : null, // gone\r\nonContentSizeChanged : null, // gone\r\nonHostSizeChanged : null, // gone\r\n*/\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: OSPlugin | OSPlugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarSize: XY;\r\n scrollbarIsOverlaid: XY;\r\n scrollbarStyling: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport interface EventListenerMap {\r\n initialized: undefined;\r\n initializationWithdrawn: undefined;\r\n updated: OnUpdatedEventListenerArgs;\r\n destroyed: undefined;\r\n}\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): void;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener?: EventListener): void;\r\n off(name: Name, listener?: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n triggerEvent('initializationWithdrawn');\r\n }\r\n\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, , destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n });\r\n });\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: removeEvent,\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n },\r\n destroy: () => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n removeEvent();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n triggerEvent('destroyed');\r\n },\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n instance.update(true);\r\n\r\n addInstance(instanceTarget, instance);\r\n\r\n triggerEvent('initialized');\r\n\r\n return instance;\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarSize: _nativeScrollbarSize,\r\n scrollbarIsOverlaid: _nativeScrollbarIsOverlaid,\r\n scrollbarStyling: _nativeScrollbarStyling,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isUndefined","obj","undefined","isNull","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","type","key","cstr","ctor","ctorProto","prototype","hasOwnConstructor","hasOwnProperty","call","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","ElementNodeType","isElement","Element","each","source","callback","i","Object","keys","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","scrollLeft","scrollTop","style","styles","getSingleStyle","getStyles","getStylesResult","computedStyle","getComputedStyle","getCSSVal","reduce","result","setCSSVal","Node","ELEMENT_NODE","toString","replace","toLowerCase","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","Set","forEach","isEmptyArray","runEach","args","runFn","fn","prop","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","removeEvent","eventSet","events","currListener","clear","addEvent","set","triggerEvent","_len","_key","event","Map","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarStyling","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","_updateNativeScrollba","scrollbarSizeChanged","getEnvironment","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","contentArrangeCounter","createNewDiv","unwrap","createUniqueViewportArrangeElement","_getEnvironment","create","addDataAttrHost","createStructureSetupElements","_getEnvironment2","_getInitializationStr","hostInitializationStrategy","_host","viewportInitializationStrategy","_viewport","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","viewport","filter","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","getState","updateHints","_getState","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","height","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_viewportPaddingStyle","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportScrollSize","viewportClientSize","sizeFraction","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","doViewportArrange","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowStyleCache","_createCache4","fixFlexboxGlue","viewportOverflowState","heightIntrinsic","_overflowScroll","_scrollbarsHideOffset","hostClientSize","isContentBox","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","_getStatePerAxis","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","_getStatePerAxis2","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","_scrollbarsHideOffsetArrange","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","_setAxisOverflowStyle","visibleBehaviorX","_setAxisOverflowStyle2","visibleBehaviorY","arrangeViewport","directionIsRTL","_getState2","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","_getState3","viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","_getState4","finalPaddingStyle","assignProps","prevStyle","_hostMutation","_getState5","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_ref$_direction","_ref","_direction","observeDirectionChange","_ref$_appear","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","_createEventContentCh","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","onUpdatedListeners","runOnUpdatedListeners","_createStructureSetup","destroyElements","updateStructure","updateObservers","_createStructureSetup2","destroyObservers","structureSetupState","_addOnUpdatedListener","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","environmentScrollbarSlot","_scrollbarsSlot","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","_createScrollbarsSetu","scrollbarsSetupState","console","log","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","optionsValidationPluginName","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","destroyScrollbars","removeEnvListener","sizeChanged","hostMutation","instance","_structureState","pluginName","pluginInstance","scrollbarIsOverlaid","scrollbarStyling","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/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/style.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/plugins/plugins.ts","../src/plugins/optionsValidation/optionsValidation.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport 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 isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport 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: any[]) => any {\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)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport 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\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\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: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param p1 The first param.\r\n */\r\nexport const runEach = (arr: ArrayLike | Set, args?: any[]): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\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 =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\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(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\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): T & U & V & W & X;\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): 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 { from } from 'support/utils/array';\r\nimport { 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 | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): 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 | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): 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 | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !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\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, 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 = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (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): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from, isEmptyArray } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name]\r\n ) => void;\r\n\r\n const events = new Map>();\r\n\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener[]\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n }\r\n\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener[]\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n }\r\n\r\n function triggerEvent(name: Name, args?: EventMap[Name]): void {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n }\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [\r\n typeof addEvent,\r\n typeof removeEvent,\r\n typeof triggerEvent\r\n ];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarSize: XY;\r\n readonly _nativeScrollbarIsOverlaid: XY;\r\n readonly _nativeScrollbarStyling: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarStyling,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\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) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEach,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameViewportArrange,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _cssCustomProperties } =\r\n getEnvironment();\r\n /* istanbul ignore next */\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarStyling } = getEnvironment();\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarStyling;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n hostInitializationStrategy,\r\n targetStructureInitialization.host\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange: !viewportIsTarget && createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarStyling && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEach.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n keys,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n noop,\r\n each,\r\n equalXY,\r\n attrClass,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportArrange,\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\ninterface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\ntype UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarSize,\r\n _flexboxGlue,\r\n _nativeScrollbarStyling,\r\n _nativeScrollbarIsOverlaid,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n /**\r\n * Applies a fixed height to the viewport so it can't overflow or underflow the host element.\r\n * @param viewportOverflowState The current overflow state.\r\n * @param heightIntrinsic Whether the host height is intrinsic or not.\r\n */\r\n const fixFlexboxGlue = (\r\n viewportOverflowState: ViewportOverflowState,\r\n heightIntrinsic: boolean\r\n ) => {\r\n style(_viewport, {\r\n height: '',\r\n });\r\n\r\n if (heightIntrinsic) {\r\n const { _paddingAbsolute, _padding: padding } = getState();\r\n const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;\r\n const fSize = fractionalSize(_host);\r\n const hostClientSize = clientSize(_host);\r\n\r\n // padding subtraction is only needed if padding is absolute or if viewport is content-box\r\n const isContentBox = style(_viewport, 'boxSizing') === 'content-box';\r\n const paddingVertical = _paddingAbsolute || isContentBox ? padding.b + padding.t : 0;\r\n const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);\r\n\r\n style(_viewport, {\r\n height:\r\n hostClientSize.h +\r\n fSize.h +\r\n (_overflowScroll.x && subtractXScrollbar ? _scrollbarsHideOffset.x : 0) -\r\n paddingVertical,\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\n const getViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n ): ViewportOverflowState => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarStyling && !showNativeOverlaidScrollbars ? overlaidScrollbarsHideOffset : 0;\r\n const getStatePerAxis = (\r\n styleKey: string,\r\n isOverlaid: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const overflowStyle = style(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n const nonScrollbarStylingHideOffset = isOverlaid ? arrangeHideOffset : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarStyling ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [overflowStyle, overflowScroll, scrollbarsHideOffset, scrollbarsHideOffsetArrange] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean,\r\n scrollbarsHideOffset: number,\r\n scrollbarsHideOffsetArrange: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll, xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowX', _nativeScrollbarIsOverlaid.x, _nativeScrollbarSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarIsOverlaid.y, _nativeScrollbarSize.y);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\n const setViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n ): ViewportOverflowState => {\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) || '';\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj.overflowX = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj.overflowY = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(showNativeOverlaidScrollbars, viewportStyleObj);\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingRight'\r\n : 'paddingLeft';\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue}px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`\r\n : '',\r\n };\r\n\r\n // adjust content arrange / before element\r\n if (_viewportArrange) {\r\n const { sheet } = _viewportArrange;\r\n if (sheet) {\r\n const { cssRules } = sheet;\r\n if (cssRules) {\r\n if (!cssRules.length) {\r\n sheet.insertRule(\r\n `#${attr(_viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,\r\n 0\r\n );\r\n }\r\n\r\n // @ts-ignore\r\n const ruleStyle = cssRules[0].style;\r\n\r\n ruleStyle.width = arrangeSize.w;\r\n ruleStyle.height = arrangeSize.h;\r\n }\r\n }\r\n } else {\r\n style<'--os-vaw' | '--os-vah'>(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * 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 { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const horizontalMarginKey: keyof StyleObject = directionIsRTL ? 'marginLeft' : 'marginRight';\r\n const viewportHorizontalPaddingKey: keyof StyleObject = directionIsRTL\r\n ? 'paddingLeft'\r\n : 'paddingRight';\r\n const horizontalMarginValue = viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = viewportPaddingStyle.marginBottom as number;\r\n const horizontalPaddingValue = viewportPaddingStyle[viewportHorizontalPaddingKey] as number;\r\n const verticalPaddingValue = viewportPaddingStyle.paddingBottom as number;\r\n\r\n // horizontal\r\n viewportStyleObj.width = `calc(100% + ${hideOffsetY + horizontalMarginValue * -1}px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj.marginBottom = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj.paddingBottom = verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const undoViewportArrange = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n ): UndoViewportArrangeResult => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = getState();\r\n const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string) =>\r\n each(props.split(' '), (prop) => {\r\n finalPaddingStyle[prop] = viewportPaddingStyle[prop];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps('marginBottom paddingTop paddingBottom');\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps('marginLeft marginRight paddingLeft paddingRight');\r\n }\r\n\r\n const prevStyle = style(_viewport, keys(finalPaddingStyle));\r\n\r\n removeClass(_viewport, classNameViewportArrange);\r\n\r\n if (!_flexboxGlue) {\r\n finalPaddingStyle.height = '';\r\n }\r\n\r\n style(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n directionIsRTL,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n style(_viewport, prevStyle);\r\n addClass(_viewport, classNameViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ];\r\n }\r\n return [noop];\r\n };\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarStyling) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _nativeScrollbarIsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n runEach,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else {\r\n const observerElementChildren = createDOM(\r\n `
`\r\n );\r\n appendChildren(listenerElement, observerElementChildren);\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollLeft(expandElement, scrollAmount);\r\n scrollTop(expandElement, scrollAmount);\r\n scrollLeft(shrinkElement, scrollAmount);\r\n scrollTop(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallbackProxy(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n\r\n push(offListeners, [\r\n on(expandElement, scrollEventName, onScroll),\r\n on(shrinkElement, scrollEventName, onScroll),\r\n ]);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n appearCallback = observeAppearChange ? onScroll.bind(0, false) : reset;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n 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 type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEach(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [updateStructure(checkOptionsFallback, updateHints), {}, false]);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\r\n );\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { assignDeep, each, isArray } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type OSPluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type OSPlugin = [string, T];\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: OSPlugin | OSPlugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as OSPlugin[], (plugin) => {\r\n pluginRegistry[plugin[0]] = plugin[1];\r\n });\r\n","import { OSPlugin } from 'plugins';\r\nimport { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidation/validation';\r\nimport { PartialOptions } from 'typings';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: OSPlugin = [\r\n optionsValidationPluginName,\r\n {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n];\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n OSPlugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: OSPlugin | OSPlugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarSize: XY;\r\n scrollbarIsOverlaid: XY;\r\n scrollbarStyling: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, withdrawn: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: removeEvent,\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarSize,\r\n _nativeScrollbarIsOverlaid,\r\n _nativeScrollbarStyling,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarSize: _nativeScrollbarSize,\r\n scrollbarIsOverlaid: _nativeScrollbarIsOverlaid,\r\n scrollbarStyling: _nativeScrollbarStyling,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isUndefined","obj","undefined","isNull","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","type","key","cstr","ctor","ctorProto","prototype","hasOwnConstructor","hasOwnProperty","call","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","ElementNodeType","isElement","Element","each","source","callback","i","Object","keys","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","scrollLeft","scrollTop","style","styles","getSingleStyle","getStyles","getStylesResult","computedStyle","getComputedStyle","getCSSVal","reduce","result","setCSSVal","Node","ELEMENT_NODE","toString","replace","toLowerCase","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","Set","forEach","isEmptyArray","runEach","args","runFn","fn","prop","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","removeEvent","eventSet","events","currListener","clear","addEvent","set","triggerEvent","event","Map","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarStyling","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarSize","nativeScrollbarStyling","nativeScrollbarIsOverlaid","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarSize","_nativeScrollbarIsOverlaid","_nativeScrollbarStyling","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","_updateNativeScrollba","scrollbarSizeChanged","getEnvironment","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","contentArrangeCounter","createNewDiv","unwrap","createUniqueViewportArrangeElement","_getEnvironment","create","addDataAttrHost","createStructureSetupElements","_getEnvironment2","_getInitializationStr","hostInitializationStrategy","_host","viewportInitializationStrategy","_viewport","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","viewport","filter","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","getState","updateHints","_getState","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","height","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","width","viewportStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_viewportPaddingStyle","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportScrollSize","viewportClientSize","sizeFraction","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","doViewportArrange","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowStyleCache","_createCache4","fixFlexboxGlue","viewportOverflowState","heightIntrinsic","_overflowScroll","_scrollbarsHideOffset","hostClientSize","isContentBox","subtractXScrollbar","getViewportOverflowState","showNativeOverlaidScrollbars","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","_getStatePerAxis","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","_getStatePerAxis2","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","_scrollbarsHideOffsetArrange","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","_setAxisOverflowStyle","visibleBehaviorX","_setAxisOverflowStyle2","visibleBehaviorY","arrangeViewport","directionIsRTL","_getState2","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","hideNativeScrollbars","viewportArrange","_getState3","viewportPaddingStyle","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","undoViewportArrange","finalViewportOverflowState","_getState4","finalPaddingStyle","assignProps","prevStyle","_hostMutation","_getState5","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","scrollEventName","scrollAmount","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","onSizeChangedCallback","_ref$_direction","_ref","_direction","observeDirectionChange","_ref$_appear","_appear","observeAppearChange","rtlScrollBehavior","baseElements","sizeObserver","listenerElement","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","appear","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","onScroll","scrollEvent","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","_createEventContentCh","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","updateObservers","_createStructureSetup2","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","environmentScrollbarSlot","_scrollbarsSlot","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","_createScrollbarsSetu","scrollbarsSetupState","console","log","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","optionsValidationPluginName","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","_structureState","pluginName","pluginInstance","sizeChanged","hostMutation","scrollbarIsOverlaid","scrollbarStyling","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index 13fba7b..7326d68 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=t()}(this,(function(){"use strict";function n(n,t){var r,e=n.v,i=n.o,o=n.u,u=e,a=function(n,t){var e=u,a=n,c=t||(i?!i(e,a):e!==a);return(c||o)&&(u=a,r=e),[u,c,r]};return[t?function(n){return a(t(u,r),n)}:a,function(n){return[u,!!n,r]}]}function t(n){return void 0===n}function r(n){return null===n}function e(n){return"number"==typeof n}function i(n){return"string"==typeof n}function o(n){return"function"==typeof n}function u(n){return Array.isArray(n)}function a(n){return"object"==typeof n&&!u(n)&&!r(n)}function c(n){var t=!!n&&n.length,r=e(t)&&t>-1&&t%1==0;return!(!(u(n)||!o(n)&&r)||t>0&&a(n)&&!(t-1 in n))}function f(n){if(!n||!a(n)||"object"!==L(n))return!1;var r,e="constructor",i=n[e],o=i&&i.prototype,u=A.call(n,e),c=o&&A.call(o,"isPrototypeOf");if(i&&!u&&!c)return!1;for(r in n);return t(r)||A.call(n,r)}function l(n){var t=window.HTMLElement;return!!n&&(t?n instanceof t:n.nodeType===x)}function d(n){var t=window.Element;return!!n&&(t?n instanceof t:n.nodeType===x)}function v(n,t){if(c(n))for(var r=0;r0;e=a[o++];)u=!!r(n.classList,e)&&u}return u},ln=function(n,t){return fn(n,t,(function(n,t){return n.contains(t)}))},dn=function(n,t){fn(n,t,(function(n,t){return n.remove(t)}))},vn=function(n,t){return fn(n,t,(function(n,t){return n.add(t)})),dn.bind(0,n,t)},sn=function(n,t,r,e){if(n&&t){var i=!0;return v(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},hn=function(n,t){return sn(n,t,["w","h"])},pn=function(n,t){return sn(n,t,["x","y"])},wn=function(n,t){return sn(n,t,["t","r","b","l"])},gn=function(n,t,r){return sn(n,t,["width","height"],r&&function(n){return Math.round(n)})},yn=function(n){n&&window.clearTimeout(n),n&&un(n)},bn=function(){},mn=function(n,t){var r,i,u,a,c=t||{},f=c.g,l=c.p,d=c.m,v=window.setTimeout,s=function(t){yn(r),yn(i),i=r=u=void 0,n.apply(this,t)},h=function(n){return d&&u?d(u,n):n},p=function(){r&&s(h(a)||a)},w=function(){var n=M(arguments),t=o(f)?f():f,c=e(t)&&t>=0;if(c){var d=o(l)?l():l,w=e(d)&&d>=0,g=t>0?v:an,y=h(n),b=y||n,m=s.bind(0,b);yn(r),r=g(m,t),w&&!i&&(i=v(p,d)),u=a=b}else s(n)};return w._=p,w},xn={opacity:1,zindex:1},Sn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},On=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},An=function(n,r,i){try{if(n){var o=n.style;t(o[r])?o.setProperty(r,i):o[r]=function(n,t){return!xn[n.toLowerCase()]&&e(t)?t+"px":t}(r,i)}}catch(L){}},Ln=function(n,t,r){var e=t?t+"-":"",i=r?"-"+r:"",o=e+"top"+i,u=e+"right"+i,a=e+"bottom"+i,c=e+"left"+i,f=y(n,[o,u,a,c]);return{t:Sn(f[o]),r:Sn(f[u]),b:Sn(f[a]),l:Sn(f[c])}},Rn={w:0,h:0},Cn=function(){return{w:window.innerWidth,h:window.innerHeight}},Mn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:Rn},En=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:Rn},Tn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:Rn},zn=function(n){var t=parseFloat(y(n,"height"))||0,r=parseFloat(y(n,"height"))||0;return{w:r-Math.round(r),h:t-Math.round(t)}},Dn=function(n){return n.getBoundingClientRect()},In=function(n){return n.split(" ")},Pn=function(n,t,r,e){v(In(t),(function(t){n.removeEventListener(t,r,e)}))},Bn=function(n,r,e,i){var o=function(){if(t(b)){b=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){b=!0}}))}catch(n){}}return b}(),u=o&&i&&i.S||!1,a=i&&i.C||!1,c=i&&i.O||!1,f=[],l=o?{passive:u,capture:a}:a;return v(In(r),(function(t){var r=c?function(i){n.removeEventListener(t,r,a),e&&e(i)}:e;C(f,Pn.bind(null,n,t,r,a)),n.addEventListener(t,r,l)})),T.bind(0,f)},Hn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},Nn={x:0,y:0},jn=function(n){var t=n?Dn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:Nn},kn=function(n,t){v(u(t)?t:[t],n)},qn=function(n){function t(n,t){if(n){var r=e.get(n);kn((function(n){r&&r[n?"delete":"clear"](n)}),t)}else e.forEach((function(n){n.clear()})),e.clear()}function r(n,r){var i=e.get(n)||new Set;return e.set(n,i),kn((function(n){n&&i.add(n)}),r),t.bind(0,n,r)}var e=new Map;return v(D(n),(function(t){r(t,n[t])})),[r,t,function(n){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i
')[0],e=r.firstChild,i=qn(),o=i[0],u=i[2],a=n({v:xt(t,r,e),o:pn}),c=a[0],f=(0,a[1])()[0],l=function(n){var t=!1,e=vn(n,rt);try{t="none"===y(n,function(n){var t=nn[n];if(z(nn,n))return t;var r=$(n),e=U().style;return v(J,(function(i){var o=i.replace(/-/g,""),u=[n,i+n,o+r,$(o)+r];return!(t=u.find((function(n){return void 0!==e[n]})))})),nn[n]=t||""}("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return e(),t}(r),d={x:0===f.x,y:0===f.y},h={A:!l,D:!1},p=s({},gt),w={L:f,I:d,T:l,M:"-1"===y(r,"zIndex"),P:St(r,e),R:Ot(r,e),N:function(n){return o("_",n)},F:s.bind(0,{},h),j:function(n){s(h,n)},V:s.bind(0,{},p),B:function(n){s(p,n)},k:s({},h),U:s({},p)};if(P(r,"style"),G(r),!(l||d.x&&d.y)){var g=Cn(),b=At();window.addEventListener("resize",(function(){var n=Cn(),i={w:n.w-g.w,h:n.h-g.h};if(0!==i.w||0!==i.h){var o=bt(i.w),a=bt(i.h),f={w:bt(mt(n.w/(g.w/100))),h:bt(mt(n.h/(g.h/100)))},l=At(),d=o>2&&a>2,v=!function(n,t){var r=bt(n),e=bt(t);return!(r===e||r+1===e||r-1===e)}(f.w,f.h);if(d&&v&&l!==b&&b>0){var h=c(xt(t,r,e)),p=h[0],w=h[1];s(m.L,p),G(r),w&&u("_")}g=n,b=l}}))}return w}()),m},Rt=function(n,t){return o(n)?n.apply(0,t):n},Ct=function(n,t,r,e){return Rt(e||Rt(r,n),n)||t.apply(0,n)},Mt=function(n,e,i,o){var u=Rt(o,n);return(r(u)||t(u))&&(u=Rt(i,n)),!0===u||r(u)||t(u)?e.apply(0,n):u},Et=0,Tt=U.bind(0,""),zt=function(n){V(k(n),j(n)),G(n)},Dt=function(){var n=Lt(),t=n.T,r=n.I,e=!(n.M||t||!r.x&&!r.y)&&document.createElement("style");return e&&(p(e,"id",nt+"-"+Et),Et++),e},It=function(n){var t=Lt(),r=t.F,e=t.T,i=r(),o=i.H,u=i.q,a=i.A,c=i.D,f=l(n),d=n,v=f?n:d.target,s=N(v,"textarea"),h=!s&&N(v,"body"),w=v.ownerDocument,g=w.body,y=w.defaultView,b=!!on&&!s&&e,m=Ct.bind(0,[v]),x=Mt.bind(0,[v]),S=[m(Tt,u,d.viewport),m(Tt,u),m(Tt)].filter((function(n){return!!b||n!==v}))[0],O=S===v,A={W:v,H:s?m(Tt,o,d.host):v,q:S,A:!O&&x(Tt,a,d.padding),D:!O&&x(Tt,c,d.content),G:!O&&Dt(),X:y,Y:w,$:k(g),J:g,K:s,Z:h,rr:f,ar:O,er:function(n,t){return O?function(n,t,r){var e=p(n,t)||"";return new Set(e.split(" ")).has(r)}(S,Gn,t):ln(S,n)},tr:function(n,t,r){return O?I(S,Gn,t,r):(r?vn:dn)(S,n)}},L=D(A).reduce((function(n,t){var r=A[t];return C(n,!(!r||k(r))&&r)}),[]),M=function(n){return n?R(L,n)>-1:null},E=A.W,z=A.H,B=A.A,H=A.q,q=A.D,F=A.G,W=[],_=s&&M(z),U=s?E:j([q,H,B,z,E].find((function(n){return!1===M(n)}))),K=q||H,$=function(n,t){return p(n,Gn,t),P.bind(0,n,Gn)}(z,O?"viewport":"host"),J=vn(B,Zn),Z=vn(H,!O&&Qn),Q=vn(q,tt);return _&&(Y(E,z),C(W,(function(){Y(z,E),G(z)}))),V(K,U),V(z,B),V(B||z,!O&&H),V(H,q),C(W,(function(){$(),P(H,Un),P(H,Kn),M(q)&&zt(q),M(H)&&zt(H),M(B)&&zt(B),J(),Z(),Q()})),e&&!O&&C(W,dn.bind(0,H,rt)),F&&(X(H,F),C(W,G.bind(0,F))),[A,T.bind(0,W)]},Pt=function(n,t){var r=n.D,e=t[0];return function(n){var t=Lt().R,i=e().nr,o=n.ir,u=(r||!t)&&o;return u&&y(r,{height:i?"":"100%"}),{vr:u,ur:u}}},Bt=function(t,r){var e=r[0],i=r[1],o=t.H,u=t.A,a=t.q,c=t.ar,f=n({o:wn,v:Ln()},Ln.bind(0,o,"padding","")),l=f[0],d=f[1];return function(n,t,r){var o=d(r),f=o[0],v=o[1],h=Lt(),p=h.T,w=h.R,g=e().sr,b=n.vr,m=n.ur,x=n.cr,S=t("paddingAbsolute"),O=S[0],A=S[1];if(b||v||!w&&m){var L=l(r);f=L[0],v=L[1]}var R=!c&&(A||x||v);if(R){var C=!O||!u&&!p,M=f.r+f.l,E=f.t+f.b,T={marginRight:C&&!g?-M:0,marginBottom:C?-E:0,marginLeft:C&&g?-M:0,top:C?-f.t:0,right:C?g?-f.r:"auto":0,left:C?g?"auto":-f.l:0,width:C?"calc(100% + "+M+"px)":""},z={paddingTop:C?f.t:0,paddingRight:C?f.r:0,paddingBottom:C?f.b:0,paddingLeft:C?f.l:0};y(u||a,T),y(a,z),i({A:f,lr:!C,dr:u?z:s({},T,z)})}return{gr:R}}},Ht=Math.max,Nt="visible",jt="hidden",kt=42,qt={o:hn,v:{w:0,h:0}},Ft={o:pn,v:{x:jt,y:jt}},Wt=function(n,t,r){return r?vn(n,t):dn(n,t)},Vt=function(n){return 0===n.indexOf(Nt)},_t=function(t,r){var e=r[0],i=r[1],o=t.H,u=t.A,a=t.q,c=t.G,f=t.ar,l=t.tr,d=Lt(),s=d.L,h=d.R,w=d.T,g=d.I,b=!f&&!w&&(g.x||g.y),m=n(qt,zn.bind(0,a)),x=m[0],S=m[1],O=n(qt,Tn.bind(0,a)),A=O[0],L=O[1],R=n(qt),C=R[0],M=R[1],E=n(Ft)[0],T=function(n,t){if(y(a,{height:""}),t){var r=e(),i=r.lr,u=r.A,c=n.pr,f=n.hr,l=zn(o),d=En(o),v="content-box"===y(a,"boxSizing"),s=i||v?u.b+u.t:0,h=!(g.x&&v);y(a,{height:d.h+l.h+(c.x&&h?f.x:0)-s})}},z=function(n,t){var r=w||n?0:kt,e=function(n,e,i){var o=y(a,n),u="scroll"===(t?t[n]:o);return[o,u,u&&!w?e?r:i:0,e&&!!r]},i=e("overflowX",g.x,s.x),o=i[0],u=i[1],c=i[2],f=i[3],l=e("overflowY",g.y,s.y);return{wr:{x:o,y:l[0]},pr:{x:u,y:l[1]},hr:{x:c,y:l[2]},yr:{x:f,y:l[3]}}},P=function(n,t,r,i){if(b){var o=e().dr,u=n.hr,f=n.yr,l=f.x,d=f.y,v=u.x,s=u.y,h=o[i?"paddingRight":"paddingLeft"],w=o.paddingTop,g=t.w+r.w,m=t.h+r.h,x={w:s&&d?s+g-h+"px":"",h:v&&l?v+m-w+"px":""};if(c){var S=c.sheet;if(S){var O=S.cssRules;if(O){O.length||S.insertRule("#"+p(c,"id")+" + ."+nt+"::before {}",0);var A=O[0].style;A.width=x.w,A.height=x.h}}}else y(a,{"--os-vaw":x.w,"--os-vah":x.h})}return b},B=function(n,t,r,i){var o=n.hr,u=n.yr,a=u.x,c=u.y,f=o.x,l=o.y,d=e().dr,v=t?"marginLeft":"marginRight",s=t?"paddingLeft":"paddingRight",h=d[v],p=d.marginBottom,w=d[s],g=d.paddingBottom;i.width="calc(100% + "+(l+-1*h)+"px)",i[v]=-l+h,i.marginBottom=-f+p,r&&(i[s]=w+(c?l:0),i.paddingBottom=g+(a?f:0))},H=function(n,t,r){if(b){var i=r||z(n),o=e().dr,u=i.yr,c=u.x,f=u.y,l={},d=function(n){return v(n.split(" "),(function(n){l[n]=o[n]}))};c&&d("marginBottom paddingTop paddingBottom"),f&&d("marginLeft marginRight paddingLeft paddingRight");var s=y(a,D(l));return dn(a,nt),h||(l.height=""),y(a,l),[function(){B(i,t,b,s),y(a,s),vn(a,nt)},i]}return[bn]};return function(n,t,r){var c,d=n.vr,v=n.mr,s=n.ur,b=n.gr,m=n.ir,O=n.cr,R=e(),D=R.nr,N=R.sr,j=t("nativeScrollbarsOverlaid.show"),k=j[0],q=j[1],F=t("overflow"),W=F[0],V=F[1],_=k&&g.x&&g.y,X=!f&&!h&&(d||s||v||q||m),Y=Vt(W.x),G=Vt(W.y),U=Y||G,K=S(r),$=L(r),J=M(r);if(q&&w&&l(rt,Jn,!_),X&&(c=z(_),T(c,D)),d||b||s||O||q){U&&l(et,$n,!1);var Z=H(_,N,c),Q=Z[0],nn=Z[1],tn=K=x(r),rn=tn[0],en=tn[1],on=$=A(r),un=on[0],an=on[1],cn=En(a),fn=un,ln=cn;Q(),(an||en||q)&&nn&&!_&&P(nn,un,rn,N)&&(ln=En(a),fn=Tn(a)),J=C(function(n,t,r){var e=window.devicePixelRatio%1!=0?1:0,i={w:Ht(0,n.w-t.w-Ht(0,r.w)),h:Ht(0,n.h-t.h-Ht(0,r.h))};return{w:i.w>e?i.w:0,h:i.h>e?i.h:0}}({w:Ht(un.w,fn.w),h:Ht(un.h,fn.h)},{w:ln.w+Ht(0,cn.w-un.w),h:ln.h+Ht(0,cn.h-un.h)},rn),r)}var dn=J,vn=dn[0],sn=dn[1],hn=$,pn=hn[0],wn=hn[1],gn=K,yn=gn[0],bn=gn[1],mn={x:vn.w>0,y:vn.h>0},xn=Y&&G&&(mn.x||mn.y)||Y&&mn.x&&!mn.y||G&&mn.y&&!mn.x;if(b||O||bn||wn||sn||V||q||X){var Sn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},On=function(n,t,r,e){var i=function(n,t){var r=Vt(n),e=t&&r&&n.replace(Nt+"-","")||"";return[t&&!r?n:"",Vt(e)?"hidden":e]},o=i(r.x,t.x),u=o[0],a=o[1],c=i(r.y,t.y),f=c[0],l=c[1];return e.overflowX=a&&f?a:u,e.overflowY=l&&u?l:f,z(n,e)}(_,mn,W,Sn),An=P(On,pn,yn,N);f||B(On,N,An,Sn),X&&T(On,D),f?(p(o,Un,Sn.overflowX),p(o,Kn,Sn.overflowY)):y(a,Sn)}I(o,Gn,$n,xn),Wt(u,et,xn),!f&&Wt(a,et,U);var Ln=E(z(_).wr),Rn=Ln[0],Cn=Ln[1];return i({wr:Rn,br:{x:vn.w,y:vn.h},_r:mn}),{Sr:Cn,Cr:sn}}},Xt=function(n,t,r){var e={},i=t||{};return v(D(n).concat(D(i)),(function(t){var o=n[t],u=i[t];e[t]=!!(r||o||u)})),e},Yt="animationstart",Gt="scroll",Ut=3333333,Kt=function(n){return"rtl"===y(n,"direction")},$t=function(n){return n&&(n.height||n.width)},Jt=function(t,r,e){var i=e||{},o=i.Or,c=void 0!==o&&o,f=i.Ar,l=void 0!==f&&f,d=Lt().P,v=K('
')[0],s=v.firstChild,h=Kt.bind(0,v),p=n({v:void 0,u:!0,o:function(n,t){return!(!n||!$t(n)&&$t(t))}}),b=p[0],m=function(n){var t=u(n)&&n.length>0&&a(n[0]),e=!t&&function(n){return"boolean"==typeof n}(n[0]),i=!1,o=!1,f=!0;if(t){var l=b(n.pop().contentRect),s=l[0],h=l[2],p=$t(s);o=!$t(h)&&p,f=!(i=!h||!p)}else e?f=n[1]:o=!0===n;if(c&&f){var y=e?n[0]:Kt(v);w(v,y?d.n?-Ut:d.i?0:Ut:Ut),g(v,Ut)}i||r({vr:!e,Dr:e?n:void 0,Ar:!!o})},x=[],S=!!l&&m;if(on){var O=new on(m);O.observe(s),C(x,(function(){O.disconnect()}))}else{var A=K('
');V(s,A),vn(s,at);var L,R=A[0],M=R.lastChild,E=R.firstChild,z=null==E?void 0:E.firstChild,D=Mn(R),I=D,P=!1,B=function(){w(E,Ut),g(E,Ut),w(M,Ut),g(M,Ut)},H=function(n){L=0,P&&(D=I,m(!0===n))},N=function(n){I=Mn(R),P=!n||!hn(I,D),n?(Hn(n),P&&!L&&(un(L),L=an(H))):H(!1===n),B()};C(x,[Bn(E,Gt,N),Bn(M,Gt,N)]),y(z,{width:Ut,height:Ut}),B(),S=l?N.bind(0,!1):B}if(c){var j=n({v:!h()},h)[0];C(x,Bn(v,Gt,(function(n){var t=j(),r=t[0];t[1]&&(dn(s,"ltr rtl"),vn(s,r?"rtl":"ltr"),m(t)),Hn(n)})))}return S&&(vn(v,ot),C(x,Bn(v,Yt,S,{O:!!on}))),_(t,v),function(){T(x),G(v)}},Zt=function(t,r){var e=U(lt),i=[],o=n({v:!1})[0],u=function(n){if(n){var t=o(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));t[1]&&r(t)}};if(en){var a=new en((function(n){n&&n.length>0&&u(n.pop())}),{root:t});a.observe(e),C(i,(function(){a.disconnect()}))}else{var c=function(){var n=Mn(e);u(n)};C(i,Jt(e,c)),c()}return _(t,e),function(){T(i),G(e)}},Qt=function(n,t,r,e){var o=!1,u=e||{},a=u.Er,c=u.zr,f=u.Lr,l=u.Ir,d=u.Tr,s=u.Mr,h=function(n,t,r){var e,o=!1,u=function(u){if(r){var a=r.reduce((function(t,r){if(r){var e=r[0],o=r[1],a=o&&e&&(u?u(e):H(e,n));a&&a.length&&o&&i(o)&&C(t,[a,o.trim()],!0)}return t}),[]);v(a,(function(n){return v(n[0],(function(r){var i=n[1],u=e.get(r);if(u){var a=u[0],c=u[1];a===i&&c()}var f=Bn(r,i,(function(n){o?(f(),e.delete(r)):t(n)}));e.set(r,[i,f])}))}))}};return r&&(e=new WeakMap,u()),[function(){o=!0},u]}(n,mn((function(){o&&r(!0)}),{g:33,p:99}),f),w=h[0],g=h[1],y=c||[],b=(a||[]).concat(y),m=function(o){var u=d||bn,a=s||bn,c=[],f=[],h=!1,w=!1,b=!1;v(o,(function(r){var o=r.attributeName,d=r.target,v=r.type,s=r.oldValue,g=r.addedNodes,m="attributes"===v,x="childList"===v,S=n===d,O=m&&i(o)?p(d,o):0,A=0!==O&&s!==O,L=R(y,o)>-1&&A;if(t&&!S){var M=!m,E=m&&L,T=E&&l&&N(d,l),z=(T?!u(d,o,s,O):M||E)&&!a(r,!!T,n,e);C(f,g),w=w||z,b=b||x}!t&&S&&A&&!u(d,o,s,O)&&(C(c,o),h=h||L)})),b&&!E(f)&&g((function(n){return f.reduce((function(t,r){return C(t,H(n,r)),N(r,n)?C(t,r):t}),[])})),t?w&&r(!1):E(c)&&!h||r(c,h)},x=new rn(m);return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(w(),x.disconnect(),o=!1)},function(){o&&m(x.takeRecords())}]},nr="["+Gn+"]",tr="."+Qn,rr=["tabindex"],er=["wrap","cols","rows"],ir=["id","class","style","open"],or=function(t,r,a){var c,f,l,d=r[1],s=t.H,h=t.q,w=t.D,g=t.K,y=t.ar,b=t.er,m=t.tr,x=Lt(),S=x.T,O=x.R,A=n({o:hn,v:{w:0,h:0}},(function(){var n=b(et,$n);n&&m(et,$n);var t=Tn(w),r=Tn(h),e=zn(h);return n&&m(et,$n,!0),{w:r.w+t.w+e.w,h:r.h+t.h+e.h}})),L=A[0],C=g?er:ir.concat(er),M=mn(a,{g:function(){return c},p:function(){return f},m:function(n,t){var r=n[0],e=t[0];return[D(r).concat(D(e)).reduce((function(n,t){return n[t]=r[t]||e[t],n}),{})]}}),E=function(n){v(n||rr,(function(n){if(R(rr,n)>-1){var t=p(s,n);i(t)?p(h,n,t):P(h,n)}}))},T=function(n){var t=n.vr,r=n.Dr,e=n.Ar,i=!t||e?a:M,o=!1;if(r){var u=r[0];o=r[1],d({sr:u})}i({vr:t,cr:o})},z=function(n){L()[1]&&(n?a:M)({ur:!0})},I=(w||!O)&&Zt(s,(function(n){var t=n[0],r=n[1];d({nr:t}),a({ir:r})})),B=!y&&Jt(s,T,{Ar:!0,Or:!S}),H=Qt(s,!1,(function(n,t){t?M({mr:!0}):y||E(n)}),{zr:ir,Er:ir.concat(rr)}),N=H[0],j=y&&new on(T.bind(0,{vr:!0}));return j&&j.observe(s),E(),[function(n){var t=n("updating.ignoreMutation")[0],r=n("updating.attributes"),i=r[0],a=r[1],d=n("updating.elementEvents"),v=d[0],s=d[1],p=n("updating.debounce"),g=p[0],y=p[1],b=function(n){return o(t)&&t(n)};if((s||a)&&(l&&(l[1](),l[0]()),l=Qt(w||h,!0,z,{zr:C.concat(i||[]),Er:C.concat(i||[]),Lr:v,Ir:nr,Mr:function(n,t){var r=n.target,e=n.attributeName;return!(t||!e)&&F(r,nr,tr)||!!b(n)}})),y)if(M._(),u(g)){var m=g[0],x=g[1];c=!!e(m)&&m,f=!!e(x)&&x}else e(g)?(c=g,f=!1):(c=!1,f=!1)},function(){l&&l[0](),I&&I(),B&&B(),j&&j.disconnect(),N()}]},ur={A:{t:0,r:0,b:0,l:0},lr:!1,dr:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},br:{x:0,y:0},wr:{x:"hidden",y:"hidden"},_r:{x:!1,y:!1},nr:!1,sr:!1},ar=function(n,t){var r=Wn(t,{}),i=Vn(ur),o=new Set,u=i[0],a=function(n,t,r){T(o,[n,t||{},!!r])},c=It(n),f=c[0],l=c[1],d=function(n,t){var r=n.q,i=Lt(),o=i.T,u=i.I,a=i.R,c=!o&&(u.x||u.y),f=[Pt(n,t),Bt(n,t),_t(n,t)];return function(n,t,i){var o=Xt(s({vr:!1,gr:!1,cr:!1,ir:!1,Cr:!1,Sr:!1,mr:!1,ur:!1},t),{},i),u=c||!a,l=u&&w(r),d=u&&g(r),h=o;return v(f,(function(t){h=Xt(h,t(h,n,!!i)||{},i)})),e(l)&&w(r,l),e(d)&&g(r,d),h}}(f,i),h=or(f,i,(function(n){a(d(r,n))})),p=h[0],y=h[1],b=u.bind(0);return b.Pr=function(n){o.add(n)},b.Rr=f,[function(n,r){var e=Wn(t,n,r);p(e),a(d(e,{},r))},b,function(){o.clear(),y(),l()}]},cr=function(n){var t=U(dt+" "+n),r=U(ht),e=U(pt);return V(t,r),V(r,e),{Nr:t,Fr:r,jr:e}},fr=function(n,t,r){var e=Vn({})[0],i=function(n,t){var r=(0,Lt().F)().Vr,e=t.W,i=t.H,o=t.q,u=!t.rr&&n.scrollbarsSlot,a=Mt([e,i,o],(function(){return i}),r,u),c=cr(vt),f=cr(st),l=c.Nr,d=f.Nr;return V(a,l),V(a,d),[{Br:c,kr:f},G.bind(0,[l,d])]}(n,r),o=i[0],u=i[1],a=e.bind(0);return a.Rr=o,[function(n,r){var e=Wn(t,n,r);console.log(e)},a,function(){u()}]},lr={},dr="__osOptionsValidationPlugin",vr=new Set,sr=new WeakMap,hr=function n(t,r,e){var i=Lt(),u=i.V,a=i.I,c=i.N,f=s({},lr),d=l(t)?t:t.target,h=function(n){return sr.get(n)}(d);if(h)return h;var p=f[dr],w=function(n){var t=n||{},r=p&&p.Ur;return r?r(t,!0):t},g=s({},u(),w(r)),y=qn(e),b=y[0],m=y[1],x=y[2];a.x&&a.y&&!g.nativeScrollbarsOverlaid.initialize&&x("initializationWithdrawn");var S=ar(t,g),O=S[0],A=S[1],L=S[2],R=fr(t,g,A.Rr),C=R[0],M=R[2],E=function(n,t){O(n,t),C(n,t)},T=c(E.bind(0,{},!0));A.Pr((function(n,t,r){var e=n.vr,i=n.cr,o=n.ir,u=n.Cr,a=n.Sr,c=n.ur,f=n.mr;x("updated",{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowAmountChanged:u,overflowStyleChanged:a,contentMutation:c,hostMutation:f},changedOptions:t,force:r})}));var z={options:function(n){if(n){var t=yt(g,w(n));(function(n){for(var t in n)return!1;return!0})(t)||(s(g,t),E(t))}return s({},g)},on:b,off:m,state:function(){var n=A();return s({},{overflowAmount:n.br,overflowStyle:n.wr,hasOverflow:n._r,padding:n.A,paddingAbsolute:n.lr})},elements:function(){var n=A.Rr,t=n.W,r=n.H,e=n.A,i=n.q;return s({},{target:t,host:r,padding:e||i,viewport:i,content:n.D||i})},update:function(n){E({},n)},destroy:function(){!function(n){sr.delete(n),vr.delete(n)}(d),T(),m(),M(),L(),x("destroyed")}};return v(D(f),(function(t){var r=f[t];o(r)&&r(n,z)})),z.update(!0),function(n,t){sr.set(n,t),vr.add(n)}(d,z),x("initialized"),z};return hr.plugin=function(n){return v(u(n)?n:[n],(function(n){lr[n[0]]=n[1]}))},hr.env=function(){var n=Lt();return s({},{scrollbarSize:n.L,scrollbarIsOverlaid:n.I,scrollbarStyling:n.T,rtlScrollBehavior:n.P,flexboxGlue:n.R,cssCustomProperties:n.M,defaultInitializationStrategy:n.k,defaultDefaultOptions:n.U,getInitializationStrategy:n.F,setInitializationStrategy:n.j,getDefaultOptions:n.V,setDefaultOptions:n.B})},hr})); \ No newline at end of file +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars=t()}(this,(function(){"use strict";function n(n,t){var r,e=n.v,i=n.o,o=n.u,u=e,c=function(n,t){var e=u,c=n,a=t||(i?!i(e,c):e!==c);return(a||o)&&(u=c,r=e),[u,a,r]};return[t?function(n){return c(t(u,r),n)}:c,function(n){return[u,!!n,r]}]}function t(n){return void 0===n}function r(n){return null===n}function e(n){return"number"==typeof n}function i(n){return"string"==typeof n}function o(n){return"function"==typeof n}function u(n){return Array.isArray(n)}function c(n){return"object"==typeof n&&!u(n)&&!r(n)}function a(n){var t=!!n&&n.length,r=e(t)&&t>-1&&t%1==0;return!(!(u(n)||!o(n)&&r)||t>0&&c(n)&&!(t-1 in n))}function f(n){if(!n||!c(n)||"object"!==L(n))return!1;var r,e="constructor",i=n[e],o=i&&i.prototype,u=A.call(n,e),a=o&&A.call(o,"isPrototypeOf");if(i&&!u&&!a)return!1;for(r in n);return t(r)||A.call(n,r)}function l(n){var t=window.HTMLElement;return!!n&&(t?n instanceof t:n.nodeType===x)}function d(n){var t=window.Element;return!!n&&(t?n instanceof t:n.nodeType===x)}function v(n,t){if(a(n))for(var r=0;r0;e=c[o++];)u=!!r(n.classList,e)&&u}return u},ln=function(n,t){return fn(n,t,(function(n,t){return n.contains(t)}))},dn=function(n,t){fn(n,t,(function(n,t){return n.remove(t)}))},vn=function(n,t){return fn(n,t,(function(n,t){return n.add(t)})),dn.bind(0,n,t)},sn=function(n,t,r,e){if(n&&t){var i=!0;return v(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},hn=function(n,t){return sn(n,t,["w","h"])},pn=function(n,t){return sn(n,t,["x","y"])},wn=function(n,t){return sn(n,t,["t","r","b","l"])},gn=function(n,t,r){return sn(n,t,["width","height"],r&&function(n){return Math.round(n)})},yn=function(n){n&&window.clearTimeout(n),n&&un(n)},bn=function(){},mn=function(n,t){var r,i,u,c,a=t||{},f=a.g,l=a.p,d=a.m,v=window.setTimeout,s=function(t){yn(r),yn(i),i=r=u=void 0,n.apply(this,t)},h=function(n){return d&&u?d(u,n):n},p=function(){r&&s(h(c)||c)},w=function(){var n=M(arguments),t=o(f)?f():f,a=e(t)&&t>=0;if(a){var d=o(l)?l():l,w=e(d)&&d>=0,g=t>0?v:cn,y=h(n),b=y||n,m=s.bind(0,b);yn(r),r=g(m,t),w&&!i&&(i=v(p,d)),u=c=b}else s(n)};return w._=p,w},xn={opacity:1,zindex:1},Sn=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},On=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},An=function(n,r,i){try{if(n){var o=n.style;t(o[r])?o.setProperty(r,i):o[r]=function(n,t){return!xn[n.toLowerCase()]&&e(t)?t+"px":t}(r,i)}}catch(L){}},Ln=function(n,t,r){var e=t?t+"-":"",i=r?"-"+r:"",o=e+"top"+i,u=e+"right"+i,c=e+"bottom"+i,a=e+"left"+i,f=y(n,[o,u,c,a]);return{t:Sn(f[o]),r:Sn(f[u]),b:Sn(f[c]),l:Sn(f[a])}},Rn={w:0,h:0},Cn=function(){return{w:window.innerWidth,h:window.innerHeight}},Mn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:Rn},En=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:Rn},Tn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:Rn},zn=function(n){var t=parseFloat(y(n,"height"))||0,r=parseFloat(y(n,"height"))||0;return{w:r-Math.round(r),h:t-Math.round(t)}},Dn=function(n){return n.getBoundingClientRect()},In=function(n){return n.split(" ")},Pn=function(n,t,r,e){v(In(t),(function(t){n.removeEventListener(t,r,e)}))},Bn=function(n,r,e,i){var o=function(){if(t(b)){b=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){b=!0}}))}catch(n){}}return b}(),u=o&&i&&i.S||!1,c=i&&i.C||!1,a=i&&i.O||!1,f=[],l=o?{passive:u,capture:c}:c;return v(In(r),(function(t){var r=a?function(i){n.removeEventListener(t,r,c),e&&e(i)}:e;C(f,Pn.bind(null,n,t,r,c)),n.addEventListener(t,r,l)})),T.bind(0,f)},Nn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},jn={x:0,y:0},Fn=function(n){var t=n?Dn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:jn},kn=function(n,t){v(u(t)?t:[t],n)},qn=function(n){function t(n,t){if(n){var r=e.get(n);kn((function(n){r&&r[n?"delete":"clear"](n)}),t)}else e.forEach((function(n){n.clear()})),e.clear()}function r(n,r){var i=e.get(n)||new Set;return e.set(n,i),kn((function(n){n&&i.add(n)}),r),t.bind(0,n,r)}var e=new Map;return v(D(n),(function(t){r(t,n[t])})),[r,t,function(n,t){var r=e.get(n);v(M(r),(function(n){t&&!E(t)?n.apply(0,t):n()}))}]},Hn=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&z(n,t)?n[t]:void 0}),n):void 0},Vn=function(n,t,r){return function(e){return[Hn(n,e),r||void 0!==Hn(t,e)]}},Wn=function(n){var t=n;return[function(){return t},function(n){t=s({},t,n)}]},Un="os-environment",_n=Un+"-flexbox-glue",Xn=_n+"-max",Yn="data-overlayscrollbars",Gn=Yn+"-overflow-x",Kn=Yn+"-overflow-y",$n="overflowVisible",Jn="viewportStyled",Zn="os-padding",Qn="os-viewport",nt=Qn+"-arrange",tt="os-content",rt=Qn+"-scrollbar-styled",et="os-overflow-visible",it="os-size-observer",ot=it+"-appear",ut=it+"-listener",ct=ut+"-scroll",at=ut+"-item",ft=at+"-final",lt="os-trinsic-observer",dt="os-scrollbar",vt=dt+"-horizontal",st=dt+"-vertical",ht="os-scrollbar-track",pt="os-scrollbar-handle",wt=function(n){return JSON.stringify(n,(function(n,t){if(o(t))throw new Error;return t}))},gt={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},yt=function n(t,r){var e={};return v(D(r).concat(D(t)),(function(i){var o=t[i],a=r[i];if(c(o)&&c(a))s(e[i]={},n(o,a));else if(z(r,i)&&a!==o){var f=!0;if(u(o)||u(a))try{wt(o)===wt(a)&&(f=!1)}catch(M){}f&&(e[i]=a)}})),e},bt=Math.abs,mt=Math.round,xt=function(n,t,r){W(n,t);var e=En(t),i=Mn(t),o=zn(r);return{x:i.h-e.h+o.h,y:i.w-e.w+o.w}},St=function(n,t){var r="hidden";y(n,{overflowX:r,overflowY:r,direction:"rtl"}),w(n,0);var e=Fn(n),i=Fn(t);w(n,-999);var o=Fn(t);return{i:e.x===i.x,n:i.x!==o.x}},Ot=function(n,t){var r=vn(n,_n),e=Dn(n),i=Dn(t),o=gn(i,e,!0),u=vn(n,Xn),c=Dn(n),a=Dn(t),f=gn(a,c,!0);return r(),u(),o&&f},At=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},Lt=function(){return m||(m=function(){var t=document.body,r=K('
')[0],e=r.firstChild,i=qn(),o=i[0],u=i[2],c=n({v:xt(t,r,e),o:pn}),a=c[0],f=(0,c[1])()[0],l=function(n){var t=!1,e=vn(n,rt);try{t="none"===y(n,function(n){var t=nn[n];if(z(nn,n))return t;var r=$(n),e=G().style;return v(J,(function(i){var o=i.replace(/-/g,""),u=[n,i+n,o+r,$(o)+r];return!(t=u.find((function(n){return void 0!==e[n]})))})),nn[n]=t||""}("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return e(),t}(r),d={x:0===f.x,y:0===f.y},h={A:!l,D:!1},p=s({},gt),w={L:f,I:d,T:l,M:"-1"===y(r,"zIndex"),P:St(r,e),R:Ot(r,e),N:function(n){return o("_",n)},F:s.bind(0,{},h),j:function(n){s(h,n)},V:s.bind(0,{},p),B:function(n){s(p,n)},k:s({},h),H:s({},p)};if(P(r,"style"),Y(r),!(l||d.x&&d.y)){var g=Cn(),b=At();window.addEventListener("resize",(function(){var n=Cn(),i={w:n.w-g.w,h:n.h-g.h};if(0!==i.w||0!==i.h){var o=bt(i.w),c=bt(i.h),f={w:bt(mt(n.w/(g.w/100))),h:bt(mt(n.h/(g.h/100)))},l=At(),d=o>2&&c>2,v=!function(n,t){var r=bt(n),e=bt(t);return!(r===e||r+1===e||r-1===e)}(f.w,f.h);if(d&&v&&l!==b&&b>0){var h=a(xt(t,r,e)),p=h[0],w=h[1];s(m.L,p),Y(r),w&&u("_")}g=n,b=l}}))}return w}()),m},Rt=function(n,t){return o(n)?n.apply(0,t):n},Ct=function(n,t,r,e){return Rt(e||Rt(r,n),n)||t.apply(0,n)},Mt=function(n,e,i,o){var u=Rt(o,n);return(r(u)||t(u))&&(u=Rt(i,n)),!0===u||r(u)||t(u)?e.apply(0,n):u},Et=0,Tt=G.bind(0,""),zt=function(n){W(k(n),F(n)),Y(n)},Dt=function(){var n=Lt(),t=n.T,r=n.I,e=!(n.M||t||!r.x&&!r.y)&&document.createElement("style");return e&&(p(e,"id",nt+"-"+Et),Et++),e},It=function(n){var t=Lt(),r=t.F,e=t.T,i=r(),o=i.U,u=i.q,c=i.A,a=i.D,f=l(n),d=n,v=f?n:d.target,s=j(v,"textarea"),h=!s&&j(v,"body"),w=v.ownerDocument,g=w.body,y=w.defaultView,b=!!on&&!s&&e,m=Ct.bind(0,[v]),x=Mt.bind(0,[v]),S=[m(Tt,u,d.viewport),m(Tt,u),m(Tt)].filter((function(n){return!!b||n!==v}))[0],O=S===v,A={W:v,U:s?m(Tt,o,d.host):v,q:S,A:!O&&x(Tt,c,d.padding),D:!O&&x(Tt,a,d.content),G:!O&&Dt(),X:y,Y:w,$:k(g),J:g,K:s,Z:h,rr:f,ar:O,er:function(n,t){return O?function(n,t,r){var e=p(n,t)||"";return new Set(e.split(" ")).has(r)}(S,Yn,t):ln(S,n)},tr:function(n,t,r){return O?I(S,Yn,t,r):(r?vn:dn)(S,n)}},L=D(A).reduce((function(n,t){var r=A[t];return C(n,!(!r||k(r))&&r)}),[]),M=function(n){return n?R(L,n)>-1:null},E=A.W,z=A.U,B=A.A,N=A.q,q=A.D,H=A.G,V=[],U=s&&M(z),G=s?E:F([q,N,B,z,E].find((function(n){return!1===M(n)}))),K=q||N;return[A,function(){var n=function(n,t){return p(n,Yn,t),P.bind(0,n,Yn)}(z,O?"viewport":"host"),t=vn(B,Zn),r=vn(N,!O&&Qn),i=vn(q,tt);U&&(X(E,z),C(V,(function(){X(z,E),Y(z)}))),W(K,G),W(z,B),W(B||z,!O&&N),W(N,q),C(V,(function(){n(),P(N,Gn),P(N,Kn),M(q)&&zt(q),M(N)&&zt(N),M(B)&&zt(B),t(),r(),i()})),e&&!O&&C(V,dn.bind(0,N,rt)),H&&(_(N,H),C(V,Y.bind(0,H)))},T.bind(0,V)]},Pt=function(n,t){var r=n.D,e=t[0];return function(n){var t=Lt().R,i=e().nr,o=n.ir,u=(r||!t)&&o;return u&&y(r,{height:i?"":"100%"}),{vr:u,ur:u}}},Bt=function(t,r){var e=r[0],i=r[1],o=t.U,u=t.A,c=t.q,a=t.ar,f=n({o:wn,v:Ln()},Ln.bind(0,o,"padding","")),l=f[0],d=f[1];return function(n,t,r){var o=d(r),f=o[0],v=o[1],h=Lt(),p=h.T,w=h.R,g=e().sr,b=n.vr,m=n.ur,x=n.lr,S=t("paddingAbsolute"),O=S[0],A=S[1];if(b||v||!w&&m){var L=l(r);f=L[0],v=L[1]}var R=!a&&(A||x||v);if(R){var C=!O||!u&&!p,M=f.r+f.l,E=f.t+f.b,T={marginRight:C&&!g?-M:0,marginBottom:C?-E:0,marginLeft:C&&g?-M:0,top:C?-f.t:0,right:C?g?-f.r:"auto":0,left:C?g?"auto":-f.l:0,width:C?"calc(100% + "+M+"px)":""},z={paddingTop:C?f.t:0,paddingRight:C?f.r:0,paddingBottom:C?f.b:0,paddingLeft:C?f.l:0};y(u||c,T),y(c,z),i({A:f,cr:!C,dr:u?z:s({},T,z)})}return{gr:R}}},Nt=Math.max,jt="visible",Ft="hidden",kt=42,qt={o:hn,v:{w:0,h:0}},Ht={o:pn,v:{x:Ft,y:Ft}},Vt=function(n,t,r){return r?vn(n,t):dn(n,t)},Wt=function(n){return 0===n.indexOf(jt)},Ut=function(t,r){var e=r[0],i=r[1],o=t.U,u=t.A,c=t.q,a=t.G,f=t.ar,l=t.tr,d=Lt(),s=d.L,h=d.R,w=d.T,g=d.I,b=!f&&!w&&(g.x||g.y),m=n(qt,zn.bind(0,c)),x=m[0],S=m[1],O=n(qt,Tn.bind(0,c)),A=O[0],L=O[1],R=n(qt),C=R[0],M=R[1],E=n(Ht)[0],T=function(n,t){if(y(c,{height:""}),t){var r=e(),i=r.cr,u=r.A,a=n.pr,f=n.hr,l=zn(o),d=En(o),v="content-box"===y(c,"boxSizing"),s=i||v?u.b+u.t:0,h=!(g.x&&v);y(c,{height:d.h+l.h+(a.x&&h?f.x:0)-s})}},z=function(n,t){var r=w||n?0:kt,e=function(n,e,i){var o=y(c,n),u="scroll"===(t?t[n]:o);return[o,u,u&&!w?e?r:i:0,e&&!!r]},i=e("overflowX",g.x,s.x),o=i[0],u=i[1],a=i[2],f=i[3],l=e("overflowY",g.y,s.y);return{wr:{x:o,y:l[0]},pr:{x:u,y:l[1]},hr:{x:a,y:l[2]},yr:{x:f,y:l[3]}}},P=function(n,t,r,i){if(b){var o=e().dr,u=n.hr,f=n.yr,l=f.x,d=f.y,v=u.x,s=u.y,h=o[i?"paddingRight":"paddingLeft"],w=o.paddingTop,g=t.w+r.w,m=t.h+r.h,x={w:s&&d?s+g-h+"px":"",h:v&&l?v+m-w+"px":""};if(a){var S=a.sheet;if(S){var O=S.cssRules;if(O){O.length||S.insertRule("#"+p(a,"id")+" + ."+nt+"::before {}",0);var A=O[0].style;A.width=x.w,A.height=x.h}}}else y(c,{"--os-vaw":x.w,"--os-vah":x.h})}return b},B=function(n,t,r,i){var o=n.hr,u=n.yr,c=u.x,a=u.y,f=o.x,l=o.y,d=e().dr,v=t?"marginLeft":"marginRight",s=t?"paddingLeft":"paddingRight",h=d[v],p=d.marginBottom,w=d[s],g=d.paddingBottom;i.width="calc(100% + "+(l+-1*h)+"px)",i[v]=-l+h,i.marginBottom=-f+p,r&&(i[s]=w+(a?l:0),i.paddingBottom=g+(c?f:0))},N=function(n,t,r){if(b){var i=r||z(n),o=e().dr,u=i.yr,a=u.x,f=u.y,l={},d=function(n){return v(n.split(" "),(function(n){l[n]=o[n]}))};a&&d("marginBottom paddingTop paddingBottom"),f&&d("marginLeft marginRight paddingLeft paddingRight");var s=y(c,D(l));return dn(c,nt),h||(l.height=""),y(c,l),[function(){B(i,t,b,s),y(c,s),vn(c,nt)},i]}return[bn]};return function(n,t,r){var a,d=n.vr,v=n.mr,s=n.ur,b=n.gr,m=n.ir,O=n.lr,R=e(),D=R.nr,j=R.sr,F=t("nativeScrollbarsOverlaid.show"),k=F[0],q=F[1],H=t("overflow"),V=H[0],W=H[1],U=k&&g.x&&g.y,_=!f&&!h&&(d||s||v||q||m),X=Wt(V.x),Y=Wt(V.y),G=X||Y,K=S(r),$=L(r),J=M(r);if(q&&w&&l(rt,Jn,!U),_&&(a=z(U),T(a,D)),d||b||s||O||q){G&&l(et,$n,!1);var Z=N(U,j,a),Q=Z[0],nn=Z[1],tn=K=x(r),rn=tn[0],en=tn[1],on=$=A(r),un=on[0],cn=on[1],an=En(c),fn=un,ln=an;Q(),(cn||en||q)&&nn&&!U&&P(nn,un,rn,j)&&(ln=En(c),fn=Tn(c)),J=C(function(n,t,r){var e=window.devicePixelRatio%1!=0?1:0,i={w:Nt(0,n.w-t.w-Nt(0,r.w)),h:Nt(0,n.h-t.h-Nt(0,r.h))};return{w:i.w>e?i.w:0,h:i.h>e?i.h:0}}({w:Nt(un.w,fn.w),h:Nt(un.h,fn.h)},{w:ln.w+Nt(0,an.w-un.w),h:ln.h+Nt(0,an.h-un.h)},rn),r)}var dn=J,vn=dn[0],sn=dn[1],hn=$,pn=hn[0],wn=hn[1],gn=K,yn=gn[0],bn=gn[1],mn={x:vn.w>0,y:vn.h>0},xn=X&&Y&&(mn.x||mn.y)||X&&mn.x&&!mn.y||Y&&mn.y&&!mn.x;if(b||O||bn||wn||sn||W||q||_){var Sn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},On=function(n,t,r,e){var i=function(n,t){var r=Wt(n),e=t&&r&&n.replace(jt+"-","")||"";return[t&&!r?n:"",Wt(e)?"hidden":e]},o=i(r.x,t.x),u=o[0],c=o[1],a=i(r.y,t.y),f=a[0],l=a[1];return e.overflowX=c&&f?c:u,e.overflowY=l&&u?l:f,z(n,e)}(U,mn,V,Sn),An=P(On,pn,yn,j);f||B(On,j,An,Sn),_&&T(On,D),f?(p(o,Gn,Sn.overflowX),p(o,Kn,Sn.overflowY)):y(c,Sn)}I(o,Yn,$n,xn),Vt(u,et,xn),!f&&Vt(c,et,G);var Ln=E(z(U).wr),Rn=Ln[0],Cn=Ln[1];return i({wr:Rn,br:{x:vn.w,y:vn.h},_r:mn}),{Sr:Cn,Cr:sn}}},_t=function(n,t,r){var e={},i=t||{};return v(D(n).concat(D(i)),(function(t){var o=n[t],u=i[t];e[t]=!!(r||o||u)})),e},Xt="animationstart",Yt="scroll",Gt=3333333,Kt=function(n){return"rtl"===y(n,"direction")},$t=function(n){return n&&(n.height||n.width)},Jt=function(t,r,e){var i=e||{},o=i.Or,a=void 0!==o&&o,f=i.Ar,l=void 0!==f&&f,d=Lt().P,v=K('
')[0],s=v.firstChild,h=Kt.bind(0,v),p=n({v:void 0,u:!0,o:function(n,t){return!(!n||!$t(n)&&$t(t))}}),b=p[0],m=function(n){var t=u(n)&&n.length>0&&c(n[0]),e=!t&&function(n){return"boolean"==typeof n}(n[0]),i=!1,o=!1,f=!0;if(t){var l=b(n.pop().contentRect),s=l[0],h=l[2],p=$t(s);o=!$t(h)&&p,f=!(i=!h||!p)}else e?f=n[1]:o=!0===n;if(a&&f){var y=e?n[0]:Kt(v);w(v,y?d.n?-Gt:d.i?0:Gt:Gt),g(v,Gt)}i||r({vr:!e,Dr:e?n:void 0,Ar:!!o})},x=[],S=!!l&&m;if(on){var O=new on(m);O.observe(s),C(x,(function(){O.disconnect()}))}else{var A=K('
');W(s,A),vn(s,ct);var L,R=A[0],M=R.lastChild,E=R.firstChild,z=null==E?void 0:E.firstChild,D=Mn(R),I=D,P=!1,B=function(){w(E,Gt),g(E,Gt),w(M,Gt),g(M,Gt)},N=function(n){L=0,P&&(D=I,m(!0===n))},j=function(n){I=Mn(R),P=!n||!hn(I,D),n?(Nn(n),P&&!L&&(un(L),L=cn(N))):N(!1===n),B()};C(x,[Bn(E,Yt,j),Bn(M,Yt,j)]),y(z,{width:Gt,height:Gt}),B(),S=l?j.bind(0,!1):B}if(a){var F=n({v:!h()},h)[0];C(x,Bn(v,Yt,(function(n){var t=F(),r=t[0];t[1]&&(dn(s,"ltr rtl"),vn(s,r?"rtl":"ltr"),m(t)),Nn(n)})))}return S&&(vn(v,ot),C(x,Bn(v,Xt,S,{O:!!on}))),U(t,v),function(){T(x),Y(v)}},Zt=function(t,r){var e=G(lt),i=[],o=n({v:!1})[0],u=function(n){if(n){var t=o(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));t[1]&&r(t)}};if(en){var c=new en((function(n){n&&n.length>0&&u(n.pop())}),{root:t});c.observe(e),C(i,(function(){c.disconnect()}))}else{var a=function(){var n=Mn(e);u(n)};C(i,Jt(e,a)),a()}return U(t,e),function(){T(i),Y(e)}},Qt=function(n,t,r,e){var o=!1,u=e||{},c=u.Er,a=u.zr,f=u.Lr,l=u.Ir,d=u.Tr,s=u.Mr,h=function(n,t,r){var e,o=!1,u=function(u){if(r){var c=r.reduce((function(t,r){if(r){var e=r[0],o=r[1],c=o&&e&&(u?u(e):N(e,n));c&&c.length&&o&&i(o)&&C(t,[c,o.trim()],!0)}return t}),[]);v(c,(function(n){return v(n[0],(function(r){var i=n[1],u=e.get(r);if(u){var c=u[0],a=u[1];c===i&&a()}var f=Bn(r,i,(function(n){o?(f(),e.delete(r)):t(n)}));e.set(r,[i,f])}))}))}};return r&&(e=new WeakMap,u()),[function(){o=!0},u]}(n,mn((function(){o&&r(!0)}),{g:33,p:99}),f),w=h[0],g=h[1],y=a||[],b=(c||[]).concat(y),m=function(o){var u=d||bn,c=s||bn,a=[],f=[],h=!1,w=!1,b=!1;v(o,(function(r){var o=r.attributeName,d=r.target,v=r.type,s=r.oldValue,g=r.addedNodes,m="attributes"===v,x="childList"===v,S=n===d,O=m&&i(o)?p(d,o):0,A=0!==O&&s!==O,L=R(y,o)>-1&&A;if(t&&!S){var M=!m,E=m&&L,T=E&&l&&j(d,l),z=(T?!u(d,o,s,O):M||E)&&!c(r,!!T,n,e);C(f,g),w=w||z,b=b||x}!t&&S&&A&&!u(d,o,s,O)&&(C(a,o),h=h||L)})),b&&!E(f)&&g((function(n){return f.reduce((function(t,r){return C(t,N(n,r)),j(r,n)?C(t,r):t}),[])})),t?w&&r(!1):E(a)&&!h||r(a,h)},x=new rn(m);return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(w(),x.disconnect(),o=!1)},function(){o&&m(x.takeRecords())}]},nr="["+Yn+"]",tr="."+Qn,rr=["tabindex"],er=["wrap","cols","rows"],ir=["id","class","style","open"],or=function(t,r,c){var a,f,l,d=r[1],s=t.U,h=t.q,w=t.D,g=t.K,y=t.ar,b=t.er,m=t.tr,x=Lt(),S=x.T,O=x.R,A=n({o:hn,v:{w:0,h:0}},(function(){var n=b(et,$n);n&&m(et,$n);var t=Tn(w),r=Tn(h),e=zn(h);return n&&m(et,$n,!0),{w:r.w+t.w+e.w,h:r.h+t.h+e.h}})),L=A[0],C=g?er:ir.concat(er),M=mn(c,{g:function(){return a},p:function(){return f},m:function(n,t){var r=n[0],e=t[0];return[D(r).concat(D(e)).reduce((function(n,t){return n[t]=r[t]||e[t],n}),{})]}}),E=function(n){v(n||rr,(function(n){if(R(rr,n)>-1){var t=p(s,n);i(t)?p(h,n,t):P(h,n)}}))},T=function(n){var t=n.vr,r=n.Dr,e=n.Ar,i=!t||e?c:M,o=!1;if(r){var u=r[0];o=r[1],d({sr:u})}i({vr:t,lr:o})},z=function(n){L()[1]&&(n?c:M)({ur:!0})},I=(w||!O)&&Zt(s,(function(n){var t=n[0],r=n[1];d({nr:t}),c({ir:r})})),B=!y&&Jt(s,T,{Ar:!0,Or:!S}),N=Qt(s,!1,(function(n,t){t?M({mr:!0}):y||E(n)}),{zr:ir,Er:ir.concat(rr)}),j=N[0],F=y&&new on(T.bind(0,{vr:!0}));return F&&F.observe(s),E(),[function(n){var t=n("updating.ignoreMutation")[0],r=n("updating.attributes"),i=r[0],c=r[1],d=n("updating.elementEvents"),v=d[0],s=d[1],p=n("updating.debounce"),g=p[0],y=p[1],b=function(n){return o(t)&&t(n)};if((s||c)&&(l&&(l[1](),l[0]()),l=Qt(w||h,!0,z,{zr:C.concat(i||[]),Er:C.concat(i||[]),Lr:v,Ir:nr,Mr:function(n,t){var r=n.target,e=n.attributeName;return!(t||!e)&&H(r,nr,tr)||!!b(n)}})),y)if(M._(),u(g)){var m=g[0],x=g[1];a=!!e(m)&&m,f=!!e(x)&&x}else e(g)?(a=g,f=!1):(a=!1,f=!1)},function(){l&&l[0](),I&&I(),B&&B(),F&&F.disconnect(),j()}]},ur={A:{t:0,r:0,b:0,l:0},cr:!1,dr:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},br:{x:0,y:0},wr:{x:"hidden",y:"hidden"},_r:{x:!1,y:!1},nr:!1,sr:!1},cr=function(n){var t=G(dt+" "+n),r=G(ht),e=G(pt);return W(t,r),W(r,e),{Fr:t,jr:r,Vr:e}},ar=function(n,t,r){var e=Wn({})[0],i=function(n,t){var r=(0,Lt().F)().Br,e=t.W,i=t.U,o=t.q,u=!t.rr&&n.scrollbarsSlot,c=Mt([e,i,o],(function(){return i}),r,u),a=cr(vt),f=cr(st),l=a.Fr,d=f.Fr;return[{kr:a,Hr:f},function(){W(c,l),W(c,d)},Y.bind(0,[l,d])]}(n,r),o=i[0],u=i[1],c=i[2],a=e.bind(0);return a.Nr=o,a.Rr=u,[function(n,r){var e=Vn(t,n,r);console.log(e)},a,function(){c()}]},fr={},lr="__osOptionsValidationPlugin",dr=new Set,vr=new WeakMap,sr=function n(t,r,i){var u=!1,c=Lt(),a=c.V,f=c.I,d=c.N,h=s({},fr),p=l(t)?t:t.target,y=function(n){return vr.get(n)}(p);if(y)return y;var b=h[lr],m=function(n){var t=n||{},r=b&&b.Ur;return r?r(t,!0):t},x=s({},a(),m(r)),S=qn(i),O=S[0],A=S[1],L=S[2],R=function(n,t){var r=Vn(t,{}),i=Wn(ur),o=qn(),u=o[0],c=o[1],a=o[2],f=i[0],l=It(n),d=l[0],h=l[1],p=l[2],y=function(n,t){var r=n.q,i=Lt(),o=i.T,u=i.I,c=i.R,a=!o&&(u.x||u.y),f=[Pt(n,t),Bt(n,t),Ut(n,t)];return function(n,t,i){var o=_t(s({vr:!1,gr:!1,lr:!1,ir:!1,Cr:!1,Sr:!1,mr:!1,ur:!1},t),{},i),u=a||!c,l=u&&w(r),d=u&&g(r),h=o;return v(f,(function(t){h=_t(h,t(h,n,!!i)||{},i)})),e(l)&&w(r,l),e(d)&&g(r,d),h}}(d,i),b=or(d,i,(function(n){a("u",[y(r,n),{},!1])})),m=b[0],x=b[1],S=f.bind(0);return S.Pr=function(n){u("u",n)},S.Rr=h,S.Nr=d,[function(n,r){var e=Vn(t,n,r);m(e),a("u",[y(e,{},r),n,!!r])},S,function(){c(),x(),p()}]}(t,x),C=R[0],M=R[1],E=R[2],T=ar(t,x,M.Nr),z=T[0],I=T[1],P=T[2],B=function(n,t){C(n,t),z(n,t)},N=d(B.bind(0,{},!0)),j=function(n){!function(n){vr.delete(n),dr.delete(n)}(p),N(),P(),E(),u=!0,L("destroyed",[F,!!n]),A()},F={options:function(n){if(n){var t=yt(x,m(n));(function(n){for(var t in n)return!1;return!0})(t)||(s(x,t),B(t))}return s({},x)},on:O,off:A,state:function(){var n=M();return s({},{overflowAmount:n.br,overflowStyle:n.wr,hasOverflow:n._r,padding:n.A,paddingAbsolute:n.cr,destroyed:u})},elements:function(){var n=M.Nr,t=n.W,r=n.U,e=n.A,i=n.q;return s({},{target:t,host:r,padding:e||i,viewport:i,content:n.D||i})},update:function(n){return B({},n),F},destroy:j.bind(0)};return f.x&&f.y&&!x.nativeScrollbarsOverlaid.initialize?(j(!0),F):(v(D(h),(function(t){var r=h[t];o(r)&&r(n,F)})),M.Rr(),I.Rr(),function(n,t){vr.set(n,t),dr.add(n)}(p,F),L("initialized",[F]),M.Pr((function(n,t,r){var e=n.vr,i=n.lr,o=n.ir,u=n.Cr,c=n.Sr,a=n.ur,f=n.mr;L("updated",[F,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowAmountChanged:u,overflowStyleChanged:c,contentMutation:a,hostMutation:f},changedOptions:t,force:r}])})),F.update(!0))};return sr.plugin=function(n){return v(u(n)?n:[n],(function(n){fr[n[0]]=n[1]}))},sr.env=function(){var n=Lt();return s({},{scrollbarSize:n.L,scrollbarIsOverlaid:n.I,scrollbarStyling:n.T,rtlScrollBehavior:n.P,flexboxGlue:n.R,cssCustomProperties:n.M,defaultInitializationStrategy:n.k,defaultDefaultOptions:n.H,getInitializationStrategy:n.F,setInitializationStrategy:n.j,getDefaultOptions:n.V,setDefaultOptions:n.B})},sr})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/overlayscrollbars.ts b/packages/overlayscrollbars/src/overlayscrollbars.ts index 8fd8847..91910b5 100644 --- a/packages/overlayscrollbars/src/overlayscrollbars.ts +++ b/packages/overlayscrollbars/src/overlayscrollbars.ts @@ -31,17 +31,6 @@ import type { EventListener as GeneralEventListener, } from 'support/eventListeners'; -/* -onScrollStart : null, -onScroll : null, -onScrollStop : null, -onOverflowChanged : null, -onOverflowAmountChanged : null, // fusion with onOverflowChanged -onDirectionChanged : null, // gone -onContentSizeChanged : null, // gone -onHostSizeChanged : null, // gone -*/ - export interface OverlayScrollbarsStatic { ( target: InitializationTarget | InitializationTargetObject, @@ -75,6 +64,7 @@ export interface State { overflowAmount: XY; overflowStyle: XY; hasOverflow: XY; + destroyed: boolean; } export interface Elements { @@ -100,10 +90,18 @@ export interface OnUpdatedEventListenerArgs { } export type EventListenerMap = { - initialized: []; - initializationWithdrawn: []; - updated: [OnUpdatedEventListenerArgs]; - destroyed: []; + /** + * Triggered after all elements are initialized and appended. + */ + initialized: [instance: OverlayScrollbars]; + /** + * Triggered after an update. + */ + updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs]; + /** + * Triggered after all elements, observers and events are destroyed. + */ + destroyed: [instance: OverlayScrollbars, withdrawn: boolean]; }; export type InitialEventListeners = GeneralInitialEventListeners; @@ -117,7 +115,7 @@ export interface OverlayScrollbars { options(): Options; options(newOptions?: PartialOptions): Options; - update(force?: boolean): void; + update(force?: boolean): OverlayScrollbars; destroy(): void; @@ -142,6 +140,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( options?, eventListeners? ): OverlayScrollbars => { + let destroyed = false; const { _getDefaultOptions, _nativeScrollbarIsOverlaid, @@ -168,59 +167,33 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( validateOptions(options) ); const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners); - - if ( - _nativeScrollbarIsOverlaid.x && - _nativeScrollbarIsOverlaid.y && - !currentOptions.nativeScrollbarsOverlaid.initialize - ) { - triggerEvent('initializationWithdrawn'); - } - const [updateStructure, structureState, destroyStructure] = createStructureSetup( target, currentOptions ); - const [updateScrollbars, , destroyScrollbars] = createScrollbarsSetup( + const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup( target, currentOptions, structureState._elements ); - const update = (changedOptions: PartialOptions, force?: boolean) => { updateStructure(changedOptions, force); updateScrollbars(changedOptions, force); }; - const removeEnvListener = addEnvListener(update.bind(0, {}, true)); + const destroy = (withdrawn?: boolean) => { + removeInstance(instanceTarget); + removeEnvListener(); - structureState._addOnUpdatedListener((updateHints, changedOptions, force) => { - const { - _sizeChanged, - _directionChanged, - _heightIntrinsicChanged, - _overflowAmountChanged, - _overflowStyleChanged, - _contentMutation, - _hostMutation, - } = updateHints; + destroyScrollbars(); + destroyStructure(); - triggerEvent('updated', [ - { - updateHints: { - sizeChanged: _sizeChanged, - directionChanged: _directionChanged, - heightIntrinsicChanged: _heightIntrinsicChanged, - overflowAmountChanged: _overflowAmountChanged, - overflowStyleChanged: _overflowStyleChanged, - contentMutation: _contentMutation, - hostMutation: _hostMutation, - }, - changedOptions, - force, - }, - ]); - }); + destroyed = true; + + // eslint-disable-next-line no-use-before-define + triggerEvent('destroyed', [instance, !!withdrawn]); + removeEvent(); + }; const instance: OverlayScrollbars = { options(newOptions?: PartialOptions) { @@ -235,7 +208,9 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( return assignDeep({}, currentOptions); }, on: addEvent, - off: removeEvent, + off: (name, listener) => { + name && listener && removeEvent(name, listener as any); + }, state() { const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } = structureState(); @@ -247,6 +222,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( hasOverflow: _hasOverflow, padding: _padding, paddingAbsolute: _paddingAbsolute, + destroyed, } ); }, @@ -265,17 +241,9 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( }, update(force?: boolean) { update({}, force); + return instance; }, - destroy: () => { - removeInstance(instanceTarget); - removeEnvListener(); - removeEvent(); - - destroyScrollbars(); - destroyStructure(); - - triggerEvent('destroyed'); - }, + destroy: destroy.bind(0), }; each(keys(plugins), (pluginName) => { @@ -285,13 +253,51 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = ( } }); - instance.update(true); + if ( + _nativeScrollbarIsOverlaid.x && + _nativeScrollbarIsOverlaid.y && + !currentOptions.nativeScrollbarsOverlaid.initialize + ) { + destroy(true); + return instance; + } + + structureState._appendElements(); + scrollbarsState._appendElements(); addInstance(instanceTarget, instance); + triggerEvent('initialized', [instance]); - triggerEvent('initialized'); + structureState._addOnUpdatedListener((updateHints, changedOptions, force) => { + const { + _sizeChanged, + _directionChanged, + _heightIntrinsicChanged, + _overflowAmountChanged, + _overflowStyleChanged, + _contentMutation, + _hostMutation, + } = updateHints; - return instance; + triggerEvent('updated', [ + instance, + { + updateHints: { + sizeChanged: _sizeChanged, + directionChanged: _directionChanged, + heightIntrinsicChanged: _heightIntrinsicChanged, + overflowAmountChanged: _overflowAmountChanged, + overflowStyleChanged: _overflowStyleChanged, + contentMutation: _contentMutation, + hostMutation: _hostMutation, + }, + changedOptions, + force, + }, + ]); + }); + + return instance.update(true); }; OverlayScrollbars.plugin = addPlugin; diff --git a/packages/overlayscrollbars/src/plugins/api.ts b/packages/overlayscrollbars/src/plugins/api.ts deleted file mode 100644 index 5b351cc..0000000 --- a/packages/overlayscrollbars/src/plugins/api.ts +++ /dev/null @@ -1 +0,0 @@ -export { optionsValidationPlugin } from 'plugins/optionsValidation/optionsValidation'; diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts index e2e7f07..ea43059 100644 --- a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts @@ -27,7 +27,11 @@ export interface ScrollbarsSetupElementsObj { _verticalScrollbarStructure: ScrollbarStructure; } -export type ScrollbarsSetupElements = [elements: ScrollbarsSetupElementsObj, destroy: () => void]; +export type ScrollbarsSetupElements = [ + elements: ScrollbarsSetupElementsObj, + appendElements: () => void, + destroy: () => void +]; const generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => { const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`); @@ -68,14 +72,17 @@ export const createScrollbarsSetupElements = ( const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure; const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure; - appendChildren(evaluatedScrollbarSlot, horizontalScrollbar); - appendChildren(evaluatedScrollbarSlot, verticalScrollbar); + const appendElements = () => { + appendChildren(evaluatedScrollbarSlot, horizontalScrollbar); + appendChildren(evaluatedScrollbarSlot, verticalScrollbar); + }; return [ { _horizontalScrollbarStructure: horizontalScrollbarStructure, _verticalScrollbarStructure: verticalScrollbarStructure, }, + appendElements, removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]), ]; }; diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts index 4f2e492..98d2bf0 100644 --- a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.ts @@ -13,6 +13,7 @@ export interface ScrollbarsSetupState {} export interface ScrollbarsSetupStaticState { _elements: ScrollbarsSetupElementsObj; + _appendElements: () => void; } export const createScrollbarsSetup = ( @@ -23,11 +24,15 @@ export const createScrollbarsSetup = ( const state = createState({}); const [getState] = state; - const [elements, destroyElements] = createScrollbarsSetupElements(target, structureSetupElements); + const [elements, appendElements, destroyElements] = createScrollbarsSetupElements( + target, + structureSetupElements + ); const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) & ScrollbarsSetupStaticState; scrollbarsSetupState._elements = elements; + scrollbarsSetupState._appendElements = appendElements; return [ (changedOptions, force?) => { diff --git a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.elements.ts b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.elements.ts index 9c673cf..e9e3ab8 100644 --- a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.elements.ts +++ b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.elements.ts @@ -43,7 +43,11 @@ import type { StructureStaticInitializationElement, } from 'setups/structureSetup/structureSetup.initialization'; -export type StructureSetupElements = [targetObj: StructureSetupElementsObj, destroy: () => void]; +export type StructureSetupElements = [ + targetObj: StructureSetupElementsObj, + appendElements: () => void, + destroy: () => void +]; export interface StructureSetupElementsObj { _target: InitializationTargetElement; @@ -197,52 +201,54 @@ export const createStructureSetupElements = ( ) ); const contentSlot = _content || _viewport; - const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host'); - const removePaddingClass = addClass(_padding, classNamePadding); - const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport); - const removeContentClass = addClass(_content, classNameContent); + const appendElements = () => { + const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host'); + const removePaddingClass = addClass(_padding, classNamePadding); + const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport); + const removeContentClass = addClass(_content, classNameContent); - // only insert host for textarea after target if it was generated - if (isTextareaHostGenerated) { - insertAfter(_target, _host); + // only insert host for textarea after target if it was generated + if (isTextareaHostGenerated) { + insertAfter(_target, _host); + + push(destroyFns, () => { + insertAfter(_host, _target); + removeElements(_host); + }); + } + + appendChildren(contentSlot, targetContents); + appendChildren(_host, _padding); + appendChildren(_padding || _host, !viewportIsTarget && _viewport); + appendChildren(_viewport, _content); push(destroyFns, () => { - insertAfter(_host, _target); - removeElements(_host); + removeHostDataAttr(); + removeAttr(_viewport, dataAttributeHostOverflowX); + removeAttr(_viewport, dataAttributeHostOverflowY); + + if (elementIsGenerated(_content)) { + unwrap(_content); + } + if (elementIsGenerated(_viewport)) { + unwrap(_viewport); + } + if (elementIsGenerated(_padding)) { + unwrap(_padding); + } + removePaddingClass(); + removeViewportClass(); + removeContentClass(); }); - } - appendChildren(contentSlot, targetContents); - appendChildren(_host, _padding); - appendChildren(_padding || _host, !viewportIsTarget && _viewport); - appendChildren(_viewport, _content); - - push(destroyFns, () => { - removeHostDataAttr(); - removeAttr(_viewport, dataAttributeHostOverflowX); - removeAttr(_viewport, dataAttributeHostOverflowY); - - if (elementIsGenerated(_content)) { - unwrap(_content); + if (_nativeScrollbarStyling && !viewportIsTarget) { + push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling)); } - if (elementIsGenerated(_viewport)) { - unwrap(_viewport); + if (_viewportArrange) { + insertBefore(_viewport, _viewportArrange); + push(destroyFns, removeElements.bind(0, _viewportArrange)); } - if (elementIsGenerated(_padding)) { - unwrap(_padding); - } - removePaddingClass(); - removeViewportClass(); - removeContentClass(); - }); + }; - if (_nativeScrollbarStyling && !viewportIsTarget) { - push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling)); - } - if (_viewportArrange) { - insertBefore(_viewport, _viewportArrange); - push(destroyFns, removeElements.bind(0, _viewportArrange)); - } - - return [evaluatedTargetObj, runEach.bind(0, destroyFns)]; + return [evaluatedTargetObj, appendElements, runEach.bind(0, destroyFns)]; }; diff --git a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts index 33dfeaf..cdec132 100644 --- a/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts +++ b/packages/overlayscrollbars/src/setups/structureSetup/structureSetup.ts @@ -1,11 +1,11 @@ -import { runEach } from 'support'; +import { createEventListenerHub } from 'support'; import { createState, createOptionCheck } from 'setups/setups'; import { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements'; import { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update'; import { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers'; import type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update'; import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements'; -import type { TRBL, XY } from 'support'; +import type { TRBL, XY, EventListener } from 'support'; import type { Options, ReadonlyOSOptions } from 'options'; import type { Setup } from 'setups'; import type { InitializationTarget } from 'initialization'; @@ -24,14 +24,17 @@ export interface StructureSetupState { export interface StructureSetupStaticState { _elements: StructureSetupElementsObj; - _addOnUpdatedListener: (listener: OnUpdatedListener) => void; + _appendElements: () => void; + _addOnUpdatedListener: (listener: EventListener) => void; } -export type OnUpdatedListener = ( - updateHints: StructureSetupUpdateHints, - changedOptions: PartialOptions, - force: boolean -) => void; +type StructureSetupEventMap = { + u: [ + updateHints: StructureSetupUpdateHints, + changedOptions: PartialOptions, + force: boolean + ]; +}; const initialStructureSetupUpdateState: StructureSetupState = { _padding: { @@ -72,42 +75,35 @@ export const createStructureSetup = ( ): Setup => { const checkOptionsFallback = createOptionCheck(options, {}); const state = createState(initialStructureSetupUpdateState); - const onUpdatedListeners = new Set(); + const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(); const [getState] = state; - const runOnUpdatedListeners = ( - updateHints: StructureSetupUpdateHints, - changedOptions?: PartialOptions, - force?: boolean - ) => { - runEach(onUpdatedListeners, [updateHints, changedOptions || {}, !!force]); - }; - - const [elements, destroyElements] = createStructureSetupElements(target); + const [elements, appendElements, destroyElements] = createStructureSetupElements(target); const updateStructure = createStructureSetupUpdate(elements, state); const [updateObservers, destroyObservers] = createStructureSetupObservers( elements, state, (updateHints) => { - runOnUpdatedListeners(updateStructure(checkOptionsFallback, updateHints)); + triggerEvent('u', [updateStructure(checkOptionsFallback, updateHints), {}, false]); } ); const structureSetupState = getState.bind(0) as (() => StructureSetupState) & StructureSetupStaticState; structureSetupState._addOnUpdatedListener = (listener) => { - onUpdatedListeners.add(listener); + addEvent('u', listener); }; + structureSetupState._appendElements = appendElements; structureSetupState._elements = elements; return [ (changedOptions, force?) => { const checkOption = createOptionCheck(options, changedOptions, force); updateObservers(checkOption); - runOnUpdatedListeners(updateStructure(checkOption, {}, force)); + triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]); }, structureSetupState, () => { - onUpdatedListeners.clear(); + removeEvent(); destroyObservers(); destroyElements(); }, diff --git a/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts b/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts index f1718f9..8c9884c 100644 --- a/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts +++ b/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts @@ -115,7 +115,8 @@ const assertCorrectDOMStructure = (textarea: boolean, viewportIsTarget: boolean) const createStructureSetupProxy = ( target: InitializationTarget | StructureInitialization ): StructureSetupElementsProxy => { - const [elements, destroy] = createStructureSetupElements(target); + const [elements, appendElements, destroy] = createStructureSetupElements(target); + appendElements(); return { input: target, elements, diff --git a/packages/overlayscrollbars/tests/playwright/setups/structureSetup/nesting/index.browser.ts b/packages/overlayscrollbars/tests/playwright/setups/structureSetup/nesting/index.browser.ts index 0f92955..868dd91 100644 --- a/packages/overlayscrollbars/tests/playwright/setups/structureSetup/nesting/index.browser.ts +++ b/packages/overlayscrollbars/tests/playwright/setups/structureSetup/nesting/index.browser.ts @@ -7,8 +7,11 @@ import { timeout } from '@/testing-browser/timeout'; import { setTestResult, waitForOrFailTest } from '@/testing-browser/TestResult'; import { addClass, each, isArray, removeAttr, style } from 'support'; +// @ts-ignore +window.OverlayScrollbars = OverlayScrollbars; + OverlayScrollbars.env().setDefaultOptions({ - nativeScrollbarsOverlaid: { initialize: true }, + nativeScrollbarsOverlaid: { initialize: false }, }); const startBtn: HTMLButtonElement | null = document.querySelector('#start'); @@ -33,6 +36,7 @@ let rootUpdateCount = 0; let aUpdateCount = 0; let bUpdateCount = 0; let cUpdateCount = 0; + const rootInstance = OverlayScrollbars( { target: targetRoot!, padding: true }, {}, diff --git a/packages/overlayscrollbars/tests/playwright/setups/structureSetup/update/index.browser.ts b/packages/overlayscrollbars/tests/playwright/setups/structureSetup/update/index.browser.ts index 5faff24..049ba4b 100644 --- a/packages/overlayscrollbars/tests/playwright/setups/structureSetup/update/index.browser.ts +++ b/packages/overlayscrollbars/tests/playwright/setups/structureSetup/update/index.browser.ts @@ -25,6 +25,13 @@ import { timeout } from '@/testing-browser/timeout'; import { Options } from 'options'; import { PartialOptions } from 'typings'; +// @ts-ignore +window.OverlayScrollbars = OverlayScrollbars; + +OverlayScrollbars.env().setDefaultOptions({ + nativeScrollbarsOverlaid: { initialize: true }, +}); + interface Metrics { offset: { left: number; @@ -122,7 +129,7 @@ const osInstance = // @ts-ignore (window.os = OverlayScrollbars( initObj, - { nativeScrollbarsOverlaid: { initialize: true } }, + {}, { updated() { updateCount++; diff --git a/packages/overlayscrollbars/types/overlayscrollbars.d.ts b/packages/overlayscrollbars/types/overlayscrollbars.d.ts index 17fb050..9b3289f 100644 --- a/packages/overlayscrollbars/types/overlayscrollbars.d.ts +++ b/packages/overlayscrollbars/types/overlayscrollbars.d.ts @@ -12,11 +12,8 @@ interface XY { x: T; y: T; } -type EventListener, Name extends keyof EventMap> = (...args: EventMap[Name] extends undefined ? [ -] : [ - args: EventMap[Name] -]) => void; -type InitialEventListeners> = { +type EventListener, Name extends keyof EventMap> = (...args: EventMap[Name]) => void; +type InitialEventListeners> = { [K in keyof EventMap]?: EventListener | EventListener[]; }; type OverflowBehavior = "hidden" | "scroll" | "visible" | "visible-hidden" | "visible-scroll"; @@ -125,16 +122,6 @@ type DynamicInitializationElement = ((...args: Args) => Dyna type InitializtationElementStrategy = Exclude; type GeneralInitialEventListeners = InitialEventListeners; type GeneralEventListener = EventListener; -/* -onScrollStart : null, -onScroll : null, -onScrollStop : null, -onOverflowChanged : null, -onOverflowAmountChanged : null, // fusion with onOverflowChanged -onDirectionChanged : null, // gone -onContentSizeChanged : null, // gone -onHostSizeChanged : null, // gone -*/ interface OverlayScrollbarsStatic { (target: InitializationTarget | InitializationTargetObject, options?: PartialOptions, eventListeners?: GeneralInitialEventListeners): OverlayScrollbars; plugin(osPlugin: OSPlugin | OSPlugin[]): void; @@ -163,6 +150,7 @@ interface State { overflowAmount: XY; overflowStyle: XY; hasOverflow: XY; + destroyed: boolean; } interface Elements { target: HTMLElement; @@ -184,24 +172,40 @@ interface OnUpdatedEventListenerArgs { changedOptions: PartialOptions; force: boolean; } -interface EventListenerMap { - initialized: undefined; - initializationWithdrawn: undefined; - updated: OnUpdatedEventListenerArgs; - destroyed: undefined; -} +type EventListenerMap = { + /** + * Triggered after all elements are initialized and appended. + */ + initialized: [ + instance: OverlayScrollbars + ]; + /** + * Triggered after an update. + */ + updated: [ + instance: OverlayScrollbars, + onUpdatedArgs: OnUpdatedEventListenerArgs + ]; + /** + * Triggered after all elements, observers and events are destroyed. + */ + destroyed: [ + instance: OverlayScrollbars, + withdrawn: boolean + ]; +}; type EventListener$0 = GeneralEventListener; interface OverlayScrollbars { options(): Options; options(newOptions?: PartialOptions): Options; - update(force?: boolean): void; + update(force?: boolean): OverlayScrollbars; destroy(): void; state(): State; elements(): Elements; on(name: Name, listener: EventListener$0): () => void; on(name: Name, listener: EventListener$0[]): () => void; - off(name: Name, listener?: EventListener$0): void; - off(name: Name, listener?: EventListener$0[]): void; + off(name: Name, listener: EventListener$0): void; + off(name: Name, listener: EventListener$0[]): void; } /** * Notes: