From a548b604840d1e72038cc01a7d658b5969ea99c1 Mon Sep 17 00:00:00 2001 From: Rene Haas Date: Mon, 18 Jul 2022 21:56:48 +0200 Subject: [PATCH] improve code --- .../dist/overlayscrollbars.css | 13 +- .../dist/overlayscrollbars.esm.js | 323 +++++----- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 567 ++++++++++-------- .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- .../scrollbarsSetup.elements.ts | 4 +- .../types/overlayscrollbars.d.ts | 5 +- 9 files changed, 505 insertions(+), 415 deletions(-) diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.css b/packages/overlayscrollbars/dist/overlayscrollbars.css index b3077d0..d96e06a 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.css +++ b/packages/overlayscrollbars/dist/overlayscrollbars.css @@ -126,11 +126,14 @@ opacity: 0; visibility: hidden; } +body > .os-scrollbar { + position: fixed; } + .os-scrollbar-transitionless { transition: none; } .os-scrollbar-track { - pointer-events: auto; + pointer-events: none; position: relative; height: 100%; width: 100%; @@ -138,14 +141,14 @@ border: none !important; } .os-scrollbar-handle { - pointer-events: auto; + pointer-events: none; position: absolute; width: 100%; height: 100%; } -.os-scrollbar-handle-off, -.os-scrollbar-track-off { - pointer-events: none; } +.os-scrollbar-handle-interactive, +.os-scrollbar-track-interactive { + pointer-events: auto; } .os-scrollbar-unusable, .os-scrollbar-unusable * { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index ae0a5db..d7ea909 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -183,7 +183,7 @@ const getSetProp = (t, n, o, s) => { if (isUndefined(s)) { return o ? o[t] : n; } - o && (o[t] = s); + o && !isNull(s) && false !== s && (o[t] = s); }; const attr = (t, n, o) => { @@ -194,10 +194,12 @@ const attr = (t, n, o) => { }; const attrClass = (t, n, o, s) => { - const e = attr(t, n) || ""; - const c = new Set(e.split(" ")); - c[s ? "add" : "delete"](o); - attr(t, n, from(c).join(" ").trim()); + if (o) { + const e = attr(t, n) || ""; + const c = new Set(e.split(" ")); + c[s ? "add" : "delete"](o); + attr(t, n, from(c).join(" ").trim()); + } }; const hasAttrClass = (t, n, o) => { @@ -766,6 +768,7 @@ const K = { initialize: false }, scrollbars: { + theme: "os-theme-dark", visibility: "auto", autoHide: "never", autoHideDelay: 800, @@ -926,6 +929,7 @@ const lt = { y: ct }, scrollbars: { + theme: [ nt.string, nt.null ], visibility: rt, autoHide: it, autoHideDelay: ot, @@ -1223,8 +1227,8 @@ const createEnvironment = () => { y: 0 === l.y }; const d = { - k: !a, - B: false + padding: !a, + content: false }; const f = assignDeep({}, K); const _ = { @@ -1232,19 +1236,19 @@ const createEnvironment = () => { P: u, T: a, L: "-1" === style(o, "zIndex"), - F: getRtlScrollBehavior(o, s), - Y: getFlexboxGlue(o, s), - q: t => e("_", t), - G: assignDeep.bind(0, {}, d), - N(t) { + k: getRtlScrollBehavior(o, s), + B: getFlexboxGlue(o, s), + F: t => e("_", t), + Y: assignDeep.bind(0, {}, d), + q(t) { assignDeep(d, t); }, - U: assignDeep.bind(0, {}, f), - W(t) { + G: assignDeep.bind(0, {}, f), + N(t) { assignDeep(f, t); }, - X: assignDeep({}, d), - J: assignDeep({}, f) + U: assignDeep({}, d), + W: assignDeep({}, f) }; removeAttr(o, "style"); removeElements(o); @@ -1292,10 +1296,10 @@ const addDataAttrHost = (t, n) => { const createStructureSetupElements = t => { const n = getEnvironment(); - const {G: o, T: s} = n; + const {Y: o, T: s} = n; const e = getPlugins()[pt]; const c = e && e.I; - const {K: r, Z: i, k: l, B: a} = o(); + const {host: r, viewport: i, padding: l, content: a} = o(); const d = isHTMLElement(t); const f = t; const _ = d ? t : f.target; @@ -1310,11 +1314,11 @@ const createStructureSetupElements = t => { const S = [ y(mt, i, f.viewport), y(mt, i), y(mt) ].filter((t => !b ? t !== _ : true))[0]; const O = S === _; const z = { - tt: _, - K: g ? y(mt, r, f.host) : _, - Z: S, - k: !O && m(mt, l, f.padding), - B: !O && m(mt, a, f.content), + X: _, + J: g ? y(mt, r, f.host) : _, + K: S, + Z: !O && m(mt, l, f.padding), + tt: !O && m(mt, a, f.content), nt: !O && !s && c && c(n), ot: p, st: v, @@ -1332,7 +1336,7 @@ const createStructureSetupElements = t => { return push(t, o && !parent(o) ? o : false); }), []); const elementIsGenerated = t => t ? indexOf(T, t) > -1 : null; - const {tt: L, K: H, k: M, Z: R, B: D, nt: j} = z; + const {X: L, J: H, Z: M, K: R, tt: D, nt: j} = z; const V = []; const k = g && elementIsGenerated(H); const B = g ? L : contents([ D, R, M, H, L ].find((t => false === elementIsGenerated(t)))); @@ -1382,10 +1386,10 @@ const createStructureSetupElements = t => { }; const createTrinsicUpdateSegment = (t, n) => { - const {B: o} = t; + const {tt: o} = t; const [s] = n; return t => { - const {Y: n} = getEnvironment(); + const {B: n} = getEnvironment(); const {_t: e} = s(); const {gt: c} = t; const r = (o || !n) && c; @@ -1403,14 +1407,14 @@ const createTrinsicUpdateSegment = (t, n) => { const createPaddingUpdateSegment = (t, n) => { const [o, s] = n; - const {K: e, k: c, Z: r, ut: i} = t; + const {J: e, Z: c, K: r, ut: i} = t; const [l, a] = createCache({ _: equalTRBL, u: topRightBottomLeft() }, topRightBottomLeft.bind(0, e, "padding", "")); return (t, n, e) => { let [u, d] = a(e); - const {T: f, Y: _} = getEnvironment(); + const {T: f, B: _} = getEnvironment(); const {wt: g} = o(); const {ht: h, vt: v, bt: w} = t; const [p, b] = n("paddingAbsolute"); @@ -1441,7 +1445,7 @@ const createPaddingUpdateSegment = (t, n) => { style(c || r, e); style(r, i); s({ - k: u, + Z: u, yt: !t, M: c ? i : assignDeep({}, e, i) }); @@ -1496,8 +1500,8 @@ const overflowIsVisible = t => 0 === t.indexOf(Ct); const createOverflowUpdateSegment = (t, n) => { const [o, s] = n; - const {K: e, k: c, Z: r, nt: i, ut: l, ft: a} = t; - const {V: u, Y: d, T: f, P: _} = getEnvironment(); + const {J: e, Z: c, K: r, nt: i, ut: l, ft: a} = t; + const {V: u, B: d, T: f, P: _} = getEnvironment(); const g = getPlugins()[pt]; const h = !l && !f && (_.x || _.y); const [v, w] = createCache(zt, fractionalSize.bind(0, r)); @@ -1510,7 +1514,7 @@ const createOverflowUpdateSegment = (t, n) => { height: "" }); if (n) { - const {yt: n, k: s} = o(); + const {yt: n, Z: s} = o(); const {xt: c, R: i} = t; const l = fractionalSize(e); const a = clientSize(e); @@ -1704,8 +1708,8 @@ const prepareUpdateHints = (t, n, o) => { }; const createStructureSetupUpdate = (t, n) => { - const {Z: o} = t; - const {T: s, P: e, Y: c} = getEnvironment(); + const {K: o} = t; + const {T: s, P: e, B: c} = getEnvironment(); const r = !s && (e.x || e.y); const i = [ createTrinsicUpdateSegment(t, n), createPaddingUpdateSegment(t, n), createOverflowUpdateSegment(t, n) ]; return (t, n, s) => { @@ -1727,12 +1731,8 @@ const createStructureSetupUpdate = (t, n) => { each(i, (n => { d = prepareUpdateHints(d, n(d, t, !!s) || {}, s); })); - if (isNumber(a)) { - scrollLeft(o, a); - } - if (isNumber(u)) { - scrollTop(o, u); - } + scrollLeft(o, a); + scrollTop(o, u); return d; }; }; @@ -1746,7 +1746,7 @@ const domRectHasDimensions = t => t && (t.height || t.width); const createSizeObserver = (t, n, o) => { const {Pt: s = false, Lt: e = false} = o || {}; const c = getPlugins()[_t]; - const {F: r} = getEnvironment(); + const {k: r} = getEnvironment(); const i = createDOM(`
`); const l = i[0]; const a = l.firstChild; @@ -2034,8 +2034,8 @@ const createStructureSetupObservers = (t, n, o) => { let e; let c; const [, r] = n; - const {K: i, Z: l, B: a, rt: d, ut: f, dt: _, ft: g} = t; - const {T: h, Y: v} = getEnvironment(); + const {J: i, K: l, tt: a, rt: d, ut: f, dt: _, ft: g} = t; + const {T: h, B: v} = getEnvironment(); const [w] = createCache({ _: equalWH, u: { @@ -2044,14 +2044,21 @@ const createStructureSetupObservers = (t, n, o) => { } }, (() => { const t = _(L, O); - t && g(L, O); - const n = scrollSize(a); - const o = scrollSize(l); - const s = fractionalSize(l); - t && g(L, O, true); + const n = _(T, ""); + const o = n && scrollLeft(l); + const s = n && scrollTop(l); + g(L, O); + g(T, ""); + const e = scrollSize(a); + const c = scrollSize(l); + const r = fractionalSize(l); + g(L, O, t); + g(T, "", n); + scrollLeft(l, o); + scrollTop(l, s); return { - w: o.w + n.w + s.w, - h: o.h + n.h + s.h + w: c.w + e.w + r.w, + h: c.h + e.h + r.h }; })); const p = d ? Lt : Ht.concat(Lt); @@ -2210,7 +2217,7 @@ const Mt = { }; const Rt = { - k: { + Z: { t: 0, r: 0, b: 0, @@ -2285,15 +2292,21 @@ const stopRootClickPropagation = (t, n) => on(t, "mousedown", on.bind(0, n, "cli }); const createScrollbarsSetupElements = (t, n) => { - const {G: o} = getEnvironment(); - const {qt: s} = o(); - const {st: e, tt: c, K: r, Z: i, lt: l} = n; - const a = !l && t.scrollbarsSlot; + const {Y: o} = getEnvironment(); + const {scrollbarsSlot: s} = o(); + const {st: e, X: c, J: r, K: i, lt: l} = n; + const a = l ? null : t.scrollbarsSlot; const u = dynamicInitializationElement([ c, r, i ], (() => r), s, a); - const scrollbarsAddRemoveClass = (t, n, o) => { - const s = o ? addClass : removeClass; + const scrollbarsAddRemoveClass = (t, n, o, s) => { + const e = o ? addClass : removeClass; each(t, (t => { - s(t.Gt, n); + e((s || noop)(t) || t.qt, n); + })); + }; + const scrollbarsHandleStyle = (t, n) => { + each(t, (t => { + const [o, s] = n(t); + style(o, s); })); }; const d = []; @@ -2305,13 +2318,13 @@ const createScrollbarsSetupElements = (t, n) => { const n = t ? F : Y; const o = t ? f : g; const s = isEmptyArray(o) ? W : ""; - const c = createDiv(`${B} ${n} ${s} os-theme-dark`); + const c = createDiv(`${B} ${n} ${s}`); const r = createDiv(q); const i = createDiv(G); const l = { - Gt: c, - Nt: r, - Ut: i + qt: c, + Gt: r, + Nt: i }; appendChildren(c, r); appendChildren(r, i); @@ -2328,8 +2341,8 @@ const createScrollbarsSetupElements = (t, n) => { const w = generateScrollbarDOM.bind(0, true); const p = generateScrollbarDOM.bind(0, false); const appendElements = () => { - appendChildren(u, f[0].Gt); - appendChildren(u, g[0].Gt); + appendChildren(u, f[0].qt); + appendChildren(u, g[0].qt); _((() => { h(W); v(W); @@ -2338,19 +2351,23 @@ const createScrollbarsSetupElements = (t, n) => { w(); p(); return [ { - Wt: { - Xt: f, - Jt: w, - Kt: h + Ut: { + Wt: f, + Xt: w, + Jt: h, + Kt: scrollbarsHandleStyle.bind(0, f) }, Zt: { - Xt: g, - Jt: p, - Kt: v + Wt: g, + Xt: p, + Jt: v, + Kt: scrollbarsHandleStyle.bind(0, g) } }, appendElements, runEachAndClear.bind(0, d) ]; }; +const {min: Vt} = Math; + const createSelfCancelTimeout = t => { let n; const o = t ? _ : f; @@ -2361,120 +2378,146 @@ const createSelfCancelTimeout = t => { }, () => s(n) ]; }; +const refreshScrollbarHandleLength = (t, n, o) => { + const {zt: s, Ot: e} = n; + const c = o ? "x" : "y"; + const r = e[c]; + const i = s[c]; + const l = Vt(1, r / (r + i)); + t((t => [ t.Nt, { + [o ? "width" : "height"]: `${(100 * l).toFixed(3)}%` + } ])); +}; + const createScrollbarsSetup = (t, n, o) => { - let s = 0; + let s; let e; let c; let r; let i; - const l = createState({}); - const [a] = l; - const [u, d] = createSelfCancelTimeout(); - const [f, _] = createSelfCancelTimeout(); - const [g, h] = createSelfCancelTimeout(100); - const [v, w] = createSelfCancelTimeout(100); - const [p, b] = createSelfCancelTimeout((() => s)); - const [y, m, S] = createScrollbarsSetupElements(t, o.Yt); - const {K: x, Z: C} = o.Yt; - const {Wt: $, Zt: O} = y; - const {Kt: z} = $; - const {Kt: A} = O; + let l = 0; + const a = createState({}); + const [u] = a; + const [d, f] = createSelfCancelTimeout(); + const [_, g] = createSelfCancelTimeout(); + const [h, v] = createSelfCancelTimeout(100); + const [w, p] = createSelfCancelTimeout(100); + const [b, y] = createSelfCancelTimeout((() => l)); + const [m, S, x] = createScrollbarsSetupElements(t, o.Yt); + const {J: C, K: $} = o.Yt; + const {Ut: O, Zt: z} = m; + const {Jt: A, Kt: I} = O; + const {Jt: T, Kt: E} = z; const manageScrollbarsAutoHide = (t, n) => { - b(); + y(); if (t) { - z(J); A(J); + T(J); } else { const hide = () => { - z(J, true); A(J, true); + T(J, true); }; - if (s > 0 && !n) { - p(hide); + if (l > 0 && !n) { + b(hide); } else { hide(); } } }; const onHostMouseEnter = () => { - i = c; - i && manageScrollbarsAutoHide(true); + r = e; + r && manageScrollbarsAutoHide(true); }; - const I = [ h, b, w, _, d, S, on(x, "mouseover", onHostMouseEnter, { + const P = [ v, y, p, g, f, x, on(C, "mouseover", onHostMouseEnter, { O: true - }), on(x, "mouseenter", onHostMouseEnter), on(x, "mouseleave", (() => { - i = false; - c && manageScrollbarsAutoHide(false); - })), on(x, "mousemove", (() => { - e && u((() => { - h(); + }), on(C, "mouseenter", onHostMouseEnter), on(C, "mouseleave", (() => { + r = false; + e && manageScrollbarsAutoHide(false); + })), on(C, "mousemove", (() => { + s && d((() => { + v(); manageScrollbarsAutoHide(true); - v((() => { - e && manageScrollbarsAutoHide(false); + w((() => { + s && manageScrollbarsAutoHide(false); })); })); - })), on(C, "scroll", (() => { - r && f((() => { + })), on($, "scroll", (() => { + c && _((() => { manageScrollbarsAutoHide(true); - g((() => { - r && !i && manageScrollbarsAutoHide(false); + h((() => { + c && !r && manageScrollbarsAutoHide(false); })); })); })) ]; - const T = a.bind(0); - T.Yt = y; - T.Ft = m; - return [ (t, i, l) => { - const {Tt: a, Et: u, It: d} = l; - const f = createOptionCheck(n, t, i); - const [_, g] = f("scrollbars.visibility"); - const [h, v] = f("scrollbars.autoHide"); - const [w] = f("scrollbars.autoHideDelay"); - f("scrollbars.dragScrolling"); - f("scrollbars.touchSupport"); - const p = d || g; + const L = u.bind(0); + L.Yt = m; + L.Ft = S; + return [ (t, r, a) => { + const {Tt: u, Et: d, It: f} = a; + const _ = createOptionCheck(n, t, r); + const g = o(); + const [h, v] = _("scrollbars.theme"); + const [w, p] = _("scrollbars.visibility"); + const [b, y] = _("scrollbars.autoHide"); + const [m] = _("scrollbars.autoHideDelay"); + _("scrollbars.dragScrolling"); + _("scrollbars.touchSupport"); + const S = u || d; + const x = f || p; const setScrollbarVisibility = (t, n) => { - const o = "visible" === _ || "auto" === _ && "scroll" === t; + const o = "visible" === w || "auto" === w && "scroll" === t; n(N, o); return o; }; - s = w; - if (p) { - const {Ct: t} = o(); - const n = setScrollbarVisibility(t.x, z); - const s = setScrollbarVisibility(t.y, A); - const e = n && s; - z(U, !e); - A(U, !e); + l = m; + if (x) { + const {Ct: t} = g; + const n = setScrollbarVisibility(t.x, A); + const o = setScrollbarVisibility(t.y, T); + const s = n && o; + A(U, !s); + T(U, !s); } if (v) { - e = "move" === h; - c = "leave" === h; - r = "never" !== h; - manageScrollbarsAutoHide(!r, true); + A(i); + T(i); + A(h, true); + T(h, true); + i = h; } - }, T, runEachAndClear.bind(0, I) ]; + if (y) { + s = "move" === b; + e = "leave" === b; + c = "never" !== b; + manageScrollbarsAutoHide(!c, true); + } + if (S) { + refreshScrollbarHandleLength(I, g, true); + refreshScrollbarHandleLength(E, g); + } + }, L, runEachAndClear.bind(0, P) ]; }; -const Vt = new Set; +const kt = new Set; -const kt = new WeakMap; +const Bt = new WeakMap; const addInstance = (t, n) => { - kt.set(t, n); - Vt.add(t); + Bt.set(t, n); + kt.add(t); }; const removeInstance = t => { + Bt.delete(t); kt.delete(t); - Vt.delete(t); }; -const getInstance = t => kt.get(t); +const getInstance = t => Bt.get(t); const OverlayScrollbars = (t, n, o) => { let s = false; - const {U: e, P: c, q: r} = getEnvironment(); + const {G: e, P: c, F: r} = getEnvironment(); const i = getPlugins(); const l = isHTMLElement(t) ? t : t.target; const a = getInstance(l); @@ -2520,7 +2563,7 @@ const OverlayScrollbars = (t, n, o) => { t && n && _(t, n); }, state() { - const {Ot: t, zt: n, Ct: o, At: e, k: c, yt: r} = v(); + const {Ot: t, zt: n, Ct: o, At: e, Z: c, yt: r} = v(); return assignDeep({}, { overflowEdge: t, overflowAmount: n, @@ -2532,7 +2575,7 @@ const OverlayScrollbars = (t, n, o) => { }); }, elements() { - const {tt: t, K: n, k: o, Z: s, B: e} = v.Yt; + const {X: t, J: n, Z: o, K: s, tt: e} = v.Yt; return assignDeep({}, { target: t, host: n, @@ -2587,7 +2630,7 @@ const OverlayScrollbars = (t, n, o) => { OverlayScrollbars.plugin = addPlugin; OverlayScrollbars.env = () => { - const {V: t, P: n, T: o, F: s, Y: e, L: c, X: r, J: i, G: l, N: a, U: u, W: d} = getEnvironment(); + const {V: t, P: n, T: o, k: s, B: e, L: c, U: r, W: i, Y: l, q: a, G: u, N: d} = getEnvironment(); return assignDeep({}, { scrollbarsSize: t, scrollbarsOverlaid: n, diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 040abc9..7b51155 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/array.ts","../src/support/dom/style.ts","../src/support/cache.ts","../src/support/utils/types.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/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/plugins/plugins.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/plugins/optionsValidationPlugin/validation.ts","../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.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/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["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 | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | false | 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 | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | false | 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 | false | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | false | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | false | 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 const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\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 args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\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 // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\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\n\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","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\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: 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 const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\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 const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\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 const 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 const 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 const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = 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 const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = 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 { 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\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\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};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: 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 const 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\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): T;\r\n (elm: HTMLElement | false | null | undefined, value: T): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T): number | void;\r\n};\r\n\r\nconst 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 const 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}) as Attr;\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 const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\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 const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\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 const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Node | Element | Node | false | null | undefined;\r\ntype OutputElementType = Node | 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\nexport const 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 =\r\n jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\nexport const setT = window.setTimeout as (handler: TimerHandler, timeout?: number) => number;\r\nexport const clearT = window.clearTimeout as (id?: number) => void;\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\ntype ClassContainingElement = Node | Element | false | null | undefined;\r\ntype ClassName = string | false | null | undefined;\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: ClassContainingElement,\r\n className: ClassName,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n const classList = elm && (elm as Element).classList;\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (classList && 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(classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: ClassContainingElement, className: ClassName): boolean =>\r\n 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 = (elm: ClassContainingElement, className: ClassName): 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 = (elm: ClassContainingElement, className: ClassName): (() => 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 = (classNameA: ClassName, classNameB: ClassName) => {\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, setT, clearT } from 'support/compatibility/apis';\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 maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear: () => void = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\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 (clear !== noop) {\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 clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\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 clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\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, runEachAndClear } 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() {\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) ?? doSupportPassiveEvents;\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 = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) 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 runEachAndClear.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 type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: 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 const addEvent: 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 const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n 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 && !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 [AddEvent, RemoveEvent, TriggerEvent];\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 = (\r\n changedOptions: PartialOptions,\r\n force: boolean,\r\n ...args: T\r\n) => void;\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<\r\n DynamicState,\r\n StaticState extends Record = Record,\r\n A extends any[] = []\r\n> = [update: SetupUpdate, state: (() => DynamicState) & StaticState, destroy: () => void];\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\nexport const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\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 ScrollbarVisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type ScrollbarAutoHideBehavior = '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: ScrollbarVisibilityBehavior;\r\n autoHide: ScrollbarAutoHideBehavior;\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 { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","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 {\r\n Options,\r\n OverflowBehavior,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { PartialOptions } from 'typings';\r\nimport type { Plugin } from 'plugins';\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: Plugin = {\r\n [optionsValidationPluginName]: {\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 {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type SizeObserverPluginInstance = {\r\n _: (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean\r\n ) => [appearCallback: () => any, offFns: (() => any)[]];\r\n};\r\n\r\nconst scrollAmount = 3333333;\r\nconst scrollEventName = 'scroll';\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const sizeObserverPlugin: Plugin = {\r\n [sizeObserverPluginName]: {\r\n _: (listenerElement, onSizeChangedCallback, observeAppearChange) => {\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 onSizeChangedCallback(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 stopPropagation(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 const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), 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 return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import {\r\n keys,\r\n attr,\r\n WH,\r\n style,\r\n addClass,\r\n removeClass,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n UpdateCache,\r\n XY,\r\n} from 'support';\r\nimport { classNameViewportArrange } from 'classnames';\r\nimport type { StyleObject } from 'typings';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type {\r\n ViewportOverflowState,\r\n GetViewportOverflowState,\r\n HideNativeScrollbars,\r\n} from 'setups/structureSetup/updateSegments/overflowUpdateSegment';\r\nimport type { InternalEnvironment } from 'environment';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type ArrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n) => boolean;\r\n\r\nexport type UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nexport type UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n) => UndoViewportArrangeResult;\r\n\r\nexport type ScrollbarsHidingPluginInstance = {\r\n _createUniqueViewportArrangeElement(env: InternalEnvironment): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: boolean,\r\n flexboxGlue: boolean,\r\n viewport: HTMLElement,\r\n viewportArrange: HTMLStyleElement | false | null | undefined,\r\n getState: () => StructureSetupState,\r\n getViewportOverflowState: GetViewportOverflowState,\r\n hideNativeScrollbars: HideNativeScrollbars\r\n ): [ArrangeViewport, UndoArrangeViewport];\r\n _envWindowZoom(): (\r\n envInstance: InternalEnvironment,\r\n updateNativeScrollbarSizeCache: UpdateCache>,\r\n triggerEvent: () => void\r\n ) => void;\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst { round, abs } = Math;\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = env;\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 _overflowUpdateSegment: (\r\n doViewportArrange,\r\n flexboxGlue,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\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: ArrangeViewport = (\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n directionIsRTL\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 ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }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 * 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: UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n viewportOverflowState?\r\n ) => {\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 [arrangeViewport, undoViewportArrange];\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n\r\n return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {\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) {\r\n return;\r\n }\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 && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\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};\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 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\nimport { getPlugins, ScrollbarsHidingPluginInstance, scrollbarsHidingPluginName } from 'plugins';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: 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\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\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 clear && removeElements(measureElm);\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 getNativeScrollbarsHiding = (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 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 {\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n getNativeScrollbarSize.bind(0, body, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\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 (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let resizeFn: undefined | ReturnType;\r\n window.addEventListener('resize', () => {\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n\r\n resizeFn = resizeFn || (scrollbarsHidingPlugin && scrollbarsHidingPlugin._envWindowZoom());\r\n resizeFn && resizeFn(env, updateNativeScrollbarSizeCache, triggerEvent.bind(0, '_'));\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 runEachAndClear,\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 classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\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 | null | undefined;\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\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 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 env = getEnvironment();\r\n const { _getInitializationStrategy, _nativeScrollbarsHiding } = env;\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\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 && _nativeScrollbarsHiding;\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:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\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 (_nativeScrollbarsHiding && !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, runEachAndClear.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 createTrinsicUpdateSegment: 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 createPaddingUpdateSegment: 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 { _nativeScrollbarsHiding: _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 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 equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\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 { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\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\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst max0 = max.bind(0, 0);\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 = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.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 createOverflowUpdateSegment: 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 _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 [updateOverflowEdge, getCurrentOverflowEdgeCache] = 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 = !(_nativeScrollbarsOverlaid.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: GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars,\r\n viewportStyleObj?\r\n ) => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarsHiding && !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 && !_nativeScrollbarsHiding ? 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', _nativeScrollbarsOverlaid.x, _nativeScrollbarsSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarsOverlaid.y, _nativeScrollbarsSize.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 * 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: HideNativeScrollbars = (\r\n viewportOverflowState,\r\n directionIsRTL,\r\n viewportArrange,\r\n viewportStyleObj\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 const [arrangeViewport, undoViewportArrange] = scrollbarsHidingPlugin\r\n ? scrollbarsHidingPlugin._overflowUpdateSegment(\r\n doViewportArrange,\r\n _flexboxGlue,\r\n _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\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 _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.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 let overflowEdgeCache = getCurrentOverflowEdgeCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\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 const overflowAmountScrollSize = {\r\n w: max0(max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n arrangedViewportClientSize.h +\r\n max0(viewportclientSize.h - viewportScrollSize.h) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\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 overflowEdgeChanged ||\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 _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\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 _overflowEdgeChanged: overflowEdgeChanged,\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 createTrinsicUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createOverflowUpdateSegment,\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 _overflowEdgeChanged: 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 {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdateSegment(structureSetupElements, state),\r\n createPaddingUpdateSegment(structureSetupElements, state),\r\n createOverflowUpdateSegment(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 _overflowEdgeChanged: 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 scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\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 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 sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\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 if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\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, 'scroll', (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 stopPropagation(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, 'animationstart', 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 runEachAndClear(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 runEachAndClear,\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 TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n destroy: () => void,\r\n update: () => void | Parameters\r\n];\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: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH,\r\n fromRecords?: true\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n !fromRecords && onTrinsicChangedCallback(heightIntrinsic);\r\n return [heightIntrinsic];\r\n }\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n entries: IntersectionObserverEntry[],\r\n fromRecords?: true\r\n ) => {\r\n if (entries && entries.length > 0) {\r\n return triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n (entries) => intersectionObserverCallback(entries),\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 () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n () => {\r\n if (intersectionObserverInstance) {\r\n return intersectionObserverCallback(intersectionObserverInstance.takeRecords(), true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n 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 = [\r\n destroy: () => void,\r\n update: () => void | false | Parameters>\r\n];\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 debouncedEventContentChange = 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 const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\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 = (\r\n mutations: MutationRecord[],\r\n fromRecords?: true\r\n ): void | Parameters> => {\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 !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] as Parameters>;\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n !fromRecords &&\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n return [targetChangedAttrs, targetStyleChanged] as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!((mutations) =>\r\n observerCallback(mutations)\r\n );\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 debouncedEventContentChange._flush();\r\n\r\n const records = mutationObserver.takeRecords();\r\n return !isEmptyArray(records) && observerCallback(records, true);\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 closest,\r\n assignDeep,\r\n push,\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 classNameScrollbar,\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 destroy: () => void,\r\n updateObservers: () => Partial,\r\n updateObserversOptions: StructureSetupObserversUpdate\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 { _nativeScrollbarsHiding: _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, fromRecords?: true) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: Partial = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && structureSetupUpdate(updateHints);\r\n return updateHints;\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, fromRecords?: true) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n const updateHints: Partial = {\r\n _contentMutation: contentSizeChanged,\r\n };\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 !fromRecords && updateFn(updateHints);\r\n }\r\n return updateHints;\r\n };\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ) => {\r\n const updateHints: Partial = { _hostMutation: targetStyleChanged };\r\n if (targetStyleChanged) {\r\n !fromRecords && structureSetupUpdateWithDebouncedAdaptiveUpdateHints(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n return updateHints;\r\n };\r\n\r\n const trinsicObserver =\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, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n }\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 () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n trinsicObserver && trinsicObserver[0](); // destroy\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[1](); // update\r\n const trinsicUpdateResult = trinsicObserver && trinsicObserver[1](); // update\r\n\r\n if (hostUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onHostMutation.apply(\r\n 0,\r\n push(hostUpdateResult, true) as [\r\n ...updateResult: typeof hostUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (contentUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onContentMutation.apply(\r\n 0,\r\n push(contentUpdateResult, true) as [\r\n ...updateResult: typeof contentUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (trinsicUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onTrinsicChanged.apply(\r\n 0,\r\n push(trinsicUpdateResult as any[], true) as [\r\n ...updateResult: typeof trinsicUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n\r\n return updateHints;\r\n },\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, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\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};\r\n","import { createEventListenerHub, isEmptyObject, keys } 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 _overflowEdge: XY;\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 initialXYNumber = { x: 0, y: 0 };\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 _overflowEdge: initialXYNumber,\r\n _overflowAmount: initialXYNumber,\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 triggerUpdateEvent: (...args: StructureSetupEventMap['u']) => void = (\r\n updateHints,\r\n changedOptions,\r\n force\r\n ) => {\r\n const truthyUpdateHints = keys(updateHints).some((key) => updateHints[key]);\r\n\r\n if (truthyUpdateHints || !isEmptyObject(changedOptions) || force) {\r\n triggerEvent('u', [updateHints, changedOptions, force]);\r\n }\r\n };\r\n const [destroyObservers, updateObservers, updateObserversOptions] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerUpdateEvent(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 updateObserversOptions(checkOption);\r\n triggerUpdateEvent(\r\n updateStructure(checkOption, updateObservers(), force),\r\n changedOptions,\r\n !!force\r\n );\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 {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n each,\r\n isEmptyArray,\r\n on,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n classNamesScrollbarInteraction,\r\n classNamesScrollbarTransitionless,\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 ScrollbarsSetupElement {\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _addRemoveClass: (classNames: string, add?: boolean) => void;\r\n // _removeClass: (classNames: string) => void;\r\n /*\r\n _addEventListener: () => void;\r\n _removeEventListener: () => void;\r\n */\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\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 interactionStartEventNames = 'touchstart mouseenter';\r\nconst interactionEndEventNames = 'touchend touchcancel mouseleave';\r\nconst stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>\r\n on(\r\n scrollbar,\r\n 'mousedown',\r\n on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),\r\n { _capture: true }\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 { _documentElm, _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 const scrollbarsAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string,\r\n add?: boolean\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action(scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const addRemoveClassHorizontal = scrollbarsAddRemoveClass.bind(0, horizontalScrollbars);\r\n const addRemoveClassVertical = scrollbarsAddRemoveClass.bind(0, verticalScrollbars);\r\n const generateScrollbarDOM = (horizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = horizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;\r\n const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';\r\n const scrollbar = createDiv(\r\n `${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass} os-theme-dark`\r\n );\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n push(arrToPush, result);\r\n push(destroyFns, [\r\n removeElements.bind(0, scrollbar),\r\n on(scrollbar, interactionStartEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction, true);\r\n addRemoveClassVertical(classNamesScrollbarInteraction, true);\r\n }),\r\n on(scrollbar, interactionEndEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction);\r\n addRemoveClassVertical(classNamesScrollbarInteraction);\r\n }),\r\n stopRootClickPropagation(scrollbar, _documentElm),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = generateScrollbarDOM.bind(0, true);\r\n const generateVerticalScrollbarStructure = generateScrollbarDOM.bind(0, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n setT(() => {\r\n addRemoveClassHorizontal(classNamesScrollbarTransitionless);\r\n addRemoveClassVertical(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassHorizontal,\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassVertical,\r\n },\r\n },\r\n appendElements,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOSOptions,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { OverflowStyle } from 'typings';\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\nconst createSelfCancelTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup => {\r\n let globalAutoHideDelay = 0;\r\n let autoHideIsMove: boolean;\r\n let autoHideIsLeave: boolean;\r\n let autoHideNotNever: boolean;\r\n let mouseInHost: boolean;\r\n const state = createState({});\r\n const [getState] = state;\r\n const [requestMouseMoveAnimationFrame, cancelMouseMoveAnimationFrame] = createSelfCancelTimeout();\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = createSelfCancelTimeout();\r\n const [scrollTimeout, clearScrollTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideMoveTimeout, clearAutoHideTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideTimeout, clearAutoTimeout] = createSelfCancelTimeout(() => globalAutoHideDelay);\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupState._elements\r\n );\r\n const { _host, _viewport } = structureSetupState._elements;\r\n const { _horizontal, _vertical } = elements;\r\n const { _addRemoveClass: addRemoveClassHorizontal } = _horizontal;\r\n const { _addRemoveClass: addRemoveClassVertical } = _vertical;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden, true);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden, true);\r\n };\r\n if (globalAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const onHostMouseEnter = () => {\r\n mouseInHost = autoHideIsLeave;\r\n mouseInHost && manageScrollbarsAutoHide(true);\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearScrollTimeout,\r\n clearAutoTimeout,\r\n clearAutoHideTimeout,\r\n cancelScrollAnimationFrame,\r\n cancelMouseMoveAnimationFrame,\r\n destroyElements,\r\n\r\n on(_host, 'mouseover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'mouseenter', onHostMouseEnter),\r\n on(_host, 'mouseleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'mousemove', () => {\r\n autoHideIsMove &&\r\n requestMouseMoveAnimationFrame(() => {\r\n clearScrollTimeout();\r\n manageScrollbarsAutoHide(true);\r\n auotHideMoveTimeout(() => {\r\n autoHideIsMove && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n on(_viewport, 'scroll', () => {\r\n autoHideNotNever &&\r\n requestScrollAnimationFrame(() => {\r\n manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\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, structureUpdateHints) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n\r\n const [visibility, visibilityChanged] =\r\n checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] =\r\n checkOption('scrollbars.autoHide');\r\n const [autoHideDelay] = checkOption('scrollbars.autoHideDelay');\r\n const [dragScrolling, dragScrollingChanged] = checkOption(\r\n 'scrollbars.dragScrolling'\r\n );\r\n const [touchSupport, touchSupportChanged] = checkOption('scrollbars.touchSupport');\r\n\r\n const updateHandleSize = _overflowEdgeChanged || _overflowAmountChanged;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged;\r\n\r\n const setScrollbarVisibility = (\r\n overflowStyle: OverflowStyle,\r\n addRemoveClass: (classNames: string, add?: boolean) => void\r\n ) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n addRemoveClass(classNamesScrollbarVisible, isVisible);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (updateVisibility) {\r\n const { _overflowStyle } = structureSetupState();\r\n\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, addRemoveClassHorizontal);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, addRemoveClassVertical);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n addRemoveClassHorizontal(classNamesScrollbarCornerless, !hasCorner);\r\n addRemoveClassVertical(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideNotNever = autoHide !== 'never';\r\n manageScrollbarsAutoHide(!autoHideNotNever, true);\r\n }\r\n },\r\n scrollbarsSetupState,\r\n runEachAndClear.bind(0, destroyFns),\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 Plugin,\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(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: 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 overflowEdge: XY;\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 overflowEdgeChanged: 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 _nativeScrollbarsOverlaid: _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\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(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: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\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 structureState._addOnUpdatedListener((updateHints, changedOptions, force: boolean) => {\r\n updateScrollbars(changedOptions, force, updateHints);\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 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 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 _overflowEdgeChanged,\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 overflowEdgeChanged: _overflowEdgeChanged,\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 _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\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 scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\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":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","u","_initialValue","_","_equal","g","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","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","setT","setTimeout","clearT","clearTimeout","rnothtmlwhite","classListAction","className","action","classList","clazz","classes","match","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","maxTimeoutId","prevArguments","latestArguments","clear","v","_timeout","p","_maxDelay","m","_mergeParams","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","clearTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","timeoutId","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","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","_ref","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","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","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarAutoHidden","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","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","contentArrangeCounter","abs","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","env","_nativeScrollbarsHiding","_nativeScrollbarStyling","_nativeScrollbarsOverlaid","_nativeScrollbarIsOverlaid","L","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","M","_viewportPaddingStyle","R","_scrollbarsHideOffset","D","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_envWindowZoom","size","dpr","envInstance","updateNativeScrollbarSizeCache","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","_nativeScrollbarsSize","environmentInstance","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","createEnvironment","envDOM","envElm","envChildElm","getNativeScrollbarSizeCache","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","G","T","createUniqueViewportArrangeElement","_host","hostInitializationStrategy","_viewport","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","tt","K","k","Z","B","nt","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdateSegment","structureSetupElements","updateHints","Y","_t","_heightIntrinsic","gt","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","wt","_directionIsRTL","ht","vt","bt","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","max0","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdateSegment","ut","ft","V","P","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowEdge","getCurrentOverflowEdgeCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","yt","xt","_overflowScroll","hostClientSize","isContentBox","subtractXScrollbar","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","nativeScrollbarSize","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","visibleBehaviorX","visibleBehaviorY","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","$t","_hostMutation","St","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmountScrollSize","overflowAmountClientSize","overflowEdge","overflowEdgeChanged","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowEdge","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowEdgeChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_direction","observeDirectionChange","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Mt","_attributes","Rt","_styleChangingAttributes","Dt","_eventContentChange","jt","_nestedTargetSelector","Vt","_ignoreTargetChange","kt","_ignoreContentChange","debouncedEventContentChange","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","records","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","rt","dt","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroySizeObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","contentUpdateResult","trinsicUpdateResult","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","interactionStartEventNames","interactionEndEventNames","stopRootClickPropagation","scrollbar","documentElm","createScrollbarsSetupElements","_scrollbarsSlot","environmentScrollbarSlot","st","lt","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","scrollbarsAddRemoveClass","scrollbarStructures","scrollbarStructure","_scrollbar","horizontalScrollbars","verticalScrollbars","addRemoveClassHorizontal","addRemoveClassVertical","generateScrollbarDOM","horizontal","scrollbarClassName","arrToPush","transitionlessClass","track","handle","_track","_handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_horizontal","_scrollbarStructures","_clone","_addRemoveClass","_vertical","createSelfCancelTimeout","id","setTFn","clearTFn","createScrollbarsSetup","globalAutoHideDelay","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","clearScrollTimeout","auotHideMoveTimeout","clearAutoHideTimeout","auotHideTimeout","clearAutoTimeout","Wt","Zt","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","Tt","Et","It","visibilityChanged","autoHideChanged","updateVisibility","setScrollbarVisibility","addRemoveClass","isVisible","Ct","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","U","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","Ot","zt","At","pluginInstance","sizeChanged","hostMutation","F","X","J","N","W","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/array.ts","../src/support/dom/style.ts","../src/support/cache.ts","../src/support/utils/types.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/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/plugins/plugins.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/plugins/optionsValidationPlugin/validation.ts","../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.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/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["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 | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | false | 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 | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | false | 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 | false | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | false | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | false | 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 const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\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 args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\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 // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\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\n\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","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\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: 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 const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\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 const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\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 const 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 const 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 const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = 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 const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = 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 { 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\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\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};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: 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 const 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 { isNull, isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): T;\r\n (elm: HTMLElement | false | null | undefined, value: T | false | null): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T | false | null): T | void;\r\n};\r\n\r\nconst getSetProp = (\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string | false | null\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && !isNull(value) && value !== false && (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 const 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}) as Attr;\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 if (value) {\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/**\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 const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\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 const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\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 const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Node | Element | Node | false | null | undefined;\r\ntype OutputElementType = Node | 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, closest };\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 =\r\n jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\nexport const setT = window.setTimeout as (handler: TimerHandler, timeout?: number) => number;\r\nexport const clearT = window.clearTimeout as (id?: number) => void;\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\ntype ClassContainingElement = Node | Element | false | null | undefined;\r\ntype ClassName = string | false | null | undefined;\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: ClassContainingElement,\r\n className: ClassName,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n const classList = elm && (elm as Element).classList;\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (classList && 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(classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: ClassContainingElement, className: ClassName): boolean =>\r\n 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 = (elm: ClassContainingElement, className: ClassName): 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 = (elm: ClassContainingElement, className: ClassName): (() => 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 = (classNameA: ClassName, classNameB: ClassName) => {\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, setT, clearT } from 'support/compatibility/apis';\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 maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear: () => void = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\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 (clear !== noop) {\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 clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\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 clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\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, runEachAndClear } 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() {\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) ?? doSupportPassiveEvents;\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 = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) 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 runEachAndClear.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 type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: 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 const addEvent: 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 const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n 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 && !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 [AddEvent, RemoveEvent, TriggerEvent];\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 = (\r\n changedOptions: PartialOptions,\r\n force: boolean,\r\n ...args: T\r\n) => void;\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<\r\n DynamicState,\r\n StaticState extends Record = Record,\r\n A extends any[] = []\r\n> = [update: SetupUpdate
, state: (() => DynamicState) & StaticState, destroy: () => void];\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\nexport const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\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 ScrollbarVisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type ScrollbarAutoHideBehavior = '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 theme: string | null;\r\n visibility: ScrollbarVisibilityBehavior;\r\n autoHide: ScrollbarAutoHideBehavior;\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 theme: 'os-theme-dark',\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 { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","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 {\r\n Options,\r\n OverflowBehavior,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { PartialOptions } from 'typings';\r\nimport type { Plugin } from 'plugins';\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 theme: [oTypes.string, oTypes.null], // string || null\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: Plugin = {\r\n [optionsValidationPluginName]: {\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 {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type SizeObserverPluginInstance = {\r\n _: (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean\r\n ) => [appearCallback: () => any, offFns: (() => any)[]];\r\n};\r\n\r\nconst scrollAmount = 3333333;\r\nconst scrollEventName = 'scroll';\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const sizeObserverPlugin: Plugin = {\r\n [sizeObserverPluginName]: {\r\n _: (listenerElement, onSizeChangedCallback, observeAppearChange) => {\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 onSizeChangedCallback(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 stopPropagation(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 const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), 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 return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import {\r\n keys,\r\n attr,\r\n WH,\r\n style,\r\n addClass,\r\n removeClass,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n UpdateCache,\r\n XY,\r\n} from 'support';\r\nimport { classNameViewportArrange } from 'classnames';\r\nimport type { StyleObject } from 'typings';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type {\r\n ViewportOverflowState,\r\n GetViewportOverflowState,\r\n HideNativeScrollbars,\r\n} from 'setups/structureSetup/updateSegments/overflowUpdateSegment';\r\nimport type { InternalEnvironment } from 'environment';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type ArrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n) => boolean;\r\n\r\nexport type UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nexport type UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n) => UndoViewportArrangeResult;\r\n\r\nexport type ScrollbarsHidingPluginInstance = {\r\n _createUniqueViewportArrangeElement(env: InternalEnvironment): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: boolean,\r\n flexboxGlue: boolean,\r\n viewport: HTMLElement,\r\n viewportArrange: HTMLStyleElement | false | null | undefined,\r\n getState: () => StructureSetupState,\r\n getViewportOverflowState: GetViewportOverflowState,\r\n hideNativeScrollbars: HideNativeScrollbars\r\n ): [ArrangeViewport, UndoArrangeViewport];\r\n _envWindowZoom(): (\r\n envInstance: InternalEnvironment,\r\n updateNativeScrollbarSizeCache: UpdateCache>,\r\n triggerEvent: () => void\r\n ) => void;\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst { round, abs } = Math;\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = env;\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 _overflowUpdateSegment: (\r\n doViewportArrange,\r\n flexboxGlue,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\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: ArrangeViewport = (\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n directionIsRTL\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 ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }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 * 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: UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n viewportOverflowState?\r\n ) => {\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 [arrangeViewport, undoViewportArrange];\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n\r\n return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {\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) {\r\n return;\r\n }\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 && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\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};\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 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\nimport { getPlugins, ScrollbarsHidingPluginInstance, scrollbarsHidingPluginName } from 'plugins';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: 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\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\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 clear && removeElements(measureElm);\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 getNativeScrollbarsHiding = (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 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 {\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n getNativeScrollbarSize.bind(0, body, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n padding: !nativeScrollbarsHiding,\r\n content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\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 (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let resizeFn: undefined | ReturnType;\r\n window.addEventListener('resize', () => {\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n\r\n resizeFn = resizeFn || (scrollbarsHidingPlugin && scrollbarsHidingPlugin._envWindowZoom());\r\n resizeFn && resizeFn(env, updateNativeScrollbarSizeCache, triggerEvent.bind(0, '_'));\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 runEachAndClear,\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 classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\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 | null | undefined;\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\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 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 env = getEnvironment();\r\n const { _getInitializationStrategy, _nativeScrollbarsHiding } = env;\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\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 && _nativeScrollbarsHiding;\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:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\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 (_nativeScrollbarsHiding && !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, runEachAndClear.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 createTrinsicUpdateSegment: 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 createPaddingUpdateSegment: 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 { _nativeScrollbarsHiding: _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 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 equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\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 { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\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\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst max0 = max.bind(0, 0);\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 = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.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 createOverflowUpdateSegment: 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 _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 [updateOverflowEdge, getCurrentOverflowEdgeCache] = 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 = !(_nativeScrollbarsOverlaid.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: GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars,\r\n viewportStyleObj?\r\n ) => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarsHiding && !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 && !_nativeScrollbarsHiding ? 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', _nativeScrollbarsOverlaid.x, _nativeScrollbarsSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarsOverlaid.y, _nativeScrollbarsSize.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 * 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: HideNativeScrollbars = (\r\n viewportOverflowState,\r\n directionIsRTL,\r\n viewportArrange,\r\n viewportStyleObj\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 const [arrangeViewport, undoViewportArrange] = scrollbarsHidingPlugin\r\n ? scrollbarsHidingPlugin._overflowUpdateSegment(\r\n doViewportArrange,\r\n _flexboxGlue,\r\n _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\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 _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.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 let overflowEdgeCache = getCurrentOverflowEdgeCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\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 const overflowAmountScrollSize = {\r\n w: max0(max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n arrangedViewportClientSize.h +\r\n max0(viewportclientSize.h - viewportScrollSize.h) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\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 overflowEdgeChanged ||\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 _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\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 _overflowEdgeChanged: overflowEdgeChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createOverflowUpdateSegment,\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 _overflowEdgeChanged: 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 {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdateSegment(structureSetupElements, state),\r\n createPaddingUpdateSegment(structureSetupElements, state),\r\n createOverflowUpdateSegment(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 _overflowEdgeChanged: 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 scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\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 scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\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 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 sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\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 if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\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, 'scroll', (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 stopPropagation(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, 'animationstart', 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 runEachAndClear(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 runEachAndClear,\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 TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n destroy: () => void,\r\n update: () => void | Parameters\r\n];\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: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH,\r\n fromRecords?: true\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n !fromRecords && onTrinsicChangedCallback(heightIntrinsic);\r\n return [heightIntrinsic];\r\n }\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n entries: IntersectionObserverEntry[],\r\n fromRecords?: true\r\n ) => {\r\n if (entries && entries.length > 0) {\r\n return triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n (entries) => intersectionObserverCallback(entries),\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 () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n () => {\r\n if (intersectionObserverInstance) {\r\n return intersectionObserverCallback(intersectionObserverInstance.takeRecords(), true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n 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 = [\r\n destroy: () => void,\r\n update: () => void | false | Parameters>\r\n];\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 debouncedEventContentChange = 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 const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\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 = (\r\n mutations: MutationRecord[],\r\n fromRecords?: true\r\n ): void | Parameters> => {\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 !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] as Parameters>;\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n !fromRecords &&\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n return [targetChangedAttrs, targetStyleChanged] as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!((mutations) =>\r\n observerCallback(mutations)\r\n );\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 debouncedEventContentChange._flush();\r\n\r\n const records = mutationObserver.takeRecords();\r\n return !isEmptyArray(records) && observerCallback(records, true);\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 closest,\r\n assignDeep,\r\n push,\r\n scrollLeft,\r\n scrollTop,\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 classNameScrollbar,\r\n classNameViewportArrange,\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 destroy: () => void,\r\n updateObservers: () => Partial,\r\n updateObserversOptions: StructureSetupObserversUpdate\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 { _nativeScrollbarsHiding: _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 hasOver = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n const hasVpStyle = _viewportHasClass(classNameViewportArrange, '');\r\n const scrollOffsetX = hasVpStyle && scrollLeft(_viewport);\r\n const scrollOffsetY = hasVpStyle && scrollTop(_viewport);\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n _viewportAddRemoveClass(classNameViewportArrange, '');\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, hasOver);\r\n _viewportAddRemoveClass(classNameViewportArrange, '', hasVpStyle);\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\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, fromRecords?: true) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: Partial = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && structureSetupUpdate(updateHints);\r\n return updateHints;\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, fromRecords?: true) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n const updateHints: Partial = {\r\n _contentMutation: contentSizeChanged,\r\n };\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 !fromRecords && updateFn(updateHints);\r\n }\r\n return updateHints;\r\n };\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ) => {\r\n const updateHints: Partial = { _hostMutation: targetStyleChanged };\r\n if (targetStyleChanged) {\r\n !fromRecords && structureSetupUpdateWithDebouncedAdaptiveUpdateHints(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n return updateHints;\r\n };\r\n\r\n const trinsicObserver =\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, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n }\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 () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n trinsicObserver && trinsicObserver[0](); // destroy\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[1](); // update\r\n const trinsicUpdateResult = trinsicObserver && trinsicObserver[1](); // update\r\n\r\n if (hostUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onHostMutation.apply(\r\n 0,\r\n push(hostUpdateResult, true) as [\r\n ...updateResult: typeof hostUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (contentUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onContentMutation.apply(\r\n 0,\r\n push(contentUpdateResult, true) as [\r\n ...updateResult: typeof contentUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (trinsicUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onTrinsicChanged.apply(\r\n 0,\r\n push(trinsicUpdateResult as any[], true) as [\r\n ...updateResult: typeof trinsicUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n\r\n return updateHints;\r\n },\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, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\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};\r\n","import { createEventListenerHub, isEmptyObject, keys } 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 _overflowEdge: XY;\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 initialXYNumber = { x: 0, y: 0 };\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 _overflowEdge: initialXYNumber,\r\n _overflowAmount: initialXYNumber,\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 triggerUpdateEvent: (...args: StructureSetupEventMap['u']) => void = (\r\n updateHints,\r\n changedOptions,\r\n force\r\n ) => {\r\n const truthyUpdateHints = keys(updateHints).some((key) => updateHints[key]);\r\n\r\n if (truthyUpdateHints || !isEmptyObject(changedOptions) || force) {\r\n triggerEvent('u', [updateHints, changedOptions, force]);\r\n }\r\n };\r\n const [destroyObservers, updateObservers, updateObserversOptions] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerUpdateEvent(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 updateObserversOptions(checkOption);\r\n triggerUpdateEvent(\r\n updateStructure(checkOption, updateObservers(), force),\r\n changedOptions,\r\n !!force\r\n );\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 {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n each,\r\n isEmptyArray,\r\n noop,\r\n on,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\r\n stopPropagation,\r\n style,\r\n} from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n classNamesScrollbarInteraction,\r\n classNamesScrollbarTransitionless,\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\nimport { StyleObject } from 'typings';\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 ScrollbarsSetupElement {\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _addRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => void;\r\n _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n // _removeClass: (classNames: string) => void;\r\n /*\r\n _addEventListener: () => void;\r\n _removeEventListener: () => void;\r\n */\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\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 interactionStartEventNames = 'touchstart mouseenter';\r\nconst interactionEndEventNames = 'touchend touchcancel mouseleave';\r\nconst stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>\r\n on(\r\n scrollbar,\r\n 'mousedown',\r\n on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),\r\n { _capture: true }\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 { _documentElm, _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot = _targetIsElm\r\n ? null\r\n : (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 const scrollbarsAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action((elm || noop)(scrollbarStructure) || scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const scrollbarsHandleStyle = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => {\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n const [elm, styles] = elmStyle(scrollbarStructure);\r\n style(elm, styles);\r\n });\r\n };\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const addRemoveClassHorizontal = scrollbarsAddRemoveClass.bind(0, horizontalScrollbars);\r\n const addRemoveClassVertical = scrollbarsAddRemoveClass.bind(0, verticalScrollbars);\r\n const generateScrollbarDOM = (horizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = horizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;\r\n const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';\r\n const scrollbar = createDiv(\r\n `${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass}`\r\n );\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n push(arrToPush, result);\r\n push(destroyFns, [\r\n removeElements.bind(0, scrollbar),\r\n on(scrollbar, interactionStartEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction, true);\r\n addRemoveClassVertical(classNamesScrollbarInteraction, true);\r\n }),\r\n on(scrollbar, interactionEndEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction);\r\n addRemoveClassVertical(classNamesScrollbarInteraction);\r\n }),\r\n stopRootClickPropagation(scrollbar, _documentElm),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = generateScrollbarDOM.bind(0, true);\r\n const generateVerticalScrollbarStructure = generateScrollbarDOM.bind(0, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n setT(() => {\r\n addRemoveClassHorizontal(classNamesScrollbarTransitionless);\r\n addRemoveClassVertical(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassHorizontal,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassVertical,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, verticalScrollbars),\r\n },\r\n },\r\n appendElements,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElement,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOSOptions,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { OverflowStyle, StyleObject } from 'typings';\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\nconst { min } = Math;\r\nconst createSelfCancelTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nconst refreshScrollbarHandleLength = (\r\n setStyleFn: ScrollbarsSetupElement['_handleStyle'],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n const handleRatio = min(1, viewportSize / (viewportSize + overflowAmount));\r\n\r\n setStyleFn((structure) => [\r\n structure._handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(handleRatio * 100).toFixed(3)}%`,\r\n },\r\n ]);\r\n};\r\n\r\nconst refreshScrollbarHandlePosition = (\r\n setStyleFn: (styles: StyleObject) => void,\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n /*\r\n //measure the handle length to respect min & max length\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\r\n var handleTrackDiff = trackLength - handleLength;\r\n var handleCSS = {};\r\n var transformOffset;\r\n var translateValue;\r\n\r\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\r\n // because its a bit behind during the small delay when content size updates\r\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\r\n var maxScroll =\r\n (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] -\r\n _viewportElementNative['client' + scrollbarVars._Width_Height]) *\r\n (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\r\n var getScrollRatio = function (base) {\r\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\r\n };\r\n var getHandleOffset = function (scrollRatio) {\r\n var offset = handleTrackDiff * scrollRatio;\r\n offset = isNaN(offset) ? 0 : offset;\r\n offset =\r\n isRTLisHorizontal && !_rtlScrollBehavior.i ? trackLength - handleLength - offset : offset;\r\n offset = MATH.max(0, offset);\r\n return offset;\r\n };\r\n var scrollRatio = getScrollRatio(nativeScroll);\r\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\r\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\r\n var snappedHandleOffset = getHandleOffset(scrollRatio);\r\n\r\n scrollbarVarsInfo._maxScroll = maxScroll;\r\n scrollbarVarsInfo._currentScroll = nativeScroll;\r\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\r\n\r\n if (_supportTransform) {\r\n transformOffset = isRTLisHorizontal\r\n ? -(trackLength - handleLength - handleOffset)\r\n : handleOffset; //in px\r\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\r\n translateValue = isHorizontal\r\n ? strTranslateBrace + transformOffset + 'px, 0)'\r\n : strTranslateBrace + '0, ' + transformOffset + 'px)';\r\n\r\n handleCSS[strTransform] = translateValue;\r\n\r\n //apply or clear up transition\r\n if (_supportTransition)\r\n handleCSS[strTransition] =\r\n transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1\r\n ? getCSSTransitionString(scrollbarVars._handle) +\r\n ', ' +\r\n (strTransform + _strSpace + transitionDuration + 'ms')\r\n : _strEmpty;\r\n } else handleCSS[scrollbarVars._left_top] = handleOffset;\r\n\r\n //only apply css if offset has changed and overflow exists.\r\n if (!nativeOverlayScrollbarsAreActive()) {\r\n scrollbarVars._handle.css(handleCSS);\r\n\r\n //clear up transition\r\n if (_supportTransform && _supportTransition && transition) {\r\n scrollbarVars._handle.one(_strTransitionEndEvent, function () {\r\n if (!_destroyed) scrollbarVars._handle.css(strTransition, _strEmpty);\r\n });\r\n }\r\n }\r\n\r\n scrollbarVarsInfo._handleOffset = handleOffset;\r\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\r\n scrollbarVarsInfo._trackLength = trackLength;\r\n */\r\n};\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup => {\r\n let autoHideIsMove: boolean;\r\n let autoHideIsLeave: boolean;\r\n let autoHideNotNever: boolean;\r\n let mouseInHost: boolean | undefined;\r\n let prevTheme: string | null | undefined;\r\n let globalAutoHideDelay = 0;\r\n\r\n const state = createState({});\r\n const [getState] = state;\r\n const [requestMouseMoveAnimationFrame, cancelMouseMoveAnimationFrame] = createSelfCancelTimeout();\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = createSelfCancelTimeout();\r\n const [scrollTimeout, clearScrollTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideMoveTimeout, clearAutoHideTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideTimeout, clearAutoTimeout] = createSelfCancelTimeout(() => globalAutoHideDelay);\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupState._elements\r\n );\r\n const { _host, _viewport } = structureSetupState._elements;\r\n const { _horizontal, _vertical } = elements;\r\n const { _addRemoveClass: addRemoveClassHorizontal, _handleStyle: styleHorizontal } = _horizontal;\r\n const { _addRemoveClass: addRemoveClassVertical, _handleStyle: styleVertical } = _vertical;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden, true);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden, true);\r\n };\r\n if (globalAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const onHostMouseEnter = () => {\r\n mouseInHost = autoHideIsLeave;\r\n mouseInHost && manageScrollbarsAutoHide(true);\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearScrollTimeout,\r\n clearAutoTimeout,\r\n clearAutoHideTimeout,\r\n cancelScrollAnimationFrame,\r\n cancelMouseMoveAnimationFrame,\r\n destroyElements,\r\n\r\n on(_host, 'mouseover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'mouseenter', onHostMouseEnter),\r\n on(_host, 'mouseleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'mousemove', () => {\r\n autoHideIsMove &&\r\n requestMouseMoveAnimationFrame(() => {\r\n clearScrollTimeout();\r\n manageScrollbarsAutoHide(true);\r\n auotHideMoveTimeout(() => {\r\n autoHideIsMove && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n on(_viewport, 'scroll', () => {\r\n autoHideNotNever &&\r\n requestScrollAnimationFrame(() => {\r\n manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\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, structureUpdateHints) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n\r\n const [theme, themeChanged] = checkOption('scrollbars.theme');\r\n const [visibility, visibilityChanged] =\r\n checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] =\r\n checkOption('scrollbars.autoHide');\r\n const [autoHideDelay] = checkOption('scrollbars.autoHideDelay');\r\n const [dragScrolling, dragScrollingChanged] = checkOption(\r\n 'scrollbars.dragScrolling'\r\n );\r\n const [touchSupport, touchSupportChanged] = checkOption('scrollbars.touchSupport');\r\n\r\n const updateHandle = _overflowEdgeChanged || _overflowAmountChanged;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged;\r\n\r\n const setScrollbarVisibility = (\r\n overflowStyle: OverflowStyle,\r\n addRemoveClass: (classNames: string, add?: boolean) => void\r\n ) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n addRemoveClass(classNamesScrollbarVisible, isVisible);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (updateVisibility) {\r\n const { _overflowStyle } = currStructureSetupState;\r\n\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, addRemoveClassHorizontal);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, addRemoveClassVertical);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n addRemoveClassHorizontal(classNamesScrollbarCornerless, !hasCorner);\r\n addRemoveClassVertical(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (themeChanged) {\r\n addRemoveClassHorizontal(prevTheme);\r\n addRemoveClassVertical(prevTheme);\r\n\r\n addRemoveClassHorizontal(theme, true);\r\n addRemoveClassVertical(theme, true);\r\n prevTheme = theme;\r\n }\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideNotNever = autoHide !== 'never';\r\n manageScrollbarsAutoHide(!autoHideNotNever, true);\r\n }\r\n if (updateHandle) {\r\n refreshScrollbarHandleLength(styleHorizontal, currStructureSetupState, true);\r\n refreshScrollbarHandleLength(styleVertical, currStructureSetupState);\r\n }\r\n },\r\n scrollbarsSetupState,\r\n runEachAndClear.bind(0, destroyFns),\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 Plugin,\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(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: 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 overflowEdge: XY;\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 overflowEdgeChanged: 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 _nativeScrollbarsOverlaid: _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\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(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: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\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 structureState._addOnUpdatedListener((updateHints, changedOptions, force: boolean) => {\r\n updateScrollbars(changedOptions, force, updateHints);\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 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 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 _overflowEdgeChanged,\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 overflowEdgeChanged: _overflowEdgeChanged,\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 _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\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 scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\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":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","u","_initialValue","_","_equal","g","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","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","setT","setTimeout","clearT","clearTimeout","rnothtmlwhite","classListAction","className","action","classList","clazz","classes","match","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","maxTimeoutId","prevArguments","latestArguments","clear","v","_timeout","p","_maxDelay","m","_mergeParams","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","clearTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","timeoutId","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","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","_ref","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","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","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarAutoHidden","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","contentArrangeCounter","abs","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","env","_nativeScrollbarsHiding","_nativeScrollbarStyling","_nativeScrollbarsOverlaid","_nativeScrollbarIsOverlaid","L","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","M","_viewportPaddingStyle","R","_scrollbarsHideOffset","D","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_envWindowZoom","size","dpr","envInstance","updateNativeScrollbarSizeCache","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","_nativeScrollbarsSize","environmentInstance","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","createEnvironment","envDOM","envElm","envChildElm","getNativeScrollbarSizeCache","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","padding","content","defaultDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","Y","T","createUniqueViewportArrangeElement","host","hostInitializationStrategy","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","X","J","Z","K","tt","nt","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdateSegment","structureSetupElements","updateHints","B","_t","_heightIntrinsic","gt","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","wt","_directionIsRTL","ht","vt","bt","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","max0","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdateSegment","ut","ft","V","P","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowEdge","getCurrentOverflowEdgeCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","yt","xt","_overflowScroll","hostClientSize","isContentBox","subtractXScrollbar","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","nativeScrollbarSize","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","visibleBehaviorX","visibleBehaviorY","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","$t","_hostMutation","St","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmountScrollSize","overflowAmountClientSize","overflowEdge","overflowEdgeChanged","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowEdge","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowEdgeChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_direction","observeDirectionChange","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Mt","_attributes","Rt","_styleChangingAttributes","Dt","_eventContentChange","jt","_nestedTargetSelector","Vt","_ignoreTargetChange","kt","_ignoreContentChange","debouncedEventContentChange","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","records","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","rt","dt","updateContentSizeCache","hasOver","hasVpStyle","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroySizeObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","contentUpdateResult","trinsicUpdateResult","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","interactionStartEventNames","interactionEndEventNames","stopRootClickPropagation","scrollbar","documentElm","createScrollbarsSetupElements","scrollbarsSlot","environmentScrollbarSlot","st","lt","initializationScrollbarSlot","evaluatedScrollbarSlot","scrollbarsAddRemoveClass","scrollbarStructures","scrollbarStructure","_scrollbar","scrollbarsHandleStyle","horizontalScrollbars","verticalScrollbars","addRemoveClassHorizontal","addRemoveClassVertical","generateScrollbarDOM","horizontal","scrollbarClassName","arrToPush","transitionlessClass","track","handle","_track","_handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_horizontal","_scrollbarStructures","_clone","_addRemoveClass","_handleStyle","_vertical","min","createSelfCancelTimeout","id","setTFn","clearTFn","refreshScrollbarHandleLength","setStyleFn","isHorizontal","zt","Ot","axis","viewportSize","handleRatio","structure","toFixed","createScrollbarsSetup","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","prevTheme","globalAutoHideDelay","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","clearScrollTimeout","auotHideMoveTimeout","clearAutoHideTimeout","auotHideTimeout","clearAutoTimeout","Ut","Zt","styleHorizontal","styleVertical","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","Tt","Et","It","currStructureSetupState","themeChanged","visibilityChanged","autoHideChanged","updateHandle","updateVisibility","setScrollbarVisibility","addRemoveClass","isVisible","Ct","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","G","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","At","pluginInstance","sizeChanged","hostMutation","k","U","W","q","N","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","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 83980fd..43f14ed 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -function t(e,n){if(f(e))for(let t=0;tn(e[t],t,e)));return e}function e(e,n){const o=d(n);if(h(n)||o){let t=o?"":{};if(e){const r=window.getComputedStyle(e,null);t=o?yt(e,r,n):n.reduce(((t,n)=>(t[n]=yt(e,r,n),t)),t)}return t}t(O(n),(t=>mt(e,t,n[t])))}const n=(t,e)=>{const{u:n,_:o,g:r}=t;let i,s=n;const l=(t,e)=>{const n=s,l=t,c=e||(o?!o(n,l):n!==l);return(c||r)&&(s=l,i=n),[s,c,i]};return[e?t=>l(e(s,i),t):l,t=>[s,!!t,i]]},o=Node.ELEMENT_NODE,{toString:r,hasOwnProperty:i}=Object.prototype,s=t=>void 0===t,l=t=>null===t,c=t=>s(t)||l(t)?`${t}`:r.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),a=t=>"number"==typeof t,d=t=>"string"==typeof t,u=t=>"function"==typeof t,h=t=>Array.isArray(t),p=t=>"object"==typeof t&&!h(t)&&!l(t),f=t=>{const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!(!(h(t)||!u(t)&&n)||e>0&&p(t)&&!(e-1 in t))},g=t=>{if(!t||!p(t)||"object"!==c(t))return!1;let e;const n="constructor",o=t[n],r=o&&o.prototype,l=i.call(t,n),a=r&&i.call(r,"isPrototypeOf");if(o&&!l&&!a)return!1;for(e in t);return s(e)||i.call(t,e)},w=t=>{const e=HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===o)},b=t=>{const e=Element;return!!t&&(e?t instanceof e:t.nodeType===o)},v=(t,e,n)=>t.indexOf(e,n),y=(t,e,n)=>(n||d(e)||!f(e)?t.push(e):Array.prototype.push.apply(t,e),t),m=e=>{const n=Array.from,o=[];return n&&e?n(e):(e instanceof Set?e.forEach((t=>{y(o,t)})):t(e,(t=>{y(o,t)})),o)},x=t=>!!t&&0===t.length,$=(e,n,o)=>{t(e,(t=>t&&t.apply(void 0,n||[]))),!o&&(e.length=0)},_=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),O=t=>t?Object.keys(t):[],S=(e,n,o,r,i,s,c)=>{const a=[n,o,r,i,s,c];return"object"==typeof e&&!l(e)||u(e)||(e={}),t(a,(n=>{t(O(n),(t=>{const o=n[t];if(e===o)return!0;const r=h(o);if(o&&(g(o)||r)){const n=e[t];let i=n;r&&!h(n)?i=[]:r||g(n)||(i={}),e[t]=S(i,o)}else e[t]=o}))})),e},P=t=>{for(const e in t)return!1;return!0},T=(t,e,n,o)=>{if(s(o))return n?n[t]:e;n&&(n[t]=o)},L=(t,e,n)=>{if(s(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)},E=(t,e,n,o)=>{const r=L(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),L(t,e,m(i).join(" ").trim())},C=(t,e)=>{t&&t.removeAttribute(e)},M=(t,e)=>T("scrollLeft",0,t,e),k=(t,e)=>T("scrollTop",0,t,e),R=Element.prototype,A=(t,e)=>{const n=[],o=e?b(e)?e:null:document;return o?y(n,o.querySelectorAll(t)):n},Y=(t,e)=>!!b(t)&&(R.matches||R.msMatchesSelector).call(t,e),z=t=>t?m(t.childNodes):[],B=t=>t?t.parentElement:null,j=(t,e)=>{if(b(t)){const n=R.closest;if(n)return n.call(t,e);do{if(Y(t,e))return t;t=B(t)}while(t)}return null},H=(e,n,o)=>{if(o){let r,i=n;e&&(f(o)?(r=document.createDocumentFragment(),t(o,(t=>{t===i&&(i=t.previousSibling),r.appendChild(t)}))):r=o,n&&(i?i!==n&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(r,i||null))}},D=(t,e)=>{H(t,null,e)},I=(t,e)=>{H(t,t&&t.firstChild,e)},F=(t,e)=>{H(B(t),t&&t.nextSibling,e)},K=e=>{if(f(e))t(m(e),(t=>K(t)));else if(e){const t=B(e);t&&t.removeChild(e)}},V=t=>{const e=document.createElement("div");return t&&L(e,"class",t),e},X=e=>{const n=V();return n.innerHTML=e.trim(),t(z(n),(t=>K(t)))},Z=t=>t.charAt(0).toUpperCase()+t.slice(1),N=["-webkit-","-moz-","-o-","-ms-"],W=["WebKit","Moz","O","MS","webkit","moz","o","ms"],G={},U={},q=e=>{let n=U[e];if(_(U,e))return n;const o=Z(e),r=V().style;return t(N,(t=>{const i=t.replace(/-/g,""),s=[e,t+e,i+o,Z(i)+o];return!(n=s.find((t=>void 0!==r[t])))})),U[e]=n||""},J=e=>{let n=G[e]||window[e];return _(G,e)||(t(W,(t=>(n=n||window[t+Z(e)],!n))),G[e]=n),n},Q=J("MutationObserver"),tt=J("IntersectionObserver"),et=J("ResizeObserver"),nt=J("cancelAnimationFrame"),ot=J("requestAnimationFrame"),rt=window.setTimeout,it=window.clearTimeout,st=/[^\x20\t\r\n\f]+/g,lt=(t,e,n)=>{const o=t&&t.classList;let r,i=0,s=!1;if(o&&e&&d(e)){const t=e.match(st)||[];for(s=t.length>0;r=t[i++];)s=!!n(o,r)&&s}return s},ct=(t,e)=>{lt(t,e,((t,e)=>t.remove(e)))},at=(t,e)=>(lt(t,e,((t,e)=>t.add(e))),ct.bind(0,t,e)),dt=(e,n,o,r)=>{if(e&&n){let i=!0;return t(o,(t=>{(r?r(e[t]):e[t])!==(r?r(n[t]):n[t])&&(i=!1)})),i}return!1},ut=(t,e)=>dt(t,e,["w","h"]),ht=(t,e)=>dt(t,e,["x","y"]),pt=(t,e)=>dt(t,e,["t","r","b","l"]),ft=(t,e,n)=>dt(t,e,["width","height"],n&&(t=>Math.round(t))),gt=()=>{},wt=(t,e)=>{let n,o,r,i=gt;const{v:s,p:l,m:c}=e||{},d=function(e){i(),it(n),n=o=void 0,i=gt,t.apply(this,e)},h=t=>c&&o?c(o,t):t,p=()=>{i!==gt&&d(h(r)||r)},f=function(){const t=m(arguments),e=u(s)?s():s,c=a(e)&&e>=0;if(c){const s=u(l)?l():l,c=a(s)&&s>=0,f=e>0?rt:ot,g=e>0?it:nt,w=h(t)||t,b=d.bind(0,w);i();const v=f(b,e);i=()=>g(v),c&&!n&&(n=rt(p,s)),o=r=w}else d(t)};return f.S=p,f},bt={opacity:1,zindex:1},vt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return n==n?n:0},yt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],mt=(t,e,n)=>{try{if(t){const{style:o}=t;s(o[e])?o.setProperty(e,n):o[e]=((t,e)=>!bt[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}}catch(R){}},xt=(t,n,o)=>{const r=n?`${n}-`:"",i=o?`-${o}`:"",s=`${r}top${i}`,l=`${r}right${i}`,c=`${r}bottom${i}`,a=`${r}left${i}`,d=e(t,[s,l,c,a]);return{t:vt(d[s]),r:vt(d[l]),b:vt(d[c]),l:vt(d[a])}},$t={w:0,h:0},_t=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:$t,Ot=t=>t?{w:t.clientWidth,h:t.clientHeight}:$t,St=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:$t,Pt=t=>{const n=parseFloat(e(t,"height"))||0,o=parseFloat(e(t,"height"))||0;return{w:o-Math.round(o),h:n-Math.round(n)}},Tt=t=>t.getBoundingClientRect();let Lt;const Et=t=>t.split(" "),Ct=(e,n,o,r)=>{t(Et(n),(t=>{e.removeEventListener(t,o,r)}))},Mt=(e,n,o,r)=>{var i;const l=(()=>{if(s(Lt)){Lt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){Lt=!0}}))}catch(e){}}return Lt})(),c=null!=(i=l&&r&&r.C)?i:l,a=r&&r.$||!1,d=r&&r.O||!1,u=[],h=l?{passive:c,capture:a}:a;return t(Et(n),(t=>{const n=d?r=>{e.removeEventListener(t,n,a),o&&o(r)}:o;y(u,Ct.bind(null,e,t,n,a)),e.addEventListener(t,n,h)})),$.bind(0,u)},kt=t=>t.stopPropagation(),Rt={x:0,y:0},At=t=>{const e=t?Tt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Rt},Yt=(e,n)=>{t(h(n)?n:[n],e)},zt=e=>{const n=new Map,o=(t,e)=>{if(t){const o=n.get(t);Yt((t=>{o&&o[t?"delete":"clear"](t)}),e)}else n.forEach((t=>{t.clear()})),n.clear()},r=(t,e)=>{const r=n.get(t)||new Set;return n.set(t,r),Yt((t=>{t&&r.add(t)}),e),o.bind(0,t,e)};return t(O(e),(t=>{r(t,e[t])})),[r,o,(e,o)=>{const r=n.get(e);t(m(r),(t=>{o&&!x(o)?t.apply(0,o):t()}))}]},Bt=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&_(t,e)?t[e]:void 0),t):void 0,jt=(t,e,n)=>o=>[Bt(t,o),n||void 0!==Bt(e,o)],Ht=t=>{let e=t;return[()=>e,t=>{e=S({},e,t)}]},Dt="os-environment",It=`${Dt}-flexbox-glue`,Ft=`${It}-max`,Kt="data-overlayscrollbars",Vt=`${Kt}-overflow-x`,Xt=`${Kt}-overflow-y`,Zt="overflowVisible",Nt="viewportStyled",Wt="os-padding",Gt="os-viewport",Ut=`${Gt}-arrange`,qt="os-content",Jt=`${Gt}-scrollbar-styled`,Qt=`os-overflow-visible`,te="os-size-observer",ee=`${te}-appear`,ne=`${te}-listener`,oe=`${ne}-scroll`,re=`${ne}-item`,ie=`${re}-final`,se="os-trinsic-observer",le="os-scrollbar",ce=`${le}-horizontal`,ae=`${le}-vertical`,de="os-scrollbar-track",ue="os-scrollbar-handle",he=`${le}-visible`,pe=`${le}-cornerless`,fe=`${le}-transitionless`,ge=`${le}-interaction`,we=`${le}-auto-hidden`,be=t=>JSON.stringify(t,((t,e)=>{if(u(e))throw new Error;return e})),ve={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}},ye=(e,n)=>{const o={};return t(O(n).concat(O(e)),(t=>{const r=e[t],i=n[t];if(p(r)&&p(i))S(o[t]={},ye(r,i));else if(_(n,t)&&i!==r){let e=!0;if(h(r)||h(i))try{be(r)===be(i)&&(e=!1)}catch(G){}e&&(o[t]=i)}})),o},me={},xe=()=>S({},me);var $e={exports:{}};!function(t){function e(){return t.exports=e=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const i={},l=_e({},n);return t(O(e).filter((t=>_(n,t))),(a=>{const u=n[a],p=e[a],f=g(p),w=r?`${r}.`:"";if(f&&g(u)){const[e,n]=Se(p,u,o,w+a);i[a]=e,l[a]=n,t([l,i],(t=>{P(t[a])&&delete t[a]}))}else if(!f){let e=!1;const n=[],r=[],f=c(u);t(h(p)?p:[p],(o=>{let i;t(Oe,((t,e)=>{t===o&&(i=e)}));const l=s(i);if(l&&d(u)){const t=o.split(" ");e=!!t.find((t=>t===u)),y(n,t)}else e=Oe[f]===o;return y(r,l?Oe.string:i),!e})),e?i[a]=u:o&&console.warn(`${`The option "${w}${a}" wasn't set, because it doesn't accept the type [ ${f.toUpperCase()} ] with the value of "${u}".\r\n`+`Accepted types are: [ ${r.join(", ").toUpperCase()} ].\r\n`}${n.length>0?`\r\nValid strings are: [ ${n.join(", ")} ].`:""}`),delete l[a]}})),[i,l]},Pe=Oe.boolean,Te=[Oe.array,Oe.null],Le="hidden scroll visible visible-hidden",Ee={paddingAbsolute:Pe,updating:{elementEvents:Te,attributes:Te,debounce:[Oe.number,Oe.array,Oe.null],ignoreMutation:[Oe.function,Oe.null]},overflow:{x:Le,y:Le},scrollbars:{visibility:"visible hidden auto",autoHide:"never scroll leavemove",autoHideDelay:Oe.number,dragScroll:Pe,clickScroll:Pe,touch:Pe},nativeScrollbarsOverlaid:{show:Pe,initialize:Pe}},Ce="__osOptionsValidationPlugin",Me={[Ce]:{A:(t,e)=>{const[n,o]=((t,e,n)=>Se(Ee,e,n))(0,t,e);return _e({},o,n)}}},ke=3333333,Re="scroll",Ae="__osSizeObserverPlugin",Ye={[Ae]:{A:(t,n,o)=>{const r=X(`
`);D(t,r),at(t,oe);const i=r[0],s=i.lastChild,l=i.firstChild,c=null==l?void 0:l.firstChild;let a,d=_t(i),u=d,h=!1;const p=()=>{M(l,ke),k(l,ke),M(s,ke),k(s,ke)},f=t=>{a=0,h&&(d=u,n(!0===t))},g=t=>{u=_t(i),h=!t||!ut(u,d),t?(kt(t),h&&!a&&(nt(a),a=ot(f))):f(!1===t),p()},w=y([],[Mt(l,Re,g),Mt(s,Re,g)]);return e(c,{width:ke,height:ke}),p(),[o?g.bind(0,!1):p,w]}}};let ze=0;const{round:Be,abs:je}=Math,He="__osScrollbarsHidingPlugin",De={[He]:{I:t=>{const{T:e,P:n,L:o}=t,r=!(o||e||!n.x&&!n.y)&&document.createElement("style");return r&&(L(r,"id",`${Ut}-${ze}`),ze++),r},H:(n,o,r,i,s,l,c)=>[(t,o,l,c)=>{if(n){const{M:n}=s(),{R:a,D:d}=t,{x:u,y:h}=d,{x:p,y:f}=a,g=n[c?"paddingRight":"paddingLeft"],w=n.paddingTop,b=o.w+l.w,v=o.h+l.h,y={w:f&&h?`${f+b-g}px`:"",h:p&&u?`${p+v-w}px`:""};if(i){const{sheet:t}=i;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${L(i,"id")} + .${Ut}::before {}`,0);const n=e[0].style;n.width=y.w,n.height=y.h}}}else e(r,{"--os-vaw":y.w,"--os-vah":y.h})}return n},(i,a,d)=>{if(n){const u=d||l(i),{M:h}=s(),{D:p}=u,{x:f,y:g}=p,w={},b=e=>t(e.split(" "),(t=>{w[t]=h[t]}));f&&b("marginBottom paddingTop paddingBottom"),g&&b("marginLeft marginRight paddingLeft paddingRight");const v=e(r,O(w));return ct(r,Ut),o||(w.height=""),e(r,w),[()=>{c(u,a,n,v),e(r,v),at(r,Ut)},u]}return[gt]}],j:()=>{let t={w:0,h:0},e=0;return(n,o,r)=>{const i={w:window.innerWidth,h:window.innerHeight},s={w:i.w-t.w,h:i.h-t.h};if(0===s.w&&0===s.h)return;const l=je(s.w),c=je(s.h),a={w:je(Be(i.w/(t.w/100))),h:je(Be(i.h/(t.h/100)))},d=(()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e})(),u=l>2&&c>2,h=!((t,e)=>{const n=je(t),o=je(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h);if(u&&h&&d!==e&&d>0){const[t,e]=o();S(n.V,t),e&&r()}t=i,e=d}}}};let Ie;const Fe=(t,e,n,o)=>{D(t,e);const r=Ot(e),i=_t(e),s=Pt(n);return o&&K(e),{x:i.h-r.h+s.h,y:i.w-r.w+s.w}},Ke=(t,n)=>{const o="hidden";e(t,{overflowX:o,overflowY:o,direction:"rtl"}),M(t,0);const r=At(t),i=At(n);M(t,-999);const s=At(n);return{i:r.x===i.x,n:i.x!==s.x}},Ve=(t,e)=>{const n=at(t,It),o=Tt(t),r=Tt(e),i=ft(r,o,!0),s=at(t,Ft),l=Tt(t),c=Tt(e),a=ft(c,l,!0);return n(),s(),i&&a},Xe=()=>(Ie||(Ie=(()=>{const{body:t}=document,o=X(`
`)[0],r=o.firstChild,[i,,s]=zt(),[l,c]=n({u:Fe(t,o,r),_:ht},Fe.bind(0,t,o,r,!0)),[a]=c(),d=(t=>{let n=!1;const o=at(t,Jt);try{n="none"===e(t,q("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return o(),n})(o),u={x:0===a.x,y:0===a.y},h={k:!d,B:!1},p=S({},ve),f={V:a,P:u,T:d,L:"-1"===e(o,"zIndex"),F:Ke(o,r),Y:Ve(o,r),q:t=>i("_",t),G:S.bind(0,{},h),N(t){S(h,t)},U:S.bind(0,{},p),W(t){S(p,t)},X:S({},h),J:S({},p)};if(C(o,"style"),K(o),!(d||u.x&&u.y)){let t;window.addEventListener("resize",(()=>{const e=xe()[He];t=t||e&&e.j(),t&&t(f,l,s.bind(0,"_"))}))}return f})()),Ie),Ze=(t,e)=>u(t)?t.apply(0,e):t,Ne=(t,e,n,o)=>Ze(o||Ze(n,t),t)||e.apply(0,t),We=(t,e,n,o)=>{let r=Ze(o,t);return(l(r)||s(r))&&(r=Ze(n,t)),!0===r||l(r)||s(r)?e.apply(0,t):r},Ge=V.bind(0,""),Ue=t=>{D(B(t),z(t)),K(t)},qe=t=>{const e=Xe(),{G:n,T:o}=e,r=xe()[He],i=r&&r.I,{K:s,Z:l,k:c,B:a}=n(),d=w(t),u=t,h=d?t:u.target,p=Y(h,"textarea"),f=!p&&Y(h,"body"),g=h.ownerDocument,b=g.body,m=g.defaultView,x=!!et&&!p&&o,_=Ne.bind(0,[h]),S=We.bind(0,[h]),P=[_(Ge,l,u.viewport),_(Ge,l),_(Ge)].filter((t=>!!x||t!==h))[0],T=P===h,M={tt:h,K:p?_(Ge,s,u.host):h,Z:P,k:!T&&S(Ge,c,u.padding),B:!T&&S(Ge,a,u.content),nt:!T&&!o&&i&&i(e),ot:m,st:g,et:B(b),ct:b,rt:p,it:f,lt:d,ut:T,dt:(t,e)=>T?((t,e,n)=>{const o=L(t,Kt)||"";return new Set(o.split(" ")).has(n)})(P,0,e):((t,e)=>lt(t,e,((t,e)=>t.contains(e))))(P,t),ft:(t,e,n)=>T?E(P,Kt,e,n):(n?at:ct)(P,t)},k=O(M).reduce(((t,e)=>{const n=M[e];return y(t,!(!n||B(n))&&n)}),[]),R=t=>t?v(k,t)>-1:null,{tt:A,K:j,k:I,Z:V,B:X,nt:Z}=M,N=[],W=p&&R(j),G=p?A:z([X,V,I,j,A].find((t=>!1===R(t)))),U=X||V;return[M,()=>{const t=((t,e)=>(L(t,Kt,e),C.bind(0,t,Kt)))(j,T?"viewport":"host"),e=at(I,Wt),n=at(V,!T&&Gt),r=at(X,qt);W&&(F(A,j),y(N,(()=>{F(j,A),K(j)}))),D(U,G),D(j,I),D(I||j,!T&&V),D(V,X),y(N,(()=>{t(),C(V,Vt),C(V,Xt),R(X)&&Ue(X),R(V)&&Ue(V),R(I)&&Ue(I),e(),n(),r()})),o&&!T&&y(N,ct.bind(0,V,Jt)),Z&&(((t,e)=>{H(B(t),t,e)})(V,Z),y(N,K.bind(0,Z)))},$.bind(0,N)]},Je=(t,n)=>{const{B:o}=t,[r]=n;return t=>{const{Y:n}=Xe(),{_t:i}=r(),{gt:s}=t,l=(o||!n)&&s;return l&&e(o,{height:i?"":"100%"}),{ht:l,vt:l}}},Qe=(t,o)=>{const[r,i]=o,{K:s,k:l,Z:c,ut:a}=t,[d,u]=n({_:pt,u:xt()},xt.bind(0,s,"padding",""));return(t,n,o)=>{let[s,h]=u(o);const{T:p,Y:f}=Xe(),{wt:g}=r(),{ht:w,vt:b,bt:v}=t,[y,m]=n("paddingAbsolute");(w||h||!f&&b)&&([s,h]=d(o));const x=!a&&(m||v||h);if(x){const t=!y||!l&&!p,n=s.r+s.l,o=s.t+s.b,r={marginRight:t&&!g?-n:0,marginBottom:t?-o:0,marginLeft:t&&g?-n:0,top:t?-s.t:0,right:t?g?-s.r:"auto":0,left:t?g?"auto":-s.l:0,width:t?`calc(100% + ${n}px)`:""},a={paddingTop:t?s.t:0,paddingRight:t?s.r:0,paddingBottom:t?s.b:0,paddingLeft:t?s.l:0};e(l||c,r),e(c,a),i({k:s,yt:!t,M:l?a:S({},r,a)})}return{St:x}}},{max:tn}=Math,en=tn.bind(0,0),nn="visible",on="hidden",rn=42,sn={_:ut,u:{w:0,h:0}},ln={_:ht,u:{x:on,y:on}},cn=(t,e,n)=>n?at(t,e):ct(t,e),an=t=>0===t.indexOf(nn),dn=(t,o)=>{const[r,i]=o,{K:s,k:l,Z:c,nt:a,ut:d,ft:u}=t,{V:h,Y:p,T:f,P:g}=Xe(),w=xe()[He],b=!d&&!f&&(g.x||g.y),[v,y]=n(sn,Pt.bind(0,c)),[m,x]=n(sn,St.bind(0,c)),[$,_]=n(sn),[O,S]=n(sn),[P]=n(ln),T=(t,n)=>{if(e(c,{height:""}),n){const{yt:n,k:o}=r(),{xt:i,R:l}=t,a=Pt(s),d=Ot(s),u="content-box"===e(c,"boxSizing"),h=n||u?o.b+o.t:0,p=!(g.x&&u);e(c,{height:d.h+a.h+(i.x&&p?l.x:0)-h})}},C=(t,n)=>{const o=f||t?0:rn,r=(t,r,i)=>{const s=e(c,t),l="scroll"===(n?n[t]:s);return[s,l,l&&!f?r?o:i:0,r&&!!o]},[i,s,l,a]=r("overflowX",g.x,h.x),[d,u,p,w]=r("overflowY",g.y,h.y);return{Ct:{x:i,y:d},xt:{x:s,y:u},R:{x:l,y:p},D:{x:a,y:w}}},M=(t,e,n,o)=>{const{R:i,D:s}=t,{x:l,y:c}=s,{x:a,y:d}=i,{M:u}=r(),h=e?"marginLeft":"marginRight",p=e?"paddingLeft":"paddingRight",f=u[h],g=u.marginBottom,w=u[p],b=u.paddingBottom;o.width=`calc(100% + ${d+-1*f}px)`,o[h]=-d+f,o.marginBottom=-a+g,n&&(o[p]=w+(c?d:0),o.paddingBottom=b+(l?a:0))},[k,R]=w?w.H(b,p,c,a,r,C,M):[()=>b,()=>[gt]];return(t,n,o)=>{const{ht:a,$t:h,vt:w,St:b,gt:A,bt:Y}=t,{_t:z,wt:B}=r(),[j,H]=n("nativeScrollbarsOverlaid.show"),[D,I]=n("overflow"),F=j&&g.x&&g.y,K=!d&&!p&&(a||w||h||H||A),V=an(D.x),X=an(D.y),Z=V||X;let N,W=y(o),G=x(o),U=_(o),q=S(o);if(H&&f&&u(Jt,Nt,!F),K&&(N=C(F),T(N,z)),a||b||w||Y||H){Z&&u(Qt,Zt,!1);const[t,e]=R(F,B,N),[n,r]=W=v(o),[i,s]=G=m(o),l=Ot(c);let a=i,d=l;t(),(s||r||H)&&e&&!F&&k(e,i,n,B)&&(d=Ot(c),a=St(c));const h={w:en(tn(i.w,a.w)+n.w),h:en(tn(i.h,a.h)+n.h)},p={w:en(d.w+en(l.w-i.w)+n.w),h:en(d.h+en(l.h-i.h)+n.h)};q=O(p),U=$(((t,e)=>{const n=window.devicePixelRatio%1!=0?1:0,o={w:en(t.w-e.w),h:en(t.h-e.h)};return{w:o.w>n?o.w:0,h:o.h>n?o.h:0}})(h,p),o)}const[J,Q]=q,[tt,et]=U,[nt,ot]=G,[rt,it]=W,st={x:tt.w>0,y:tt.h>0},lt=V&&X&&(st.x||st.y)||V&&st.x&&!st.y||X&&st.y&&!st.x;if(b||Y||it||ot||Q||et||I||H||K){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},n=((t,e,n,o)=>{const r=(t,e)=>{const n=an(t),o=e&&n&&t.replace(`${nn}-`,"")||"";return[e&&!n?t:"",an(o)?"hidden":o]},[i,s]=r(n.x,e.x),[l,c]=r(n.y,e.y);return o.overflowX=s&&l?s:i,o.overflowY=c&&i?c:l,C(t,o)})(F,st,D,t),o=k(n,nt,rt,B);d||M(n,B,o,t),K&&T(n,z),d?(L(s,Vt,t.overflowX),L(s,Xt,t.overflowY)):e(c,t)}E(s,Kt,Zt,lt),cn(l,Qt,lt),!d&&cn(c,Qt,Z);const[ct,at]=P(C(F).Ct);return i({Ct:ct,Ot:{x:J.w,y:J.h},zt:{x:tt.w,y:tt.h},At:st}),{It:at,Tt:Q,Et:et}}},un=(e,n,o)=>{const r={},i=n||{};return t(O(e).concat(O(i)),(t=>{const n=e[t],s=i[t];r[t]=!!(o||n||s)})),r},hn=3333333,pn=t=>"rtl"===e(t,"direction"),fn=t=>t&&(t.height||t.width),gn=(t,e,o)=>{const{Pt:r=!1,Lt:i=!1}=o||{},s=xe()[Ae],{F:l}=Xe(),c=X(`
`)[0],a=c.firstChild,d=pn.bind(0,c),[u]=n({u:void 0,g:!0,_:(t,e)=>!(!t||!fn(t)&&fn(e))}),f=t=>{const n=h(t)&&t.length>0&&p(t[0]),o=!n&&(t=>"boolean"==typeof t)(t[0]);let i=!1,s=!1,a=!0;if(n){const[e,,n]=u(t.pop().contentRect),o=fn(e),r=fn(n);i=!n||!o,s=!r&&o,a=!i}else o?[,a]=t:s=!0===t;if(r&&a){const e=o?t[0]:pn(c);M(c,e?l.n?-hn:l.i?0:hn:hn),k(c,hn)}i||e({ht:!o,Ht:o?t:void 0,Lt:!!s})},g=[];let w,b=!!i&&f;if(et){const t=new et(f);t.observe(a),y(g,(()=>{t.disconnect()}))}else if(s){const[t,e]=s.A(a,f,i);b=t,y(g,e)}if(r){w=n({u:!d()},d);const[t]=w;y(g,Mt(c,"scroll",(e=>{const n=t(),[o,r]=n;r&&(ct(a,"ltr rtl"),at(a,o?"rtl":"ltr"),f(n)),kt(e)})))}return b&&(at(c,ee),y(g,Mt(c,"animationstart",b,{O:!!et}))),I(t,c),()=>{$(g),K(c)}},wn=(t,e)=>{let o;const r=V(se),i=[],[s]=n({u:!1}),l=(t,n)=>{if(t){const o=s((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,r]=o;if(r)return!n&&e(o),[o]}},c=(t,e)=>{if(t&&t.length>0)return l(t.pop(),e)};if(tt)o=new tt((t=>c(t)),{root:t}),o.observe(r),y(i,(()=>{o.disconnect()}));else{const t=()=>{const t=_t(r);l(t)};y(i,gn(r,t)),t()}return I(t,r),[()=>{$(i),K(r)},()=>{if(o)return c(o.takeRecords(),!0)}]},bn=(e,n,o,r)=>{let i=!1;const{Mt:s,Rt:l,Dt:c,jt:a,Vt:u,kt:h}=r||{},p=wt((()=>{i&&o(!0)}),{v:33,p:99}),[f,g]=((e,n,o)=>{let r,i=!1;const s=s=>{if(o){const l=o.reduce(((t,n)=>{if(n){const o=n[0],r=n[1],i=r&&o&&(s?s(o):A(o,e));i&&i.length&&r&&d(r)&&y(t,[i,r.trim()],!0)}return t}),[]);t(l,(e=>t(e[0],(t=>{const o=e[1],s=r.get(t);if(s){const t=s[0],e=s[1];t===o&&e()}const l=Mt(t,o,(e=>{i?(l(),r.delete(t)):n(e)}));r.set(t,[o,l])}))))}};return o&&(r=new WeakMap,s()),[()=>{i=!0},s]})(e,p,c),w=l||[],b=(s||[]).concat(w),m=(i,s)=>{const l=u||gt,c=h||gt,p=[],f=[];let b=!1,m=!1,$=!1;return t(i,(t=>{const{attributeName:o,target:i,type:s,oldValue:u,addedNodes:h}=t,g="attributes"===s,x="childList"===s,_=e===i,O=g&&d(o)?L(i,o):0,S=0!==O&&u!==O,P=v(w,o)>-1&&S;if(n&&!_){const n=!g,s=g&&P,d=s&&a&&Y(i,a),p=(d?!l(i,o,u,O):n||s)&&!c(t,!!d,e,r);y(f,h),m=m||p,$=$||x}!n&&_&&S&&!l(i,o,u,O)&&(y(p,o),b=b||P)})),$&&!x(f)&&g((t=>f.reduce(((e,n)=>(y(e,A(t,n)),Y(n,t)?y(e,n):e)),[]))),n?(!s&&m&&o(!1),[!1]):!x(p)||b?(!s&&o(p,b),[p,b]):void 0},$=new Q((t=>m(t)));return $.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:n,childList:n,characterData:n}),i=!0,[()=>{i&&(f(),$.disconnect(),i=!1)},()=>{if(i){p.S();const t=$.takeRecords();return!x(t)&&m(t,!0)}}]},vn=`[${Kt}]`,yn=`.${Gt}`,mn=["tabindex"],xn=["wrap","cols","rows"],$n=["id","class","style","open"],_n=(e,o,r)=>{let i,s,l;const[,c]=o,{K:p,Z:f,B:g,rt:w,ut:m,dt:x,ft:$}=e,{T:_,Y:P}=Xe(),[T]=n({_:ut,u:{w:0,h:0}},(()=>{const t=x(Qt,Zt);t&&$(Qt,Zt);const e=St(g),n=St(f),o=Pt(f);return t&&$(Qt,Zt,!0),{w:n.w+e.w+o.w,h:n.h+e.h+o.h}})),E=w?xn:$n.concat(xn),M=wt(r,{v:()=>i,p:()=>s,m(t,e){const[n]=t,[o]=e;return[O(n).concat(O(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),k=e=>{t(e||mn,(t=>{if(v(mn,t)>-1){const e=L(p,t);d(e)?L(f,t,e):C(f,t)}}))},R=(t,e)=>{const[n,o]=t,i={gt:o};return c({_t:n}),!e&&r(i),i},A=({ht:t,Ht:e,Lt:n})=>{const o=!t||n?r:M;let i=!1;if(e){const[t,n]=e;i=n,c({wt:t})}o({ht:t,bt:i})},Y=(t,e)=>{const[,n]=T(),o={vt:n};return n&&!e&&(t?r:M)(o),o},z=(t,e,n)=>{const o={$t:e};return e?!n&&M(o):m||k(t),o},B=(g||!P)&&wn(p,R),H=!m&&gn(p,A,{Lt:!0,Pt:!_}),[D,I]=bn(p,!1,z,{Rt:$n,Mt:$n.concat(mn)}),F=m&&new et(A.bind(0,{ht:!0}));return F&&F.observe(p),k(),[()=>{l&&l[0](),B&&B[0](),H&&H(),F&&F.disconnect(),D()},()=>{const t={},e=I(),n=l&&l[1](),o=B&&B[1]();return e&&S(t,z.apply(0,y(e,!0))),n&&S(t,Y.apply(0,y(n,!0))),o&&S(t,R.apply(0,y(o,!0))),t},t=>{const[e]=t("updating.ignoreMutation"),[n,o]=t("updating.attributes"),[r,c]=t("updating.elementEvents"),[d,p]=t("updating.debounce"),w=t=>u(e)&&e(t);if((c||o)&&(l&&(l[1](),l[0]()),l=bn(g||f,!0,Y,{Rt:E.concat(n||[]),Mt:E.concat(n||[]),Dt:r,jt:vn,kt:(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?b(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,vn,yn)||!!j(n,`.${le}`)||!!w(t)}})),p)if(M.S(),h(d)){const t=d[0],e=d[1];i=!!a(t)&&t,s=!!a(e)&&e}else a(d)?(i=d,s=!1):(i=!1,s=!1)}]},On={x:0,y:0},Sn={k:{t:0,r:0,b:0,l:0},yt:!1,M:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Ot:On,zt:On,Ct:{x:"hidden",y:"hidden"},At:{x:!1,y:!1},_t:!1,wt:!1},Pn="touchstart mouseenter",Tn="touchend touchcancel mouseleave",Ln=(t,e)=>Mt(t,"mousedown",Mt.bind(0,e,"click",kt,{O:!0,$:!0}),{$:!0}),En=(e,n)=>{const{G:o}=Xe(),{qt:r}=o(),{st:i,tt:s,K:l,Z:c,lt:a}=n,d=!a&&e.scrollbarsSlot,u=We([s,l,c],(()=>l),r,d),h=(e,n,o)=>{const r=o?at:ct;t(e,(t=>{r(t.Gt,n)}))},p=[],f=[],g=[],w=h.bind(0,f),b=h.bind(0,g),v=t=>{const e=t?ce:ae,n=t?f:g,o=x(n)?fe:"",r=V(`${le} ${e} ${o} os-theme-dark`),s=V(de),l=V(ue),c={Gt:r,Nt:s,Ut:l};return D(r,s),D(s,l),y(n,c),y(p,[K.bind(0,r),Mt(r,Pn,(()=>{w(ge,!0),b(ge,!0)})),Mt(r,Tn,(()=>{w(ge),b(ge)})),Ln(r,i)]),c},m=v.bind(0,!0),_=v.bind(0,!1);return m(),_(),[{Wt:{Xt:f,Jt:m,Kt:w},Zt:{Xt:g,Jt:_,Kt:b}},()=>{D(u,f[0].Gt),D(u,g[0].Gt),rt((()=>{w(fe),b(fe)}),300)},$.bind(0,p)]},Cn=t=>{let e;const n=t?rt:ot,o=t?it:nt;return[r=>{o(e),e=n(r,u(t)?t():t)},()=>o(e)]},Mn=new Set,kn=new WeakMap,Rn=(e,n,o)=>{let r=!1;const{U:i,P:s,q:l}=Xe(),c=xe(),d=w(e)?e:e.target,h=(t=>kn.get(t))(d);if(h)return h;const p=c[Ce],f=t=>{const e=t||{},n=p&&p.A;return n?n(e,!0):e},g=S({},i(),f(n)),[b,v,y]=zt(o),[m,x,_]=((e,n)=>{const o=jt(n,{}),r=Ht(Sn),[i,s,l]=zt(),[c]=r,[d,u,h]=qe(e),p=((e,n)=>{const{Z:o}=e,{T:r,P:i,Y:s}=Xe(),l=!r&&(i.x||i.y),c=[Je(e,n),Qe(e,n),dn(e,n)];return(e,n,r)=>{const i=un(S({ht:!1,St:!1,bt:!1,gt:!1,Tt:!1,Et:!1,It:!1,$t:!1,vt:!1},n),{},r),d=l||!s,u=d&&M(o),h=d&&k(o);let p=i;return t(c,(t=>{p=un(p,t(p,e,!!r)||{},r)})),a(u)&&M(o,u),a(h)&&k(o,h),p}})(d,r),f=(t,e,n)=>{const o=O(t).some((e=>t[e]));(o||!P(e)||n)&&l("u",[t,e,n])},[g,w,b]=_n(d,r,(t=>{f(p(o,t),{},!1)})),v=c.bind(0);return v.Bt=t=>{i("u",t)},v.Ft=u,v.Yt=d,[(t,e)=>{const o=jt(n,t,e);b(o),f(p(o,w(),e),t,!!e)},v,()=>{s(),g(),h()}]})(e,g),[T,L,E]=((t,e,n)=>{let o,r,i,s,l=0;const c=Ht({}),[a]=c,[d,u]=Cn(),[h,p]=Cn(),[f,g]=Cn(100),[w,b]=Cn(100),[v,y]=Cn((()=>l)),[m,x,_]=En(t,n.Yt),{K:O,Z:S}=n.Yt,{Wt:P,Zt:T}=m,{Kt:L}=P,{Kt:E}=T,C=(t,e)=>{if(y(),t)L(we),E(we);else{const t=()=>{L(we,!0),E(we,!0)};l>0&&!e?v(t):t()}},M=()=>{s=r,s&&C(!0)},k=[g,y,b,p,u,_,Mt(O,"mouseover",M,{O:!0}),Mt(O,"mouseenter",M),Mt(O,"mouseleave",(()=>{s=!1,r&&C(!1)})),Mt(O,"mousemove",(()=>{o&&d((()=>{g(),C(!0),w((()=>{o&&C(!1)}))}))})),Mt(S,"scroll",(()=>{i&&h((()=>{C(!0),f((()=>{i&&!s&&C(!1)}))}))}))],R=a.bind(0);return R.Yt=m,R.Ft=x,[(t,s,c)=>{const{Tt:a,Et:d,It:u}=c,h=jt(e,t,s),[p,f]=h("scrollbars.visibility"),[g,w]=h("scrollbars.autoHide"),[b]=h("scrollbars.autoHideDelay");h("scrollbars.dragScrolling"),h("scrollbars.touchSupport");const v=(t,e)=>{const n="visible"===p||"auto"===p&&"scroll"===t;return e(he,n),n};if(l=b,u||f){const{Ct:t}=n(),e=v(t.x,L),o=v(t.y,E),r=e&&o;L(pe,!r),E(pe,!r)}w&&(o="move"===g,r="leave"===g,i="never"!==g,C(!i,!0))},R,$.bind(0,k)]})(e,g,x),C=(t,e)=>{m(t,!!e)},R=l(C.bind(0,{},!0)),A=t=>{(t=>{kn.delete(t),Mn.delete(t)})(d),R(),E(),_(),r=!0,y("destroyed",[Y,!!t]),v()},Y={options(t){if(t){const e=ye(g,f(t));P(e)||(S(g,e),C(e))}return S({},g)},on:b,off:(t,e)=>{t&&e&&v(t,e)},state(){const{Ot:t,zt:e,Ct:n,At:o,k:i,yt:s}=x();return S({},{overflowEdge:t,overflowAmount:e,overflowStyle:n,hasOverflow:o,padding:i,paddingAbsolute:s,destroyed:r})},elements(){const{tt:t,K:e,k:n,Z:o,B:r}=x.Yt;return S({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update:t=>(C({},t),Y),destroy:A.bind(0)};return x.Bt(((t,e,n)=>{T(e,n,t)})),t(O(c),(t=>{const e=c[t];u(e)&&e(Rn,Y)})),s.x&&s.y&&!g.nativeScrollbarsOverlaid.initialize?(A(!0),Y):(x.Ft(),L.Ft(),((t,e)=>{kn.set(t,e),Mn.add(t)})(d,Y),y("initialized",[Y]),x.Bt(((t,e,n)=>{const{ht:o,bt:r,gt:i,Tt:s,Et:l,It:c,vt:a,$t:d}=t;y("updated",[Y,{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowEdgeChanged:s,overflowAmountChanged:l,overflowStyleChanged:c,contentMutation:a,hostMutation:d},changedOptions:e,force:n}])})),Y.update(!0))};Rn.plugin=e=>{t(h(e)?e:[e],(e=>{t(O(e),(t=>{me[t]=e[t]}))}))},Rn.env=()=>{const{V:t,P:e,T:n,F:o,Y:r,L:i,X:s,J:l,G:c,N:a,U:d,W:u}=Xe();return S({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,defaultInitializationStrategy:s,defaultDefaultOptions:l,getInitializationStrategy:c,setInitializationStrategy:a,getDefaultOptions:d,setDefaultOptions:u})};export{Rn as OverlayScrollbars,Me as optionsValidationPlugin,De as scrollbarsHidingPlugin,Ye as sizeObserverPlugin}; +function t(e,n){if(f(e))for(let t=0;tn(e[t],t,e)));return e}function e(e,n){const o=d(n);if(h(n)||o){let t=o?"":{};if(e){const r=window.getComputedStyle(e,null);t=o?yt(e,r,n):n.reduce(((t,n)=>(t[n]=yt(e,r,n),t)),t)}return t}t(O(n),(t=>mt(e,t,n[t])))}const n=(t,e)=>{const{u:n,_:o,g:r}=t;let i,s=n;const l=(t,e)=>{const n=s,l=t,c=e||(o?!o(n,l):n!==l);return(c||r)&&(s=l,i=n),[s,c,i]};return[e?t=>l(e(s,i),t):l,t=>[s,!!t,i]]},o=Node.ELEMENT_NODE,{toString:r,hasOwnProperty:i}=Object.prototype,s=t=>void 0===t,l=t=>null===t,c=t=>s(t)||l(t)?`${t}`:r.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),a=t=>"number"==typeof t,d=t=>"string"==typeof t,u=t=>"function"==typeof t,h=t=>Array.isArray(t),p=t=>"object"==typeof t&&!h(t)&&!l(t),f=t=>{const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!(!(h(t)||!u(t)&&n)||e>0&&p(t)&&!(e-1 in t))},g=t=>{if(!t||!p(t)||"object"!==c(t))return!1;let e;const n="constructor",o=t[n],r=o&&o.prototype,l=i.call(t,n),a=r&&i.call(r,"isPrototypeOf");if(o&&!l&&!a)return!1;for(e in t);return s(e)||i.call(t,e)},b=t=>{const e=HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===o)},w=t=>{const e=Element;return!!t&&(e?t instanceof e:t.nodeType===o)},v=(t,e,n)=>t.indexOf(e,n),y=(t,e,n)=>(n||d(e)||!f(e)?t.push(e):Array.prototype.push.apply(t,e),t),m=e=>{const n=Array.from,o=[];return n&&e?n(e):(e instanceof Set?e.forEach((t=>{y(o,t)})):t(e,(t=>{y(o,t)})),o)},x=t=>!!t&&0===t.length,$=(e,n,o)=>{t(e,(t=>t&&t.apply(void 0,n||[]))),!o&&(e.length=0)},_=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),O=t=>t?Object.keys(t):[],S=(e,n,o,r,i,s,c)=>{const a=[n,o,r,i,s,c];return"object"==typeof e&&!l(e)||u(e)||(e={}),t(a,(n=>{t(O(n),(t=>{const o=n[t];if(e===o)return!0;const r=h(o);if(o&&(g(o)||r)){const n=e[t];let i=n;r&&!h(n)?i=[]:r||g(n)||(i={}),e[t]=S(i,o)}else e[t]=o}))})),e},P=t=>{for(const e in t)return!1;return!0},T=(t,e,n,o)=>{if(s(o))return n?n[t]:e;n&&!l(o)&&!1!==o&&(n[t]=o)},L=(t,e,n)=>{if(s(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)},E=(t,e,n,o)=>{if(n){const r=L(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),L(t,e,m(i).join(" ").trim())}},C=(t,e)=>{t&&t.removeAttribute(e)},M=(t,e)=>T("scrollLeft",0,t,e),R=(t,e)=>T("scrollTop",0,t,e),z=Element.prototype,A=(t,e)=>{const n=[],o=e?w(e)?e:null:document;return o?y(n,o.querySelectorAll(t)):n},B=(t,e)=>!!w(t)&&(z.matches||z.msMatchesSelector).call(t,e),j=t=>t?m(t.childNodes):[],Y=t=>t?t.parentElement:null,H=(t,e)=>{if(w(t)){const n=z.closest;if(n)return n.call(t,e);do{if(B(t,e))return t;t=Y(t)}while(t)}return null},k=(e,n,o)=>{if(o){let r,i=n;e&&(f(o)?(r=document.createDocumentFragment(),t(o,(t=>{t===i&&(i=t.previousSibling),r.appendChild(t)}))):r=o,n&&(i?i!==n&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(r,i||null))}},D=(t,e)=>{k(t,null,e)},I=(t,e)=>{k(t,t&&t.firstChild,e)},F=(t,e)=>{k(Y(t),t&&t.nextSibling,e)},K=e=>{if(f(e))t(m(e),(t=>K(t)));else if(e){const t=Y(e);t&&t.removeChild(e)}},V=t=>{const e=document.createElement("div");return t&&L(e,"class",t),e},X=e=>{const n=V();return n.innerHTML=e.trim(),t(j(n),(t=>K(t)))},J=t=>t.charAt(0).toUpperCase()+t.slice(1),N=["-webkit-","-moz-","-o-","-ms-"],W=["WebKit","Moz","O","MS","webkit","moz","o","ms"],Z={},q={},U=e=>{let n=q[e];if(_(q,e))return n;const o=J(e),r=V().style;return t(N,(t=>{const i=t.replace(/-/g,""),s=[e,t+e,i+o,J(i)+o];return!(n=s.find((t=>void 0!==r[t])))})),q[e]=n||""},G=e=>{let n=Z[e]||window[e];return _(Z,e)||(t(W,(t=>(n=n||window[t+J(e)],!n))),Z[e]=n),n},Q=G("MutationObserver"),tt=G("IntersectionObserver"),et=G("ResizeObserver"),nt=G("cancelAnimationFrame"),ot=G("requestAnimationFrame"),rt=window.setTimeout,it=window.clearTimeout,st=/[^\x20\t\r\n\f]+/g,lt=(t,e,n)=>{const o=t&&t.classList;let r,i=0,s=!1;if(o&&e&&d(e)){const t=e.match(st)||[];for(s=t.length>0;r=t[i++];)s=!!n(o,r)&&s}return s},ct=(t,e)=>{lt(t,e,((t,e)=>t.remove(e)))},at=(t,e)=>(lt(t,e,((t,e)=>t.add(e))),ct.bind(0,t,e)),dt=(e,n,o,r)=>{if(e&&n){let i=!0;return t(o,(t=>{(r?r(e[t]):e[t])!==(r?r(n[t]):n[t])&&(i=!1)})),i}return!1},ut=(t,e)=>dt(t,e,["w","h"]),ht=(t,e)=>dt(t,e,["x","y"]),pt=(t,e)=>dt(t,e,["t","r","b","l"]),ft=(t,e,n)=>dt(t,e,["width","height"],n&&(t=>Math.round(t))),gt=()=>{},bt=(t,e)=>{let n,o,r,i=gt;const{v:s,p:l,m:c}=e||{},d=function(e){i(),it(n),n=o=void 0,i=gt,t.apply(this,e)},h=t=>c&&o?c(o,t):t,p=()=>{i!==gt&&d(h(r)||r)},f=function(){const t=m(arguments),e=u(s)?s():s,c=a(e)&&e>=0;if(c){const s=u(l)?l():l,c=a(s)&&s>=0,f=e>0?rt:ot,g=e>0?it:nt,b=h(t)||t,w=d.bind(0,b);i();const v=f(w,e);i=()=>g(v),c&&!n&&(n=rt(p,s)),o=r=b}else d(t)};return f.S=p,f},wt={opacity:1,zindex:1},vt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return n==n?n:0},yt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],mt=(t,e,n)=>{try{if(t){const{style:o}=t;s(o[e])?o.setProperty(e,n):o[e]=((t,e)=>!wt[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}}catch(z){}},xt=(t,n,o)=>{const r=n?`${n}-`:"",i=o?`-${o}`:"",s=`${r}top${i}`,l=`${r}right${i}`,c=`${r}bottom${i}`,a=`${r}left${i}`,d=e(t,[s,l,c,a]);return{t:vt(d[s]),r:vt(d[l]),b:vt(d[c]),l:vt(d[a])}},$t={w:0,h:0},_t=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:$t,Ot=t=>t?{w:t.clientWidth,h:t.clientHeight}:$t,St=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:$t,Pt=t=>{const n=parseFloat(e(t,"height"))||0,o=parseFloat(e(t,"height"))||0;return{w:o-Math.round(o),h:n-Math.round(n)}},Tt=t=>t.getBoundingClientRect();let Lt;const Et=t=>t.split(" "),Ct=(e,n,o,r)=>{t(Et(n),(t=>{e.removeEventListener(t,o,r)}))},Mt=(e,n,o,r)=>{var i;const l=(()=>{if(s(Lt)){Lt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){Lt=!0}}))}catch(e){}}return Lt})(),c=null!=(i=l&&r&&r.C)?i:l,a=r&&r.$||!1,d=r&&r.O||!1,u=[],h=l?{passive:c,capture:a}:a;return t(Et(n),(t=>{const n=d?r=>{e.removeEventListener(t,n,a),o&&o(r)}:o;y(u,Ct.bind(null,e,t,n,a)),e.addEventListener(t,n,h)})),$.bind(0,u)},Rt=t=>t.stopPropagation(),zt={x:0,y:0},At=t=>{const e=t?Tt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:zt},Bt=(e,n)=>{t(h(n)?n:[n],e)},jt=e=>{const n=new Map,o=(t,e)=>{if(t){const o=n.get(t);Bt((t=>{o&&o[t?"delete":"clear"](t)}),e)}else n.forEach((t=>{t.clear()})),n.clear()},r=(t,e)=>{const r=n.get(t)||new Set;return n.set(t,r),Bt((t=>{t&&r.add(t)}),e),o.bind(0,t,e)};return t(O(e),(t=>{r(t,e[t])})),[r,o,(e,o)=>{const r=n.get(e);t(m(r),(t=>{o&&!x(o)?t.apply(0,o):t()}))}]},Yt=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&_(t,e)?t[e]:void 0),t):void 0,Ht=(t,e,n)=>o=>[Yt(t,o),n||void 0!==Yt(e,o)],kt=t=>{let e=t;return[()=>e,t=>{e=S({},e,t)}]},Dt="os-environment",It=`${Dt}-flexbox-glue`,Ft=`${It}-max`,Kt="data-overlayscrollbars",Vt=`${Kt}-overflow-x`,Xt=`${Kt}-overflow-y`,Jt="overflowVisible",Nt="viewportStyled",Wt="os-padding",Zt="os-viewport",qt=`${Zt}-arrange`,Ut="os-content",Gt=`${Zt}-scrollbar-styled`,Qt=`os-overflow-visible`,te="os-size-observer",ee=`${te}-appear`,ne=`${te}-listener`,oe=`${ne}-scroll`,re=`${ne}-item`,ie=`${re}-final`,se="os-trinsic-observer",le="os-scrollbar",ce=`${le}-horizontal`,ae=`${le}-vertical`,de="os-scrollbar-track",ue="os-scrollbar-handle",he=`${le}-visible`,pe=`${le}-cornerless`,fe=`${le}-transitionless`,ge=`${le}-interaction`,be=`${le}-auto-hidden`,we=t=>JSON.stringify(t,((t,e)=>{if(u(e))throw new Error;return e})),ve={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},ye=(e,n)=>{const o={};return t(O(n).concat(O(e)),(t=>{const r=e[t],i=n[t];if(p(r)&&p(i))S(o[t]={},ye(r,i));else if(_(n,t)&&i!==r){let e=!0;if(h(r)||h(i))try{we(r)===we(i)&&(e=!1)}catch(Z){}e&&(o[t]=i)}})),o},me={},xe=()=>S({},me);var $e={exports:{}};!function(t){function e(){return t.exports=e=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const i={},l=_e({},n);return t(O(e).filter((t=>_(n,t))),(a=>{const u=n[a],p=e[a],f=g(p),b=r?`${r}.`:"";if(f&&g(u)){const[e,n]=Se(p,u,o,b+a);i[a]=e,l[a]=n,t([l,i],(t=>{P(t[a])&&delete t[a]}))}else if(!f){let e=!1;const n=[],r=[],f=c(u);t(h(p)?p:[p],(o=>{let i;t(Oe,((t,e)=>{t===o&&(i=e)}));const l=s(i);if(l&&d(u)){const t=o.split(" ");e=!!t.find((t=>t===u)),y(n,t)}else e=Oe[f]===o;return y(r,l?Oe.string:i),!e})),e?i[a]=u:o&&console.warn(`${`The option "${b}${a}" wasn't set, because it doesn't accept the type [ ${f.toUpperCase()} ] with the value of "${u}".\r\n`+`Accepted types are: [ ${r.join(", ").toUpperCase()} ].\r\n`}${n.length>0?`\r\nValid strings are: [ ${n.join(", ")} ].`:""}`),delete l[a]}})),[i,l]},Pe=Oe.boolean,Te=[Oe.array,Oe.null],Le="hidden scroll visible visible-hidden",Ee={paddingAbsolute:Pe,updating:{elementEvents:Te,attributes:Te,debounce:[Oe.number,Oe.array,Oe.null],ignoreMutation:[Oe.function,Oe.null]},overflow:{x:Le,y:Le},scrollbars:{theme:[Oe.string,Oe.null],visibility:"visible hidden auto",autoHide:"never scroll leavemove",autoHideDelay:Oe.number,dragScroll:Pe,clickScroll:Pe,touch:Pe},nativeScrollbarsOverlaid:{show:Pe,initialize:Pe}},Ce="__osOptionsValidationPlugin",Me={[Ce]:{A:(t,e)=>{const[n,o]=((t,e,n)=>Se(Ee,e,n))(0,t,e);return _e({},o,n)}}},Re=3333333,ze="scroll",Ae="__osSizeObserverPlugin",Be={[Ae]:{A:(t,n,o)=>{const r=X(`
`);D(t,r),at(t,oe);const i=r[0],s=i.lastChild,l=i.firstChild,c=null==l?void 0:l.firstChild;let a,d=_t(i),u=d,h=!1;const p=()=>{M(l,Re),R(l,Re),M(s,Re),R(s,Re)},f=t=>{a=0,h&&(d=u,n(!0===t))},g=t=>{u=_t(i),h=!t||!ut(u,d),t?(Rt(t),h&&!a&&(nt(a),a=ot(f))):f(!1===t),p()},b=y([],[Mt(l,ze,g),Mt(s,ze,g)]);return e(c,{width:Re,height:Re}),p(),[o?g.bind(0,!1):p,b]}}};let je=0;const{round:Ye,abs:He}=Math,ke="__osScrollbarsHidingPlugin",De={[ke]:{I:t=>{const{T:e,P:n,L:o}=t,r=!(o||e||!n.x&&!n.y)&&document.createElement("style");return r&&(L(r,"id",`${qt}-${je}`),je++),r},H:(n,o,r,i,s,l,c)=>[(t,o,l,c)=>{if(n){const{M:n}=s(),{R:a,D:d}=t,{x:u,y:h}=d,{x:p,y:f}=a,g=n[c?"paddingRight":"paddingLeft"],b=n.paddingTop,w=o.w+l.w,v=o.h+l.h,y={w:f&&h?`${f+w-g}px`:"",h:p&&u?`${p+v-b}px`:""};if(i){const{sheet:t}=i;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${L(i,"id")} + .${qt}::before {}`,0);const n=e[0].style;n.width=y.w,n.height=y.h}}}else e(r,{"--os-vaw":y.w,"--os-vah":y.h})}return n},(i,a,d)=>{if(n){const u=d||l(i),{M:h}=s(),{D:p}=u,{x:f,y:g}=p,b={},w=e=>t(e.split(" "),(t=>{b[t]=h[t]}));f&&w("marginBottom paddingTop paddingBottom"),g&&w("marginLeft marginRight paddingLeft paddingRight");const v=e(r,O(b));return ct(r,qt),o||(b.height=""),e(r,b),[()=>{c(u,a,n,v),e(r,v),at(r,qt)},u]}return[gt]}],j:()=>{let t={w:0,h:0},e=0;return(n,o,r)=>{const i={w:window.innerWidth,h:window.innerHeight},s={w:i.w-t.w,h:i.h-t.h};if(0===s.w&&0===s.h)return;const l=He(s.w),c=He(s.h),a={w:He(Ye(i.w/(t.w/100))),h:He(Ye(i.h/(t.h/100)))},d=(()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e})(),u=l>2&&c>2,h=!((t,e)=>{const n=He(t),o=He(e);return!(n===o||n+1===o||n-1===o)})(a.w,a.h);if(u&&h&&d!==e&&d>0){const[t,e]=o();S(n.V,t),e&&r()}t=i,e=d}}}};let Ie;const Fe=(t,e,n,o)=>{D(t,e);const r=Ot(e),i=_t(e),s=Pt(n);return o&&K(e),{x:i.h-r.h+s.h,y:i.w-r.w+s.w}},Ke=(t,n)=>{const o="hidden";e(t,{overflowX:o,overflowY:o,direction:"rtl"}),M(t,0);const r=At(t),i=At(n);M(t,-999);const s=At(n);return{i:r.x===i.x,n:i.x!==s.x}},Ve=(t,e)=>{const n=at(t,It),o=Tt(t),r=Tt(e),i=ft(r,o,!0),s=at(t,Ft),l=Tt(t),c=Tt(e),a=ft(c,l,!0);return n(),s(),i&&a},Xe=()=>(Ie||(Ie=(()=>{const{body:t}=document,o=X(`
`)[0],r=o.firstChild,[i,,s]=jt(),[l,c]=n({u:Fe(t,o,r),_:ht},Fe.bind(0,t,o,r,!0)),[a]=c(),d=(t=>{let n=!1;const o=at(t,Gt);try{n="none"===e(t,U("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return o(),n})(o),u={x:0===a.x,y:0===a.y},h={padding:!d,content:!1},p=S({},ve),f={V:a,P:u,T:d,L:"-1"===e(o,"zIndex"),k:Ke(o,r),B:Ve(o,r),F:t=>i("_",t),Y:S.bind(0,{},h),q(t){S(h,t)},G:S.bind(0,{},p),N(t){S(p,t)},U:S({},h),W:S({},p)};if(C(o,"style"),K(o),!(d||u.x&&u.y)){let t;window.addEventListener("resize",(()=>{const e=xe()[ke];t=t||e&&e.j(),t&&t(f,l,s.bind(0,"_"))}))}return f})()),Ie),Je=(t,e)=>u(t)?t.apply(0,e):t,Ne=(t,e,n,o)=>Je(o||Je(n,t),t)||e.apply(0,t),We=(t,e,n,o)=>{let r=Je(o,t);return(l(r)||s(r))&&(r=Je(n,t)),!0===r||l(r)||s(r)?e.apply(0,t):r},Ze=V.bind(0,""),qe=t=>{D(Y(t),j(t)),K(t)},Ue=t=>{const e=Xe(),{Y:n,T:o}=e,r=xe()[ke],i=r&&r.I,{host:s,viewport:l,padding:c,content:a}=n(),d=b(t),u=t,h=d?t:u.target,p=B(h,"textarea"),f=!p&&B(h,"body"),g=h.ownerDocument,w=g.body,m=g.defaultView,x=!!et&&!p&&o,_=Ne.bind(0,[h]),S=We.bind(0,[h]),P=[_(Ze,l,u.viewport),_(Ze,l),_(Ze)].filter((t=>!!x||t!==h))[0],T=P===h,M={X:h,J:p?_(Ze,s,u.host):h,K:P,Z:!T&&S(Ze,c,u.padding),tt:!T&&S(Ze,a,u.content),nt:!T&&!o&&i&&i(e),ot:m,st:g,et:Y(w),ct:w,rt:p,it:f,lt:d,ut:T,dt:(t,e)=>T?((t,e,n)=>{const o=L(t,Kt)||"";return new Set(o.split(" ")).has(n)})(P,0,e):((t,e)=>lt(t,e,((t,e)=>t.contains(e))))(P,t),ft:(t,e,n)=>T?E(P,Kt,e,n):(n?at:ct)(P,t)},R=O(M).reduce(((t,e)=>{const n=M[e];return y(t,!(!n||Y(n))&&n)}),[]),z=t=>t?v(R,t)>-1:null,{X:A,J:H,Z:I,K:V,tt:X,nt:J}=M,N=[],W=p&&z(H),Z=p?A:j([X,V,I,H,A].find((t=>!1===z(t)))),q=X||V;return[M,()=>{const t=((t,e)=>(L(t,Kt,e),C.bind(0,t,Kt)))(H,T?"viewport":"host"),e=at(I,Wt),n=at(V,!T&&Zt),r=at(X,Ut);W&&(F(A,H),y(N,(()=>{F(H,A),K(H)}))),D(q,Z),D(H,I),D(I||H,!T&&V),D(V,X),y(N,(()=>{t(),C(V,Vt),C(V,Xt),z(X)&&qe(X),z(V)&&qe(V),z(I)&&qe(I),e(),n(),r()})),o&&!T&&y(N,ct.bind(0,V,Gt)),J&&(((t,e)=>{k(Y(t),t,e)})(V,J),y(N,K.bind(0,J)))},$.bind(0,N)]},Ge=(t,n)=>{const{tt:o}=t,[r]=n;return t=>{const{B:n}=Xe(),{_t:i}=r(),{gt:s}=t,l=(o||!n)&&s;return l&&e(o,{height:i?"":"100%"}),{ht:l,vt:l}}},Qe=(t,o)=>{const[r,i]=o,{J:s,Z:l,K:c,ut:a}=t,[d,u]=n({_:pt,u:xt()},xt.bind(0,s,"padding",""));return(t,n,o)=>{let[s,h]=u(o);const{T:p,B:f}=Xe(),{wt:g}=r(),{ht:b,vt:w,bt:v}=t,[y,m]=n("paddingAbsolute");(b||h||!f&&w)&&([s,h]=d(o));const x=!a&&(m||v||h);if(x){const t=!y||!l&&!p,n=s.r+s.l,o=s.t+s.b,r={marginRight:t&&!g?-n:0,marginBottom:t?-o:0,marginLeft:t&&g?-n:0,top:t?-s.t:0,right:t?g?-s.r:"auto":0,left:t?g?"auto":-s.l:0,width:t?`calc(100% + ${n}px)`:""},a={paddingTop:t?s.t:0,paddingRight:t?s.r:0,paddingBottom:t?s.b:0,paddingLeft:t?s.l:0};e(l||c,r),e(c,a),i({Z:s,yt:!t,M:l?a:S({},r,a)})}return{St:x}}},{max:tn}=Math,en=tn.bind(0,0),nn="visible",on="hidden",rn=42,sn={_:ut,u:{w:0,h:0}},ln={_:ht,u:{x:on,y:on}},cn=(t,e,n)=>n?at(t,e):ct(t,e),an=t=>0===t.indexOf(nn),dn=(t,o)=>{const[r,i]=o,{J:s,Z:l,K:c,nt:a,ut:d,ft:u}=t,{V:h,B:p,T:f,P:g}=Xe(),b=xe()[ke],w=!d&&!f&&(g.x||g.y),[v,y]=n(sn,Pt.bind(0,c)),[m,x]=n(sn,St.bind(0,c)),[$,_]=n(sn),[O,S]=n(sn),[P]=n(ln),T=(t,n)=>{if(e(c,{height:""}),n){const{yt:n,Z:o}=r(),{xt:i,R:l}=t,a=Pt(s),d=Ot(s),u="content-box"===e(c,"boxSizing"),h=n||u?o.b+o.t:0,p=!(g.x&&u);e(c,{height:d.h+a.h+(i.x&&p?l.x:0)-h})}},C=(t,n)=>{const o=f||t?0:rn,r=(t,r,i)=>{const s=e(c,t),l="scroll"===(n?n[t]:s);return[s,l,l&&!f?r?o:i:0,r&&!!o]},[i,s,l,a]=r("overflowX",g.x,h.x),[d,u,p,b]=r("overflowY",g.y,h.y);return{Ct:{x:i,y:d},xt:{x:s,y:u},R:{x:l,y:p},D:{x:a,y:b}}},M=(t,e,n,o)=>{const{R:i,D:s}=t,{x:l,y:c}=s,{x:a,y:d}=i,{M:u}=r(),h=e?"marginLeft":"marginRight",p=e?"paddingLeft":"paddingRight",f=u[h],g=u.marginBottom,b=u[p],w=u.paddingBottom;o.width=`calc(100% + ${d+-1*f}px)`,o[h]=-d+f,o.marginBottom=-a+g,n&&(o[p]=b+(c?d:0),o.paddingBottom=w+(l?a:0))},[R,z]=b?b.H(w,p,c,a,r,C,M):[()=>w,()=>[gt]];return(t,n,o)=>{const{ht:a,$t:h,vt:b,St:w,gt:A,bt:B}=t,{_t:j,wt:Y}=r(),[H,k]=n("nativeScrollbarsOverlaid.show"),[D,I]=n("overflow"),F=H&&g.x&&g.y,K=!d&&!p&&(a||b||h||k||A),V=an(D.x),X=an(D.y),J=V||X;let N,W=y(o),Z=x(o),q=_(o),U=S(o);if(k&&f&&u(Gt,Nt,!F),K&&(N=C(F),T(N,j)),a||w||b||B||k){J&&u(Qt,Jt,!1);const[t,e]=z(F,Y,N),[n,r]=W=v(o),[i,s]=Z=m(o),l=Ot(c);let a=i,d=l;t(),(s||r||k)&&e&&!F&&R(e,i,n,Y)&&(d=Ot(c),a=St(c));const h={w:en(tn(i.w,a.w)+n.w),h:en(tn(i.h,a.h)+n.h)},p={w:en(d.w+en(l.w-i.w)+n.w),h:en(d.h+en(l.h-i.h)+n.h)};U=O(p),q=$(((t,e)=>{const n=window.devicePixelRatio%1!=0?1:0,o={w:en(t.w-e.w),h:en(t.h-e.h)};return{w:o.w>n?o.w:0,h:o.h>n?o.h:0}})(h,p),o)}const[G,Q]=U,[tt,et]=q,[nt,ot]=Z,[rt,it]=W,st={x:tt.w>0,y:tt.h>0},lt=V&&X&&(st.x||st.y)||V&&st.x&&!st.y||X&&st.y&&!st.x;if(w||B||it||ot||Q||et||I||k||K){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},n=((t,e,n,o)=>{const r=(t,e)=>{const n=an(t),o=e&&n&&t.replace(`${nn}-`,"")||"";return[e&&!n?t:"",an(o)?"hidden":o]},[i,s]=r(n.x,e.x),[l,c]=r(n.y,e.y);return o.overflowX=s&&l?s:i,o.overflowY=c&&i?c:l,C(t,o)})(F,st,D,t),o=R(n,nt,rt,Y);d||M(n,Y,o,t),K&&T(n,j),d?(L(s,Vt,t.overflowX),L(s,Xt,t.overflowY)):e(c,t)}E(s,Kt,Jt,lt),cn(l,Qt,lt),!d&&cn(c,Qt,J);const[ct,at]=P(C(F).Ct);return i({Ct:ct,Ot:{x:G.w,y:G.h},zt:{x:tt.w,y:tt.h},At:st}),{It:at,Tt:Q,Et:et}}},un=(e,n,o)=>{const r={},i=n||{};return t(O(e).concat(O(i)),(t=>{const n=e[t],s=i[t];r[t]=!!(o||n||s)})),r},hn=3333333,pn=t=>"rtl"===e(t,"direction"),fn=t=>t&&(t.height||t.width),gn=(t,e,o)=>{const{Pt:r=!1,Lt:i=!1}=o||{},s=xe()[Ae],{k:l}=Xe(),c=X(`
`)[0],a=c.firstChild,d=pn.bind(0,c),[u]=n({u:void 0,g:!0,_:(t,e)=>!(!t||!fn(t)&&fn(e))}),f=t=>{const n=h(t)&&t.length>0&&p(t[0]),o=!n&&(t=>"boolean"==typeof t)(t[0]);let i=!1,s=!1,a=!0;if(n){const[e,,n]=u(t.pop().contentRect),o=fn(e),r=fn(n);i=!n||!o,s=!r&&o,a=!i}else o?[,a]=t:s=!0===t;if(r&&a){const e=o?t[0]:pn(c);M(c,e?l.n?-hn:l.i?0:hn:hn),R(c,hn)}i||e({ht:!o,Ht:o?t:void 0,Lt:!!s})},g=[];let b,w=!!i&&f;if(et){const t=new et(f);t.observe(a),y(g,(()=>{t.disconnect()}))}else if(s){const[t,e]=s.A(a,f,i);w=t,y(g,e)}if(r){b=n({u:!d()},d);const[t]=b;y(g,Mt(c,"scroll",(e=>{const n=t(),[o,r]=n;r&&(ct(a,"ltr rtl"),at(a,o?"rtl":"ltr"),f(n)),Rt(e)})))}return w&&(at(c,ee),y(g,Mt(c,"animationstart",w,{O:!!et}))),I(t,c),()=>{$(g),K(c)}},bn=(t,e)=>{let o;const r=V(se),i=[],[s]=n({u:!1}),l=(t,n)=>{if(t){const o=s((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,r]=o;if(r)return!n&&e(o),[o]}},c=(t,e)=>{if(t&&t.length>0)return l(t.pop(),e)};if(tt)o=new tt((t=>c(t)),{root:t}),o.observe(r),y(i,(()=>{o.disconnect()}));else{const t=()=>{const t=_t(r);l(t)};y(i,gn(r,t)),t()}return I(t,r),[()=>{$(i),K(r)},()=>{if(o)return c(o.takeRecords(),!0)}]},wn=(e,n,o,r)=>{let i=!1;const{Mt:s,Rt:l,Dt:c,jt:a,Vt:u,kt:h}=r||{},p=bt((()=>{i&&o(!0)}),{v:33,p:99}),[f,g]=((e,n,o)=>{let r,i=!1;const s=s=>{if(o){const l=o.reduce(((t,n)=>{if(n){const o=n[0],r=n[1],i=r&&o&&(s?s(o):A(o,e));i&&i.length&&r&&d(r)&&y(t,[i,r.trim()],!0)}return t}),[]);t(l,(e=>t(e[0],(t=>{const o=e[1],s=r.get(t);if(s){const t=s[0],e=s[1];t===o&&e()}const l=Mt(t,o,(e=>{i?(l(),r.delete(t)):n(e)}));r.set(t,[o,l])}))))}};return o&&(r=new WeakMap,s()),[()=>{i=!0},s]})(e,p,c),b=l||[],w=(s||[]).concat(b),m=(i,s)=>{const l=u||gt,c=h||gt,p=[],f=[];let w=!1,m=!1,$=!1;return t(i,(t=>{const{attributeName:o,target:i,type:s,oldValue:u,addedNodes:h}=t,g="attributes"===s,x="childList"===s,_=e===i,O=g&&d(o)?L(i,o):0,S=0!==O&&u!==O,P=v(b,o)>-1&&S;if(n&&!_){const n=!g,s=g&&P,d=s&&a&&B(i,a),p=(d?!l(i,o,u,O):n||s)&&!c(t,!!d,e,r);y(f,h),m=m||p,$=$||x}!n&&_&&S&&!l(i,o,u,O)&&(y(p,o),w=w||P)})),$&&!x(f)&&g((t=>f.reduce(((e,n)=>(y(e,A(t,n)),B(n,t)?y(e,n):e)),[]))),n?(!s&&m&&o(!1),[!1]):!x(p)||w?(!s&&o(p,w),[p,w]):void 0},$=new Q((t=>m(t)));return $.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:n,childList:n,characterData:n}),i=!0,[()=>{i&&(f(),$.disconnect(),i=!1)},()=>{if(i){p.S();const t=$.takeRecords();return!x(t)&&m(t,!0)}}]},vn=`[${Kt}]`,yn=`.${Zt}`,mn=["tabindex"],xn=["wrap","cols","rows"],$n=["id","class","style","open"],_n=(e,o,r)=>{let i,s,l;const[,c]=o,{J:p,K:f,tt:g,rt:b,ut:m,dt:x,ft:$}=e,{T:_,B:P}=Xe(),[T]=n({_:ut,u:{w:0,h:0}},(()=>{const t=x(Qt,Jt),e=x(qt,""),n=e&&M(f),o=e&&R(f);$(Qt,Jt),$(qt,"");const r=St(g),i=St(f),s=Pt(f);return $(Qt,Jt,t),$(qt,"",e),M(f,n),R(f,o),{w:i.w+r.w+s.w,h:i.h+r.h+s.h}})),E=b?xn:$n.concat(xn),z=bt(r,{v:()=>i,p:()=>s,m(t,e){const[n]=t,[o]=e;return[O(n).concat(O(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),A=e=>{t(e||mn,(t=>{if(v(mn,t)>-1){const e=L(p,t);d(e)?L(f,t,e):C(f,t)}}))},B=(t,e)=>{const[n,o]=t,i={gt:o};return c({_t:n}),!e&&r(i),i},j=({ht:t,Ht:e,Lt:n})=>{const o=!t||n?r:z;let i=!1;if(e){const[t,n]=e;i=n,c({wt:t})}o({ht:t,bt:i})},Y=(t,e)=>{const[,n]=T(),o={vt:n};return n&&!e&&(t?r:z)(o),o},k=(t,e,n)=>{const o={$t:e};return e?!n&&z(o):m||A(t),o},D=(g||!P)&&bn(p,B),I=!m&&gn(p,j,{Lt:!0,Pt:!_}),[F,K]=wn(p,!1,k,{Rt:$n,Mt:$n.concat(mn)}),V=m&&new et(j.bind(0,{ht:!0}));return V&&V.observe(p),A(),[()=>{l&&l[0](),D&&D[0](),I&&I(),V&&V.disconnect(),F()},()=>{const t={},e=K(),n=l&&l[1](),o=D&&D[1]();return e&&S(t,k.apply(0,y(e,!0))),n&&S(t,Y.apply(0,y(n,!0))),o&&S(t,B.apply(0,y(o,!0))),t},t=>{const[e]=t("updating.ignoreMutation"),[n,o]=t("updating.attributes"),[r,c]=t("updating.elementEvents"),[d,p]=t("updating.debounce"),b=t=>u(e)&&e(t);if((c||o)&&(l&&(l[1](),l[0]()),l=wn(g||f,!0,Y,{Rt:E.concat(n||[]),Mt:E.concat(n||[]),Dt:r,jt:vn,kt:(t,e)=>{const{target:n,attributeName:o}=t;return!(e||!o)&&((t,e,n)=>{const o=t&&H(t,e),r=t&&((t,e)=>{const n=e?w(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r||o!==t&&r!==t&&H(H(t,n),e)===o)})(n,vn,yn)||!!H(n,`.${le}`)||!!b(t)}})),p)if(z.S(),h(d)){const t=d[0],e=d[1];i=!!a(t)&&t,s=!!a(e)&&e}else a(d)?(i=d,s=!1):(i=!1,s=!1)}]},On={x:0,y:0},Sn={Z:{t:0,r:0,b:0,l:0},yt:!1,M:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Ot:On,zt:On,Ct:{x:"hidden",y:"hidden"},At:{x:!1,y:!1},_t:!1,wt:!1},Pn="touchstart mouseenter",Tn="touchend touchcancel mouseleave",Ln=(t,e)=>Mt(t,"mousedown",Mt.bind(0,e,"click",Rt,{O:!0,$:!0}),{$:!0}),En=(n,o)=>{const{Y:r}=Xe(),{scrollbarsSlot:i}=r(),{st:s,X:l,J:c,K:a,lt:d}=o,u=d?null:n.scrollbarsSlot,h=We([l,c,a],(()=>c),i,u),p=(e,n,o,r)=>{const i=o?at:ct;t(e,(t=>{i((r||gt)(t)||t.qt,n)}))},f=(n,o)=>{t(n,(t=>{const[n,r]=o(t);e(n,r)}))},g=[],b=[],w=[],v=p.bind(0,b),m=p.bind(0,w),_=t=>{const e=t?ce:ae,n=t?b:w,o=x(n)?fe:"",r=V(`${le} ${e} ${o}`),i=V(de),l=V(ue),c={qt:r,Gt:i,Nt:l};return D(r,i),D(i,l),y(n,c),y(g,[K.bind(0,r),Mt(r,Pn,(()=>{v(ge,!0),m(ge,!0)})),Mt(r,Tn,(()=>{v(ge),m(ge)})),Ln(r,s)]),c},O=_.bind(0,!0),S=_.bind(0,!1);return O(),S(),[{Ut:{Wt:b,Xt:O,Jt:v,Kt:f.bind(0,b)},Zt:{Wt:w,Xt:S,Jt:m,Kt:f.bind(0,w)}},()=>{D(h,b[0].qt),D(h,w[0].qt),rt((()=>{v(fe),m(fe)}),300)},$.bind(0,g)]},{min:Cn}=Math,Mn=t=>{let e;const n=t?rt:ot,o=t?it:nt;return[r=>{o(e),e=n(r,u(t)?t():t)},()=>o(e)]},Rn=(t,e,n)=>{const{zt:o,Ot:r}=e,i=n?"x":"y",s=r[i],l=o[i],c=Cn(1,s/(s+l));t((t=>[t.Nt,{[n?"width":"height"]:`${(100*c).toFixed(3)}%`}]))},zn=new Set,An=new WeakMap,Bn=(e,n,o)=>{let r=!1;const{G:i,P:s,F:l}=Xe(),c=xe(),a=b(e)?e:e.target,d=(t=>An.get(t))(a);if(d)return d;const h=c[Ce],p=t=>{const e=t||{},n=h&&h.A;return n?n(e,!0):e},f=S({},i(),p(n)),[g,w,v]=jt(o),[y,m,x]=((e,n)=>{const o=Ht(n,{}),r=kt(Sn),[i,s,l]=jt(),[c]=r,[a,d,u]=Ue(e),h=((e,n)=>{const{K:o}=e,{T:r,P:i,B:s}=Xe(),l=!r&&(i.x||i.y),c=[Ge(e,n),Qe(e,n),dn(e,n)];return(e,n,r)=>{const i=un(S({ht:!1,St:!1,bt:!1,gt:!1,Tt:!1,Et:!1,It:!1,$t:!1,vt:!1},n),{},r),a=l||!s,d=a&&M(o),u=a&&R(o);let h=i;return t(c,(t=>{h=un(h,t(h,e,!!r)||{},r)})),M(o,d),R(o,u),h}})(a,r),p=(t,e,n)=>{const o=O(t).some((e=>t[e]));(o||!P(e)||n)&&l("u",[t,e,n])},[f,g,b]=_n(a,r,(t=>{p(h(o,t),{},!1)})),w=c.bind(0);return w.Bt=t=>{i("u",t)},w.Ft=d,w.Yt=a,[(t,e)=>{const o=Ht(n,t,e);b(o),p(h(o,g(),e),t,!!e)},w,()=>{s(),f(),u()}]})(e,f),[_,T,L]=((t,e,n)=>{let o,r,i,s,l,c=0;const a=kt({}),[d]=a,[u,h]=Mn(),[p,f]=Mn(),[g,b]=Mn(100),[w,v]=Mn(100),[y,m]=Mn((()=>c)),[x,_,O]=En(t,n.Yt),{J:S,K:P}=n.Yt,{Ut:T,Zt:L}=x,{Jt:E,Kt:C}=T,{Jt:M,Kt:R}=L,z=(t,e)=>{if(m(),t)E(be),M(be);else{const t=()=>{E(be,!0),M(be,!0)};c>0&&!e?y(t):t()}},A=()=>{s=r,s&&z(!0)},B=[b,m,v,f,h,O,Mt(S,"mouseover",A,{O:!0}),Mt(S,"mouseenter",A),Mt(S,"mouseleave",(()=>{s=!1,r&&z(!1)})),Mt(S,"mousemove",(()=>{o&&u((()=>{b(),z(!0),w((()=>{o&&z(!1)}))}))})),Mt(P,"scroll",(()=>{i&&p((()=>{z(!0),g((()=>{i&&!s&&z(!1)}))}))}))],j=d.bind(0);return j.Yt=x,j.Ft=_,[(t,s,a)=>{const{Tt:d,Et:u,It:h}=a,p=Ht(e,t,s),f=n(),[g,b]=p("scrollbars.theme"),[w,v]=p("scrollbars.visibility"),[y,m]=p("scrollbars.autoHide"),[x]=p("scrollbars.autoHideDelay");p("scrollbars.dragScrolling"),p("scrollbars.touchSupport");const $=d||u,_=(t,e)=>{const n="visible"===w||"auto"===w&&"scroll"===t;return e(he,n),n};if(c=x,h||v){const{Ct:t}=f,e=_(t.x,E),n=_(t.y,M),o=e&&n;E(pe,!o),M(pe,!o)}b&&(E(l),M(l),E(g,!0),M(g,!0),l=g),m&&(o="move"===y,r="leave"===y,i="never"!==y,z(!i,!0)),$&&(Rn(C,f,!0),Rn(R,f))},j,$.bind(0,B)]})(e,f,m),E=(t,e)=>{y(t,!!e)},C=l(E.bind(0,{},!0)),z=t=>{(t=>{An.delete(t),zn.delete(t)})(a),C(),L(),x(),r=!0,v("destroyed",[A,!!t]),w()},A={options(t){if(t){const e=ye(f,p(t));P(e)||(S(f,e),E(e))}return S({},f)},on:g,off:(t,e)=>{t&&e&&w(t,e)},state(){const{Ot:t,zt:e,Ct:n,At:o,Z:i,yt:s}=m();return S({},{overflowEdge:t,overflowAmount:e,overflowStyle:n,hasOverflow:o,padding:i,paddingAbsolute:s,destroyed:r})},elements(){const{X:t,J:e,Z:n,K:o,tt:r}=m.Yt;return S({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update:t=>(E({},t),A),destroy:z.bind(0)};return m.Bt(((t,e,n)=>{_(e,n,t)})),t(O(c),(t=>{const e=c[t];u(e)&&e(Bn,A)})),s.x&&s.y&&!f.nativeScrollbarsOverlaid.initialize?(z(!0),A):(m.Ft(),T.Ft(),((t,e)=>{An.set(t,e),zn.add(t)})(a,A),v("initialized",[A]),m.Bt(((t,e,n)=>{const{ht:o,bt:r,gt:i,Tt:s,Et:l,It:c,vt:a,$t:d}=t;v("updated",[A,{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowEdgeChanged:s,overflowAmountChanged:l,overflowStyleChanged:c,contentMutation:a,hostMutation:d},changedOptions:e,force:n}])})),A.update(!0))};Bn.plugin=e=>{t(h(e)?e:[e],(e=>{t(O(e),(t=>{me[t]=e[t]}))}))},Bn.env=()=>{const{V:t,P:e,T:n,k:o,B:r,L:i,U:s,W:l,Y:c,q:a,G:d,N:u}=Xe();return S({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,defaultInitializationStrategy:s,defaultDefaultOptions:l,getInitializationStrategy:c,setInitializationStrategy:a,getDefaultOptions:d,setDefaultOptions:u})};export{Bn as OverlayScrollbars,Me as optionsValidationPlugin,De as scrollbarsHidingPlugin,Be as sizeObserverPlugin}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 9029f77..9f765fa 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -196,7 +196,7 @@ if (v(n)) { return e ? e[r] : a; } - e && (e[r] = n); + e && !o(n) && false !== n && (e[r] = n); }; var T = function attr(r, a, e) { if (v(e)) { @@ -205,17 +205,19 @@ r && r.setAttribute(a, e); }; var L = function attrClass(r, a, e, n) { - var t = T(r, a) || ""; - var i = new Set(t.split(" ")); - i[n ? "add" : "delete"](e); - T(r, a, S(i).join(" ").trim()); + if (e) { + var t = T(r, a) || ""; + var i = new Set(t.split(" ")); + i[n ? "add" : "delete"](e); + T(r, a, S(i).join(" ").trim()); + } }; - var I = function hasAttrClass(r, a, e) { + var M = function hasAttrClass(r, a, e) { var n = T(r, a) || ""; var t = new Set(n.split(" ")); return t.has(e); }; - var M = function removeAttr(r, a) { + var I = function removeAttr(r, a) { r && r.removeAttribute(a); }; var R = function scrollLeft(r, a) { @@ -531,13 +533,13 @@ w: 0, h: 0 }; - var Ir = function windowSize() { + var Mr = function windowSize() { return { w: window.innerWidth, h: window.innerHeight }; }; - var Mr = function offsetSize(r) { + var Ir = function offsetSize(r) { return r ? { w: r.offsetWidth, h: r.offsetHeight @@ -741,6 +743,7 @@ initialize: false }, scrollbars: { + theme: "os-theme-dark", visibility: "auto", autoHide: "never", autoHideDelay: 800, @@ -774,10 +777,10 @@ return e; }; var La = {}; - var Ia = function getPlugins() { + var Ma = function getPlugins() { return z({}, La); }; - var Ma = function addPlugin(r) { + var Ia = function addPlugin(r) { each(d(r) ? r : [ r ], (function(r) { each(E(r), (function(a) { La[a] = r[a]; @@ -893,6 +896,7 @@ y: Ua }, scrollbars: { + theme: [ Ha.string, Ha.null ], visibility: Ya, autoHide: Na, autoHideDelay: Ba, @@ -925,7 +929,7 @@ var i = t.lastChild; var v = t.firstChild; var o = null == v ? void 0 : v.firstChild; - var u = Mr(t); + var u = Ir(t); var f = u; var l = false; var c; @@ -943,7 +947,7 @@ } }; var g = function onScroll(r) { - f = Mr(t); + f = Ir(t); l = !r || !br(f, u); if (r) { Ur(r); @@ -981,7 +985,7 @@ var ve = "__osScrollbarsHidingPlugin"; var oe = (re = {}, re[ve] = { T: function _createUniqueViewportArrangeElement(r) { - var a = r.L, e = r.I, n = r.M; + var a = r.L, e = r.M, n = r.I; var t = !n && !a && (e.x || e.y); var i = t ? document.createElement("style") : false; if (i) { @@ -1069,7 +1073,7 @@ }; var a = 0; return function(e, n, t) { - var i = Ir(); + var i = Mr(); var v = { w: i.w - r.w, h: i.h - r.h @@ -1106,7 +1110,7 @@ var fe = function getNativeScrollbarSize(r, a, e, n) { N(r, a); var t = Rr(a); - var i = Mr(a); + var i = Ir(a); var v = Hr(e); n && Z(a); return { @@ -1170,37 +1174,37 @@ y: 0 === d.y }; var p = { - B: !g, - F: false + padding: !g, + content: false }; var w = z({}, Pa); var b = { k: d, - I: h, + M: h, L: g, - M: "-1" === style(t, "zIndex"), - q: ce(t, i), - U: se(t, i), - Y: function _addListener(r) { + I: "-1" === style(t, "zIndex"), + B: ce(t, i), + F: se(t, i), + q: function _addListener(r) { return o("_", r); }, - N: z.bind(0, {}, p), - W: function _setInitializationStrategy(r) { + U: z.bind(0, {}, p), + Y: function _setInitializationStrategy(r) { z(p, r); }, - G: z.bind(0, {}, w), - X: function _setDefaultOptions(r) { + N: z.bind(0, {}, w), + W: function _setDefaultOptions(r) { z(w, r); }, - Z: z({}, p), - $: z({}, w) + G: z({}, p), + X: z({}, w) }; - M(t, "style"); + I(t, "style"); Z(t); if (!g && (!h.x || !h.y)) { var m; window.addEventListener("resize", (function() { - var r = Ia()[ve]; + var r = Ma()[ve]; m = m || r && r.j(); m && m(b, l, u.bind(0, "_")); })); @@ -1233,14 +1237,14 @@ }; var me = function addDataAttrHost(r, a) { T(r, ra, a); - return M.bind(0, r, ra); + return I.bind(0, r, ra); }; var ye = function createStructureSetupElements(r) { var a = ge(); - var e = a.N, n = a.L; - var t = Ia()[ve]; + var e = a.U, n = a.L; + var t = Ma()[ve]; var i = t && t.T; - var v = e(), o = v.J, u = v.K, f = v.B, l = v.F; + var v = e(), o = v.host, u = v.viewport, f = v.padding, l = v.content; var c = w(r); var s = r; var d = c ? r : s.target; @@ -1257,11 +1261,11 @@ }))[0]; var P = A === d; var T = { - rr: d, - J: g ? x(we, o, s.host) : d, - K: A, - B: !P && z(we, f, s.padding), - F: !P && z(we, l, s.content), + Z: d, + $: g ? x(we, o, s.host) : d, + J: A, + K: !P && z(we, f, s.padding), + rr: !P && z(we, l, s.content), ar: !P && !n && i && i(a), er: S, nr: p, @@ -1272,7 +1276,7 @@ lr: c, cr: P, sr: function _viewportHasClass(r, a) { - return P ? I(A, ra, a) : hr(A, r); + return P ? M(A, ra, a) : hr(A, r); }, dr: function _viewportAddRemoveClass(r, a, e) { return P ? L(A, ra, a, e) : (e ? pr : _r)(A, r); @@ -1285,7 +1289,7 @@ var D = function elementIsGenerated(r) { return r ? m(R, r) > -1 : null; }; - var H = T.rr, V = T.J, j = T.B, q = T.K, U = T.F, Y = T.ar; + var H = T.Z, V = T.$, j = T.K, q = T.J, U = T.rr, Y = T.ar; var W = []; var $ = g && D(V); var J = g ? H : B([ U, q, j, V, H ].find((function(r) { @@ -1310,8 +1314,8 @@ N(q, U); y(W, (function() { r(); - M(q, aa); - M(q, ea); + I(q, aa); + I(q, ea); if (D(U)) { be(U); } @@ -1336,10 +1340,10 @@ return [ T, Q, O.bind(0, W) ]; }; var Se = function createTrinsicUpdateSegment(r, a) { - var e = r.F; + var e = r.rr; var n = a[0]; return function(r) { - var a = ge(), t = a.U; + var a = ge(), t = a.F; var i = n(), v = i.gr; var o = r.hr; var u = (e || !t) && o; @@ -1356,14 +1360,14 @@ }; var Ce = function createPaddingUpdateSegment(r, e) { var n = e[0], t = e[1]; - var i = r.J, v = r.B, o = r.K, u = r.cr; + var i = r.$, v = r.K, o = r.J, u = r.cr; var f = a({ u: yr, o: Tr() }, Tr.bind(0, i, "padding", "")), l = f[0], c = f[1]; return function(r, a, e) { var i = c(e), f = i[0], s = i[1]; - var d = ge(), g = d.L, h = d.U; + var d = ge(), g = d.L, h = d.F; var p = n(), w = p.wr; var b = r._r, m = r.pr, y = r.br; var S = a("paddingAbsolute"), C = S[0], O = S[1]; @@ -1378,7 +1382,7 @@ var P = !C || !v && !g; var T = f.r + f.l; var L = f.t + f.b; - var I = { + var M = { marginRight: P && !w ? -T : 0, marginBottom: P ? -L : 0, marginLeft: P && w ? -T : 0, @@ -1387,18 +1391,18 @@ left: P ? w ? "auto" : -f.l : 0, width: P ? "calc(100% + " + T + "px)" : "" }; - var M = { + var I = { paddingTop: P ? f.t : 0, paddingRight: P ? f.r : 0, paddingBottom: P ? f.b : 0, paddingLeft: P ? f.l : 0 }; - style(v || o, I); - style(o, M); + style(v || o, M); + style(o, I); t({ - B: f, + K: f, mr: !P, - D: v ? M : z({}, I, M) + D: v ? I : z({}, M, I) }); } return { @@ -1436,29 +1440,29 @@ h: n.h > e ? n.h : 0 }; }; - var Ie = function conditionalClass(r, a, e) { + var Me = function conditionalClass(r, a, e) { return e ? pr(r, a) : _r(r, a); }; - var Me = function overflowIsVisible(r) { + var Ie = function overflowIsVisible(r) { return 0 === r.indexOf(Ee); }; var Re = function createOverflowUpdateSegment(r, e) { var n = e[0], t = e[1]; - var i = r.J, v = r.B, o = r.K, u = r.ar, f = r.cr, l = r.dr; - var c = ge(), s = c.k, d = c.U, g = c.L, h = c.I; - var p = Ia()[ve]; + var i = r.$, v = r.K, o = r.J, u = r.ar, f = r.cr, l = r.dr; + var c = ge(), s = c.k, d = c.F, g = c.L, h = c.M; + var p = Ma()[ve]; var w = !f && !g && (h.x || h.y); var b = a(Pe, Hr.bind(0, o)), m = b[0], y = b[1]; var S = a(Pe, Dr.bind(0, o)), C = S[0], O = S[1]; var x = a(Pe), E = x[0], z = x[1]; - var A = a(Pe), P = A[0], I = A[1]; - var M = a(Te), R = M[0]; + var A = a(Pe), P = A[0], M = A[1]; + var I = a(Te), R = I[0]; var D = function fixFlexboxGlue(r, a) { style(o, { height: "" }); if (a) { - var e = n(), t = e.mr, v = e.B; + var e = n(), t = e.mr, v = e.K; var u = r.Sr, f = r.H; var l = Hr(i); var c = Rr(i); @@ -1504,9 +1508,9 @@ }; var V = function setViewportOverflowState(r, a, e, n) { var t = function setAxisOverflowStyle(r, a) { - var e = Me(r); + var e = Ie(r); var n = a && e && r.replace(Ee + "-", "") || ""; - return [ a && !e ? r : "", Me(n) ? "hidden" : n ]; + return [ a && !e ? r : "", Ie(n) ? "hidden" : n ]; }; var i = t(e.x, a.x), v = i[0], o = i[1]; var u = t(e.y, a.y), f = u[0], l = u[1]; @@ -1541,17 +1545,17 @@ return function(r, a, e) { var u = r._r, c = r.Or, s = r.pr, p = r.yr, w = r.hr, b = r.br; var S = n(), x = S.gr, A = S.wr; - var M = a("nativeScrollbarsOverlaid.show"), k = M[0], q = M[1]; + var I = a("nativeScrollbarsOverlaid.show"), k = I[0], q = I[1]; var U = a("overflow"), Y = U[0], N = U[1]; var W = k && h.x && h.y; var G = !f && !d && (u || s || c || q || w); - var X = Me(Y.x); - var Z = Me(Y.y); + var X = Ie(Y.x); + var Z = Ie(Y.y); var $ = X || Z; var J = y(e); var K = O(e); var Q = z(e); - var rr = I(e); + var rr = M(e); var ar; if (q && g) { l(fa, ta, !W); @@ -1605,9 +1609,9 @@ overflowX: "" }; var Lr = V(W, Ar, Y, Tr); - var Ir = B(Lr, Cr, Er, A); + var Mr = B(Lr, Cr, Er, A); if (!f) { - j(Lr, A, Ir, Tr); + j(Lr, A, Mr, Tr); } if (G) { D(Lr, x); @@ -1620,9 +1624,9 @@ } } L(i, ra, na, Pr); - Ie(v, la, Pr); - !f && Ie(o, la, $); - var Mr = R(H(W).Cr), Hr = Mr[0], Vr = Mr[1]; + Me(v, la, Pr); + !f && Me(o, la, $); + var Ir = R(H(W).Cr), Hr = Ir[0], Vr = Ir[1]; t({ Cr: Hr, Er: { @@ -1654,8 +1658,8 @@ return n; }; var He = function createStructureSetupUpdate(r, a) { - var e = r.K; - var n = ge(), t = n.L, i = n.I, v = n.U; + var e = r.J; + var n = ge(), t = n.L, i = n.M, v = n.F; var o = !t && (i.x || i.y); var u = [ Se(r, a), Ce(r, a), Re(r, a) ]; return function(r, a, n) { @@ -1671,19 +1675,15 @@ pr: false }, a), {}, n); var i = o || !v; - var l = i && R(e); - var c = i && D(e); - var s = t; + var f = i && R(e); + var l = i && D(e); + var c = t; each(u, (function(a) { - s = De(s, a(s, r, !!n) || {}, n); + c = De(c, a(c, r, !!n) || {}, n); })); - if (f(l)) { - R(e, l); - } - if (f(c)) { - D(e, c); - } - return s; + R(e, f); + D(e, l); + return c; }; }; var Ve = 3333333; @@ -1694,9 +1694,9 @@ return r && (r.height || r.width); }; var Be = function createSizeObserver(r, e, n) { - var t = n || {}, i = t.Ir, v = void 0 === i ? false : i, o = t.Mr, u = void 0 === o ? false : o; - var f = Ia()[Ka]; - var l = ge(), s = l.q; + var t = n || {}, i = t.Mr, v = void 0 === i ? false : i, o = t.Ir, u = void 0 === o ? false : o; + var f = Ma()[Ka]; + var l = ge(), s = l.B; var h = J('
'); var p = h[0]; var w = p.firstChild; @@ -1735,7 +1735,7 @@ e({ _r: !n, Rr: n ? r : void 0, - Mr: !!i + Ir: !!i }); } }; @@ -1757,9 +1757,9 @@ z = a({ o: !b() }, b); - var I = z, M = I[0]; + var M = z, I = M[0]; y(x, qr(p, "scroll", (function(r) { - var a = M(); + var a = I(); var e = a[0], n = a[1]; if (n) { _r(w, "ltr rtl"); @@ -1822,7 +1822,7 @@ })); } else { var l = function onSizeChanged() { - var r = Mr(t); + var r = Ir(t); u(r); }; y(i, Be(t, l)); @@ -1922,10 +1922,10 @@ var A = !S; var P = S && z; var L = P && f && k(i, f); - var I = L ? !v(i, t, s, x) : A || P; - var M = I && !o(e, !!L, r, n); + var M = L ? !v(i, t, s, x) : A || P; + var I = M && !o(e, !!L, r, n); y(d, p); - h = h || M; + h = h || I; w = w || C; } if (!a && O && E && !v(i, t, s, x)) { @@ -1986,8 +1986,8 @@ var i; var v; var o = e[1]; - var u = r.J, c = r.K, g = r.F, h = r.vr, p = r.cr, w = r.sr, b = r.dr; - var S = ge(), C = S.L, O = S.U; + var u = r.$, c = r.J, g = r.rr, h = r.vr, p = r.cr, w = r.sr, b = r.dr; + var S = ge(), C = S.L, O = S.F; var x = a({ u: br, o: { @@ -1996,14 +1996,21 @@ } }, (function() { var r = w(la, na); - r && b(la, na); - var a = Dr(g); - var e = Dr(c); - var n = Hr(c); - r && b(la, na, true); + var a = w(oa, ""); + var e = a && R(c); + var n = a && D(c); + b(la, na); + b(oa, ""); + var t = Dr(g); + var i = Dr(c); + var v = Hr(c); + b(la, na, r); + b(oa, "", a); + R(c, e); + D(c, n); return { - w: e.w + a.w + n.w, - h: e.h + a.h + n.h + w: i.w + t.w + v.w, + h: i.h + t.h + v.h }; })), A = x[0]; var P = h ? Xe : Ze.concat(Xe); @@ -2023,19 +2030,19 @@ }), {}) ]; } }); - var I = function updateViewportAttrsFromHost(r) { + var M = function updateViewportAttrsFromHost(r) { each(r || Ge, (function(r) { if (m(Ge, r) > -1) { var a = T(u, r); if (l(a)) { T(c, r, a); } else { - M(c, r); + I(c, r); } } })); }; - var R = function onTrinsicChanged(r, a) { + var H = function onTrinsicChanged(r, a) { var e = r[0], t = r[1]; var i = { hr: t @@ -2046,8 +2053,8 @@ !a && n(i); return i; }; - var D = function onSizeChanged(r) { - var a = r._r, e = r.Rr, t = r.Mr; + var V = function onSizeChanged(r) { + var a = r._r, e = r.Rr, t = r.Ir; var i = !a || t ? n : L; var v = false; if (e) { @@ -2062,7 +2069,7 @@ br: v }); }; - var H = function onContentMutation(r, a) { + var j = function onContentMutation(r, a) { var e = A(), t = e[1]; var i = { pr: t @@ -2073,50 +2080,50 @@ } return i; }; - var V = function onHostMutation(r, a, e) { + var k = function onHostMutation(r, a, e) { var n = { Or: a }; if (a) { !e && L(n); } else if (!p) { - I(r); + M(r); } return n; }; - var j = (g || !O) && qe(u, R); - var k = !p && Be(u, D, { - Mr: true, - Ir: !C + var B = (g || !O) && qe(u, H); + var F = !p && Be(u, V, { + Ir: true, + Mr: !C }); - var B = Ye(u, false, V, { + var Y = Ye(u, false, k, { Hr: Ze, Dr: Ze.concat(Ge) - }), F = B[0], Y = B[1]; - var N = p && new ur(D.bind(0, { + }), N = Y[0], W = Y[1]; + var G = p && new ur(V.bind(0, { _r: true })); - N && N.observe(u); - I(); + G && G.observe(u); + M(); return [ function() { v && v[0](); - j && j[0](); - k && k(); - N && N.disconnect(); - F(); + B && B[0](); + F && F(); + G && G.disconnect(); + N(); }, function() { var r = {}; - var a = Y(); + var a = W(); var e = v && v[1](); - var n = j && j[1](); + var n = B && B[1](); if (a) { - z(r, V.apply(0, y(a, true))); + z(r, k.apply(0, y(a, true))); } if (e) { - z(r, H.apply(0, y(e, true))); + z(r, j.apply(0, y(e, true))); } if (n) { - z(r, R.apply(0, y(n, true))); + z(r, H.apply(0, y(n, true))); } return r; }, function(r) { @@ -2133,7 +2140,7 @@ v[1](); v[0](); } - v = Ye(g || c, true, H, { + v = Ye(g || c, true, j, { Hr: P.concat(o || []), Dr: P.concat(o || []), Vr: h, @@ -2167,7 +2174,7 @@ y: 0 }; var Ke = { - B: { + K: { t: 0, r: 0, b: 0, @@ -2241,74 +2248,83 @@ }); }; var nn = function createScrollbarsSetupElements(r, a) { - var e = ge(), n = e.N; - var t = n(), i = t.Yr; - var v = a.nr, o = a.rr, u = a.J, f = a.K, l = a.lr; - var c = !l && r.scrollbarsSlot; + var e = ge(), n = e.U; + var t = n(), i = t.scrollbarsSlot; + var v = a.nr, o = a.Z, u = a.$, f = a.J, l = a.lr; + var c = l ? null : r.scrollbarsSlot; var s = pe([ o, u, f ], (function() { return u; }), i, c); - var d = function scrollbarsAddRemoveClass(r, a, e) { - var n = e ? pr : _r; + var d = function scrollbarsAddRemoveClass(r, a, e, n) { + var t = e ? pr : _r; each(r, (function(r) { - n(r.Nr, a); + t((n || Cr)(r) || r.Yr, a); + })); + }; + var g = function scrollbarsHandleStyle(r, a) { + each(r, (function(r) { + var e = a(r), n = e[0], t = e[1]; + style(n, t); })); }; - var g = []; var h = []; var p = []; - var w = d.bind(0, h); + var w = []; var b = d.bind(0, p); - var m = function generateScrollbarDOM(r) { + var m = d.bind(0, w); + var S = function generateScrollbarDOM(r) { var a = r ? ba : ma; - var e = r ? h : p; + var e = r ? p : w; var n = C(e) ? xa : ""; - var t = $(wa + " " + a + " " + n + " os-theme-dark"); + var t = $(wa + " " + a + " " + n); var i = $(ya); var o = $(Sa); var u = { - Nr: t, - Wr: i, - Gr: o + Yr: t, + Nr: i, + Wr: o }; N(t, i); N(i, o); y(e, u); - y(g, [ Z.bind(0, t), qr(t, rn, (function() { - w(Ea, true); + y(h, [ Z.bind(0, t), qr(t, rn, (function() { b(Ea, true); + m(Ea, true); })), qr(t, an, (function() { - w(Ea); b(Ea); + m(Ea); })), en(t, v) ]); return u; }; - var S = m.bind(0, true); - var x = m.bind(0, false); - var E = function appendElements() { - N(s, h[0].Nr); - N(s, p[0].Nr); + var x = S.bind(0, true); + var E = S.bind(0, false); + var z = function appendElements() { + N(s, p[0].Yr); + N(s, w[0].Yr); cr((function() { - w(xa); b(xa); + m(xa); }), 300); }; - S(); x(); + E(); return [ { - Xr: { - Zr: h, - $r: S, - Jr: w + Gr: { + Xr: p, + Zr: x, + $r: b, + Jr: g.bind(0, p) }, Kr: { - Zr: p, - $r: x, - Jr: b + Xr: w, + Zr: E, + $r: m, + Jr: g.bind(0, w) } - }, E, O.bind(0, g) ]; + }, z, O.bind(0, h) ]; }; - var tn = function createSelfCancelTimeout(r) { + var tn = Math.min; + var vn = function createSelfCancelTimeout(r) { var a; var e = r ? cr : lr; var n = r ? sr : fr; @@ -2319,121 +2335,148 @@ return n(a); } ]; }; - var vn = function createScrollbarsSetup(r, a, e) { - var n = 0; + var un = function refreshScrollbarHandleLength(r, a, e) { + var n = a.zr, t = a.Er; + var i = e ? "x" : "y"; + var v = t[i]; + var o = n[i]; + var u = tn(1, v / (v + o)); + r((function(r) { + var a; + return [ r.Wr, (a = {}, a[e ? "width" : "height"] = (100 * u).toFixed(3) + "%", + a) ]; + })); + }; + var fn = function createScrollbarsSetup(r, a, e) { + var n; var t; var i; var v; var o; - var u = $r({}); - var f = u[0]; - var l = tn(), c = l[0], s = l[1]; - var d = tn(), g = d[0], h = d[1]; - var p = tn(100), w = p[0], b = p[1]; - var m = tn(100), y = m[0], S = m[1]; - var C = tn((function() { - return n; - })), x = C[0], E = C[1]; - var z = nn(r, e.Ur), A = z[0], P = z[1], T = z[2]; - var L = e.Ur, I = L.J, M = L.K; - var R = A.Xr, D = A.Kr; - var H = R.Jr; - var V = D.Jr; - var j = function manageScrollbarsAutoHide(r, a) { - E(); + var u = 0; + var f = $r({}); + var l = f[0]; + var c = vn(), s = c[0], d = c[1]; + var g = vn(), h = g[0], p = g[1]; + var w = vn(100), b = w[0], m = w[1]; + var y = vn(100), S = y[0], C = y[1]; + var x = vn((function() { + return u; + })), E = x[0], z = x[1]; + var A = nn(r, e.Ur), P = A[0], T = A[1], L = A[2]; + var M = e.Ur, I = M.$, R = M.J; + var D = P.Gr, H = P.Kr; + var V = D.$r, j = D.Jr; + var k = H.$r, B = H.Jr; + var F = function manageScrollbarsAutoHide(r, a) { + z(); if (r) { - H(za); V(za); + k(za); } else { var e = function hide() { - H(za, true); V(za, true); + k(za, true); }; - if (n > 0 && !a) { - x(e); + if (u > 0 && !a) { + E(e); } else { e(); } } }; - var k = function onHostMouseEnter() { - o = i; - o && j(true); + var q = function onHostMouseEnter() { + v = t; + v && F(true); }; - var B = [ b, E, S, h, s, T, qr(I, "mouseover", k, { + var U = [ m, z, C, p, d, L, qr(I, "mouseover", q, { A: true - }), qr(I, "mouseenter", k), qr(I, "mouseleave", (function() { - o = false; - i && j(false); + }), qr(I, "mouseenter", q), qr(I, "mouseleave", (function() { + v = false; + t && F(false); })), qr(I, "mousemove", (function() { - t && c((function() { - b(); - j(true); - y((function() { - t && j(false); + n && s((function() { + m(); + F(true); + S((function() { + n && F(false); })); })); - })), qr(M, "scroll", (function() { - v && g((function() { - j(true); - w((function() { - v && !o && j(false); + })), qr(R, "scroll", (function() { + i && h((function() { + F(true); + b((function() { + i && !v && F(false); })); })); })) ]; - var F = f.bind(0); - F.Ur = A; - F.qr = P; - return [ function(r, o, u) { - var f = u.Pr; - var l = Zr(a, r, o); - var c = l("scrollbars.visibility"), s = c[0], d = c[1]; - var g = l("scrollbars.autoHide"), h = g[0], p = g[1]; - var w = l("scrollbars.autoHideDelay"), b = w[0]; - l("scrollbars.dragScrolling"); - l("scrollbars.touchSupport"); - var m = f || d; - var y = function setScrollbarVisibility(r, a) { - var e = "visible" === s || "auto" === s && "scroll" === r; + var Y = l.bind(0); + Y.Ur = P; + Y.qr = T; + return [ function(r, v, f) { + var l = f.Tr, c = f.Lr, s = f.Pr; + var d = Zr(a, r, v); + var g = e(); + var h = d("scrollbars.theme"), p = h[0], w = h[1]; + var b = d("scrollbars.visibility"), m = b[0], y = b[1]; + var S = d("scrollbars.autoHide"), C = S[0], O = S[1]; + var x = d("scrollbars.autoHideDelay"), E = x[0]; + d("scrollbars.dragScrolling"); + d("scrollbars.touchSupport"); + var z = l || c; + var A = s || y; + var P = function setScrollbarVisibility(r, a) { + var e = "visible" === m || "auto" === m && "scroll" === r; a(Ca, e); return e; }; - n = b; - if (m) { - var S = e(), C = S.Cr; - var O = y(C.x, H); - var x = y(C.y, V); - var E = O && x; - H(Oa, !E); - V(Oa, !E); + u = E; + if (A) { + var T = g.Cr; + var L = P(T.x, V); + var M = P(T.y, k); + var I = L && M; + V(Oa, !I); + k(Oa, !I); } - if (p) { - t = "move" === h; - i = "leave" === h; - v = "never" !== h; - j(!v, true); + if (w) { + V(o); + k(o); + V(p, true); + k(p, true); + o = p; } - }, F, O.bind(0, B) ]; + if (O) { + n = "move" === C; + t = "leave" === C; + i = "never" !== C; + F(!i, true); + } + if (z) { + un(j, g, true); + un(B, g); + } + }, Y, O.bind(0, U) ]; }; - var un = new Set; - var fn = new WeakMap; - var ln = function addInstance(r, a) { - fn.set(r, a); - un.add(r); + var ln = new Set; + var cn = new WeakMap; + var sn = function addInstance(r, a) { + cn.set(r, a); + ln.add(r); }; - var cn = function removeInstance(r) { - fn.delete(r); - un.delete(r); + var dn = function removeInstance(r) { + cn.delete(r); + ln.delete(r); }; - var sn = function getInstance(r) { - return fn.get(r); + var gn = function getInstance(r) { + return cn.get(r); }; - var dn = function OverlayScrollbars(r, a, e) { + var hn = function OverlayScrollbars(r, a, e) { var n = false; - var t = ge(), i = t.G, v = t.I, o = t.Y; - var u = Ia(); + var t = ge(), i = t.N, v = t.M, o = t.q; + var u = Ma(); var f = w(r) ? r : r.target; - var l = sn(f); + var l = gn(f); if (l) { return l; } @@ -2446,14 +2489,14 @@ var g = z({}, i(), d(a)); var h = Gr(e), p = h[0], b = h[1], m = h[2]; var y = Qe(r, g), S = y[0], C = y[1], O = y[2]; - var x = vn(r, g, C), P = x[0], T = x[1], L = x[2]; - var I = function update(r, a) { + var x = fn(r, g, C), P = x[0], T = x[1], L = x[2]; + var M = function update(r, a) { S(r, !!a); }; - var M = o(I.bind(0, {}, true)); + var I = o(M.bind(0, {}, true)); var R = function destroy(r) { - cn(f); - M(); + dn(f); + I(); L(); O(); n = true; @@ -2466,7 +2509,7 @@ var a = Ta(g, d(r)); if (!A(a)) { z(g, a); - I(a); + M(a); } } return z({}, g); @@ -2476,7 +2519,7 @@ r && a && b(r, a); }, state: function state() { - var r = C(), a = r.Er, e = r.zr, t = r.Cr, i = r.Ar, v = r.B, o = r.mr; + var r = C(), a = r.Er, e = r.zr, t = r.Cr, i = r.Ar, v = r.K, o = r.mr; return z({}, { overflowEdge: a, overflowAmount: e, @@ -2488,7 +2531,7 @@ }); }, elements: function elements() { - var r = C.Ur, a = r.rr, e = r.J, n = r.B, t = r.K, i = r.F; + var r = C.Ur, a = r.Z, e = r.$, n = r.K, t = r.J, i = r.rr; return z({}, { target: a, host: e, @@ -2498,7 +2541,7 @@ }); }, update: function update(r) { - I({}, r); + M({}, r); return D; }, destroy: R.bind(0) @@ -2518,7 +2561,7 @@ } C.qr(); T.qr(); - ln(f, D); + sn(f, D); m("initialized", [ D ]); C.Fr((function(r, a, e) { var n = r._r, t = r.br, i = r.hr, v = r.Tr, o = r.Lr, u = r.Pr, f = r.pr, l = r.Or; @@ -2539,9 +2582,9 @@ })); return D.update(true); }; - dn.plugin = Ma; - dn.env = function() { - var r = ge(), a = r.k, e = r.I, n = r.L, t = r.q, i = r.U, v = r.M, o = r.Z, u = r.$, f = r.N, l = r.W, c = r.G, s = r.X; + hn.plugin = Ia; + hn.env = function() { + var r = ge(), a = r.k, e = r.M, n = r.L, t = r.B, i = r.F, v = r.I, o = r.G, u = r.X, f = r.U, l = r.Y, c = r.N, s = r.W; return z({}, { scrollbarsSize: a, scrollbarsOverlaid: e, @@ -2557,7 +2600,7 @@ setDefaultOptions: s }); }; - r.OverlayScrollbars = dn; + r.OverlayScrollbars = hn; r.optionsValidationPlugin = Xa; r.scrollbarsHidingPlugin = oe; r.sizeObserverPlugin = Qa; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 8a04a49..1e78937 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/array.ts","../src/support/dom/style.ts","../src/support/cache.ts","../src/support/utils/types.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/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/plugins/plugins.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/plugins/optionsValidationPlugin/validation.ts","../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.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/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["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 | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | false | 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 | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | false | 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 | false | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | false | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | false | 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 const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\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 args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\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 // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\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\n\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","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\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: 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 const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\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 const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\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 const 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 const 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 const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = 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 const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = 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 { 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\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\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};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: 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 const 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\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): T;\r\n (elm: HTMLElement | false | null | undefined, value: T): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T): number | void;\r\n};\r\n\r\nconst 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 const 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}) as Attr;\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 const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\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 const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\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 const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Node | Element | Node | false | null | undefined;\r\ntype OutputElementType = Node | 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\nexport const 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 =\r\n jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\nexport const setT = window.setTimeout as (handler: TimerHandler, timeout?: number) => number;\r\nexport const clearT = window.clearTimeout as (id?: number) => void;\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\ntype ClassContainingElement = Node | Element | false | null | undefined;\r\ntype ClassName = string | false | null | undefined;\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: ClassContainingElement,\r\n className: ClassName,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n const classList = elm && (elm as Element).classList;\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (classList && 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(classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: ClassContainingElement, className: ClassName): boolean =>\r\n 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 = (elm: ClassContainingElement, className: ClassName): 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 = (elm: ClassContainingElement, className: ClassName): (() => 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 = (classNameA: ClassName, classNameB: ClassName) => {\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, setT, clearT } from 'support/compatibility/apis';\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 maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear: () => void = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\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 (clear !== noop) {\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 clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\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 clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\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, runEachAndClear } 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() {\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) ?? doSupportPassiveEvents;\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 = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) 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 runEachAndClear.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 type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: 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 const addEvent: 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 const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n 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 && !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 [AddEvent, RemoveEvent, TriggerEvent];\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 = (\r\n changedOptions: PartialOptions,\r\n force: boolean,\r\n ...args: T\r\n) => void;\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<\r\n DynamicState,\r\n StaticState extends Record = Record,\r\n A extends any[] = []\r\n> = [update: SetupUpdate
, state: (() => DynamicState) & StaticState, destroy: () => void];\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\nexport const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\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 ScrollbarVisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type ScrollbarAutoHideBehavior = '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: ScrollbarVisibilityBehavior;\r\n autoHide: ScrollbarAutoHideBehavior;\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 { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","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 {\r\n Options,\r\n OverflowBehavior,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { PartialOptions } from 'typings';\r\nimport type { Plugin } from 'plugins';\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: Plugin = {\r\n [optionsValidationPluginName]: {\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 {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type SizeObserverPluginInstance = {\r\n _: (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean\r\n ) => [appearCallback: () => any, offFns: (() => any)[]];\r\n};\r\n\r\nconst scrollAmount = 3333333;\r\nconst scrollEventName = 'scroll';\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const sizeObserverPlugin: Plugin = {\r\n [sizeObserverPluginName]: {\r\n _: (listenerElement, onSizeChangedCallback, observeAppearChange) => {\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 onSizeChangedCallback(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 stopPropagation(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 const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), 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 return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import {\r\n keys,\r\n attr,\r\n WH,\r\n style,\r\n addClass,\r\n removeClass,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n UpdateCache,\r\n XY,\r\n} from 'support';\r\nimport { classNameViewportArrange } from 'classnames';\r\nimport type { StyleObject } from 'typings';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type {\r\n ViewportOverflowState,\r\n GetViewportOverflowState,\r\n HideNativeScrollbars,\r\n} from 'setups/structureSetup/updateSegments/overflowUpdateSegment';\r\nimport type { InternalEnvironment } from 'environment';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type ArrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n) => boolean;\r\n\r\nexport type UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nexport type UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n) => UndoViewportArrangeResult;\r\n\r\nexport type ScrollbarsHidingPluginInstance = {\r\n _createUniqueViewportArrangeElement(env: InternalEnvironment): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: boolean,\r\n flexboxGlue: boolean,\r\n viewport: HTMLElement,\r\n viewportArrange: HTMLStyleElement | false | null | undefined,\r\n getState: () => StructureSetupState,\r\n getViewportOverflowState: GetViewportOverflowState,\r\n hideNativeScrollbars: HideNativeScrollbars\r\n ): [ArrangeViewport, UndoArrangeViewport];\r\n _envWindowZoom(): (\r\n envInstance: InternalEnvironment,\r\n updateNativeScrollbarSizeCache: UpdateCache>,\r\n triggerEvent: () => void\r\n ) => void;\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst { round, abs } = Math;\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = env;\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 _overflowUpdateSegment: (\r\n doViewportArrange,\r\n flexboxGlue,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\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: ArrangeViewport = (\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n directionIsRTL\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 ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }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 * 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: UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n viewportOverflowState?\r\n ) => {\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 [arrangeViewport, undoViewportArrange];\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n\r\n return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {\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) {\r\n return;\r\n }\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 && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\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};\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 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\nimport { getPlugins, ScrollbarsHidingPluginInstance, scrollbarsHidingPluginName } from 'plugins';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: 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\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\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 clear && removeElements(measureElm);\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 getNativeScrollbarsHiding = (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 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 {\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n getNativeScrollbarSize.bind(0, body, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\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 (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let resizeFn: undefined | ReturnType;\r\n window.addEventListener('resize', () => {\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n\r\n resizeFn = resizeFn || (scrollbarsHidingPlugin && scrollbarsHidingPlugin._envWindowZoom());\r\n resizeFn && resizeFn(env, updateNativeScrollbarSizeCache, triggerEvent.bind(0, '_'));\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 runEachAndClear,\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 classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\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 | null | undefined;\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\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 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 env = getEnvironment();\r\n const { _getInitializationStrategy, _nativeScrollbarsHiding } = env;\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\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 && _nativeScrollbarsHiding;\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:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\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 (_nativeScrollbarsHiding && !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, runEachAndClear.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 createTrinsicUpdateSegment: 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 createPaddingUpdateSegment: 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 { _nativeScrollbarsHiding: _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 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 equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\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 { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\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\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst max0 = max.bind(0, 0);\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 = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.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 createOverflowUpdateSegment: 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 _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 [updateOverflowEdge, getCurrentOverflowEdgeCache] = 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 = !(_nativeScrollbarsOverlaid.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: GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars,\r\n viewportStyleObj?\r\n ) => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarsHiding && !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 && !_nativeScrollbarsHiding ? 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', _nativeScrollbarsOverlaid.x, _nativeScrollbarsSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarsOverlaid.y, _nativeScrollbarsSize.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 * 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: HideNativeScrollbars = (\r\n viewportOverflowState,\r\n directionIsRTL,\r\n viewportArrange,\r\n viewportStyleObj\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 const [arrangeViewport, undoViewportArrange] = scrollbarsHidingPlugin\r\n ? scrollbarsHidingPlugin._overflowUpdateSegment(\r\n doViewportArrange,\r\n _flexboxGlue,\r\n _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\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 _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.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 let overflowEdgeCache = getCurrentOverflowEdgeCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\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 const overflowAmountScrollSize = {\r\n w: max0(max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n arrangedViewportClientSize.h +\r\n max0(viewportclientSize.h - viewportScrollSize.h) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\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 overflowEdgeChanged ||\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 _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\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 _overflowEdgeChanged: overflowEdgeChanged,\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 createTrinsicUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createOverflowUpdateSegment,\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 _overflowEdgeChanged: 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 {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdateSegment(structureSetupElements, state),\r\n createPaddingUpdateSegment(structureSetupElements, state),\r\n createOverflowUpdateSegment(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 _overflowEdgeChanged: 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 scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\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 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 sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\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 if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\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, 'scroll', (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 stopPropagation(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, 'animationstart', 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 runEachAndClear(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 runEachAndClear,\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 TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n destroy: () => void,\r\n update: () => void | Parameters\r\n];\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: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH,\r\n fromRecords?: true\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n !fromRecords && onTrinsicChangedCallback(heightIntrinsic);\r\n return [heightIntrinsic];\r\n }\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n entries: IntersectionObserverEntry[],\r\n fromRecords?: true\r\n ) => {\r\n if (entries && entries.length > 0) {\r\n return triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n (entries) => intersectionObserverCallback(entries),\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 () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n () => {\r\n if (intersectionObserverInstance) {\r\n return intersectionObserverCallback(intersectionObserverInstance.takeRecords(), true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n 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 = [\r\n destroy: () => void,\r\n update: () => void | false | Parameters>\r\n];\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 debouncedEventContentChange = 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 const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\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 = (\r\n mutations: MutationRecord[],\r\n fromRecords?: true\r\n ): void | Parameters> => {\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 !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] as Parameters>;\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n !fromRecords &&\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n return [targetChangedAttrs, targetStyleChanged] as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!((mutations) =>\r\n observerCallback(mutations)\r\n );\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 debouncedEventContentChange._flush();\r\n\r\n const records = mutationObserver.takeRecords();\r\n return !isEmptyArray(records) && observerCallback(records, true);\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 closest,\r\n assignDeep,\r\n push,\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 classNameScrollbar,\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 destroy: () => void,\r\n updateObservers: () => Partial,\r\n updateObserversOptions: StructureSetupObserversUpdate\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 { _nativeScrollbarsHiding: _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, fromRecords?: true) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: Partial = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && structureSetupUpdate(updateHints);\r\n return updateHints;\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, fromRecords?: true) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n const updateHints: Partial = {\r\n _contentMutation: contentSizeChanged,\r\n };\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 !fromRecords && updateFn(updateHints);\r\n }\r\n return updateHints;\r\n };\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ) => {\r\n const updateHints: Partial = { _hostMutation: targetStyleChanged };\r\n if (targetStyleChanged) {\r\n !fromRecords && structureSetupUpdateWithDebouncedAdaptiveUpdateHints(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n return updateHints;\r\n };\r\n\r\n const trinsicObserver =\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, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n }\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 () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n trinsicObserver && trinsicObserver[0](); // destroy\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[1](); // update\r\n const trinsicUpdateResult = trinsicObserver && trinsicObserver[1](); // update\r\n\r\n if (hostUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onHostMutation.apply(\r\n 0,\r\n push(hostUpdateResult, true) as [\r\n ...updateResult: typeof hostUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (contentUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onContentMutation.apply(\r\n 0,\r\n push(contentUpdateResult, true) as [\r\n ...updateResult: typeof contentUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (trinsicUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onTrinsicChanged.apply(\r\n 0,\r\n push(trinsicUpdateResult as any[], true) as [\r\n ...updateResult: typeof trinsicUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n\r\n return updateHints;\r\n },\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, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\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};\r\n","import { createEventListenerHub, isEmptyObject, keys } 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 _overflowEdge: XY;\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 initialXYNumber = { x: 0, y: 0 };\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 _overflowEdge: initialXYNumber,\r\n _overflowAmount: initialXYNumber,\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 triggerUpdateEvent: (...args: StructureSetupEventMap['u']) => void = (\r\n updateHints,\r\n changedOptions,\r\n force\r\n ) => {\r\n const truthyUpdateHints = keys(updateHints).some((key) => updateHints[key]);\r\n\r\n if (truthyUpdateHints || !isEmptyObject(changedOptions) || force) {\r\n triggerEvent('u', [updateHints, changedOptions, force]);\r\n }\r\n };\r\n const [destroyObservers, updateObservers, updateObserversOptions] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerUpdateEvent(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 updateObserversOptions(checkOption);\r\n triggerUpdateEvent(\r\n updateStructure(checkOption, updateObservers(), force),\r\n changedOptions,\r\n !!force\r\n );\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 {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n each,\r\n isEmptyArray,\r\n on,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n classNamesScrollbarInteraction,\r\n classNamesScrollbarTransitionless,\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 ScrollbarsSetupElement {\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _addRemoveClass: (classNames: string, add?: boolean) => void;\r\n // _removeClass: (classNames: string) => void;\r\n /*\r\n _addEventListener: () => void;\r\n _removeEventListener: () => void;\r\n */\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\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 interactionStartEventNames = 'touchstart mouseenter';\r\nconst interactionEndEventNames = 'touchend touchcancel mouseleave';\r\nconst stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>\r\n on(\r\n scrollbar,\r\n 'mousedown',\r\n on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),\r\n { _capture: true }\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 { _documentElm, _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 const scrollbarsAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string,\r\n add?: boolean\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action(scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const addRemoveClassHorizontal = scrollbarsAddRemoveClass.bind(0, horizontalScrollbars);\r\n const addRemoveClassVertical = scrollbarsAddRemoveClass.bind(0, verticalScrollbars);\r\n const generateScrollbarDOM = (horizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = horizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;\r\n const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';\r\n const scrollbar = createDiv(\r\n `${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass} os-theme-dark`\r\n );\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n push(arrToPush, result);\r\n push(destroyFns, [\r\n removeElements.bind(0, scrollbar),\r\n on(scrollbar, interactionStartEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction, true);\r\n addRemoveClassVertical(classNamesScrollbarInteraction, true);\r\n }),\r\n on(scrollbar, interactionEndEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction);\r\n addRemoveClassVertical(classNamesScrollbarInteraction);\r\n }),\r\n stopRootClickPropagation(scrollbar, _documentElm),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = generateScrollbarDOM.bind(0, true);\r\n const generateVerticalScrollbarStructure = generateScrollbarDOM.bind(0, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n setT(() => {\r\n addRemoveClassHorizontal(classNamesScrollbarTransitionless);\r\n addRemoveClassVertical(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassHorizontal,\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassVertical,\r\n },\r\n },\r\n appendElements,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOSOptions,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { OverflowStyle } from 'typings';\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\nconst createSelfCancelTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup => {\r\n let globalAutoHideDelay = 0;\r\n let autoHideIsMove: boolean;\r\n let autoHideIsLeave: boolean;\r\n let autoHideNotNever: boolean;\r\n let mouseInHost: boolean;\r\n const state = createState({});\r\n const [getState] = state;\r\n const [requestMouseMoveAnimationFrame, cancelMouseMoveAnimationFrame] = createSelfCancelTimeout();\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = createSelfCancelTimeout();\r\n const [scrollTimeout, clearScrollTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideMoveTimeout, clearAutoHideTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideTimeout, clearAutoTimeout] = createSelfCancelTimeout(() => globalAutoHideDelay);\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupState._elements\r\n );\r\n const { _host, _viewport } = structureSetupState._elements;\r\n const { _horizontal, _vertical } = elements;\r\n const { _addRemoveClass: addRemoveClassHorizontal } = _horizontal;\r\n const { _addRemoveClass: addRemoveClassVertical } = _vertical;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden, true);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden, true);\r\n };\r\n if (globalAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const onHostMouseEnter = () => {\r\n mouseInHost = autoHideIsLeave;\r\n mouseInHost && manageScrollbarsAutoHide(true);\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearScrollTimeout,\r\n clearAutoTimeout,\r\n clearAutoHideTimeout,\r\n cancelScrollAnimationFrame,\r\n cancelMouseMoveAnimationFrame,\r\n destroyElements,\r\n\r\n on(_host, 'mouseover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'mouseenter', onHostMouseEnter),\r\n on(_host, 'mouseleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'mousemove', () => {\r\n autoHideIsMove &&\r\n requestMouseMoveAnimationFrame(() => {\r\n clearScrollTimeout();\r\n manageScrollbarsAutoHide(true);\r\n auotHideMoveTimeout(() => {\r\n autoHideIsMove && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n on(_viewport, 'scroll', () => {\r\n autoHideNotNever &&\r\n requestScrollAnimationFrame(() => {\r\n manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\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, structureUpdateHints) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n\r\n const [visibility, visibilityChanged] =\r\n checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] =\r\n checkOption('scrollbars.autoHide');\r\n const [autoHideDelay] = checkOption('scrollbars.autoHideDelay');\r\n const [dragScrolling, dragScrollingChanged] = checkOption(\r\n 'scrollbars.dragScrolling'\r\n );\r\n const [touchSupport, touchSupportChanged] = checkOption('scrollbars.touchSupport');\r\n\r\n const updateHandleSize = _overflowEdgeChanged || _overflowAmountChanged;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged;\r\n\r\n const setScrollbarVisibility = (\r\n overflowStyle: OverflowStyle,\r\n addRemoveClass: (classNames: string, add?: boolean) => void\r\n ) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n addRemoveClass(classNamesScrollbarVisible, isVisible);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (updateVisibility) {\r\n const { _overflowStyle } = structureSetupState();\r\n\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, addRemoveClassHorizontal);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, addRemoveClassVertical);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n addRemoveClassHorizontal(classNamesScrollbarCornerless, !hasCorner);\r\n addRemoveClassVertical(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideNotNever = autoHide !== 'never';\r\n manageScrollbarsAutoHide(!autoHideNotNever, true);\r\n }\r\n },\r\n scrollbarsSetupState,\r\n runEachAndClear.bind(0, destroyFns),\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 Plugin,\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(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: 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 overflowEdge: XY;\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 overflowEdgeChanged: 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 _nativeScrollbarsOverlaid: _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\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(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: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\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 structureState._addOnUpdatedListener((updateHints, changedOptions, force: boolean) => {\r\n updateScrollbars(changedOptions, force, updateHints);\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 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 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 _overflowEdgeChanged,\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 overflowEdgeChanged: _overflowEdgeChanged,\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 _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\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 scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\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":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","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","setT","setTimeout","clearT","clearTimeout","rnothtmlwhite","classListAction","className","action","classList","clazz","classes","match","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","maxTimeoutId","prevArguments","latestArguments","clear","_timeout","_maxDelay","_mergeParams","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","clearTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","timeoutId","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","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","_ref","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","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","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarAutoHidden","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","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","_validateRecursive","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","_validateOptions","_optionsValidationPlu","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","_sizeObserverPlugin","contentArrangeCounter","abs","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","env","_nativeScrollbarStyling","_nativeScrollbarsHiding","_nativeScrollbarIsOverlaid","_nativeScrollbarsOverlaid","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","_getState","_viewportPaddingStyle","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","_getState2","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_envWindowZoom","size","dpr","envInstance","updateNativeScrollbarSizeCache","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","_updateNativeScrollba","scrollbarSize","scrollbarSizeChanged","_nativeScrollbarsSize","_scrollbarsHidingPlug","environmentInstance","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getInitializationStr","hostInitializationStrategy","_host","viewportInitializationStrategy","_viewport","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","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","createTrinsicUpdateSegment","structureSetupElements","updateHints","_getEnvironment","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","max0","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdateSegment","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowEdge","_createCache4","getCurrentOverflowEdgeCache","updateOverflowStyleCache","_createCache5","fixFlexboxGlue","heightIntrinsic","_overflowScroll","hostClientSize","isContentBox","subtractXScrollbar","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","nativeScrollbarSize","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","_getStatePerAxis","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","_getStatePerAxis2","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","_setAxisOverflowStyle","visibleBehaviorX","_setAxisOverflowStyle2","visibleBehaviorY","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","_hostMutation","_getState3","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmountScrollSize","overflowAmountClientSize","_overflowEdgeCache","overflowEdge","overflowEdgeChanged","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowEdge","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowEdgeChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_ref$_direction","_direction","observeDirectionChange","_ref$_appear","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","_sizeObserverPlugin$_","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","debouncedEventContentChange","_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","records","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","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","contentUpdateResult","trinsicUpdateResult","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","_createStructureSetup2","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","interactionStartEventNames","interactionEndEventNames","stopRootClickPropagation","scrollbar","documentElm","createScrollbarsSetupElements","environmentScrollbarSlot","_scrollbarsSlot","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","scrollbarsAddRemoveClass","scrollbarStructures","scrollbarStructure","_scrollbar","horizontalScrollbars","verticalScrollbars","addRemoveClassHorizontal","addRemoveClassVertical","generateScrollbarDOM","horizontal","scrollbarClassName","arrToPush","transitionlessClass","track","handle","_track","_handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_horizontal","_scrollbarStructures","_clone","_addRemoveClass","_vertical","createSelfCancelTimeout","id","setTFn","clearTFn","createScrollbarsSetup","globalAutoHideDelay","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","_createSelfCancelTime","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","_createSelfCancelTime2","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","_createSelfCancelTime3","clearScrollTimeout","auotHideMoveTimeout","_createSelfCancelTime4","clearAutoHideTimeout","_createSelfCancelTime5","auotHideTimeout","clearAutoTimeout","_createScrollbarsSetu","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","visibilityChanged","autoHideChanged","updateVisibility","setScrollbarVisibility","addRemoveClass","isVisible","_structureSetupState","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","_structureState","pluginInstance","sizeChanged","hostMutation","_getEnvironment2","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/array.ts","../src/support/dom/style.ts","../src/support/cache.ts","../src/support/utils/types.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/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/plugins/plugins.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/plugins/optionsValidationPlugin/validation.ts","../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.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/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["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 | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | false | 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 | false | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | false | 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 | false | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | false | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | false | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | false | 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 const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\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 args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\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 // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\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\n\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","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\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: 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 const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\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 const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\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 const 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 const 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 const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = 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 const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = 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 { 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\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\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};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: 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 const 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 { isNull, isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): T;\r\n (elm: HTMLElement | false | null | undefined, value: T | false | null): void;\r\n (elm: HTMLElement | false | null | undefined, value?: T | false | null): T | void;\r\n};\r\n\r\nconst getSetProp = (\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string | false | null\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && !isNull(value) && value !== false && (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 const 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}) as Attr;\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 if (value) {\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/**\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 const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\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 const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number | false | null\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\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 const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Node | Element | Node | false | null | undefined;\r\ntype OutputElementType = Node | 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, closest };\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 =\r\n jsAPI('IntersectionObserver');\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\nexport const setT = window.setTimeout as (handler: TimerHandler, timeout?: number) => number;\r\nexport const clearT = window.clearTimeout as (id?: number) => void;\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\ntype ClassContainingElement = Node | Element | false | null | undefined;\r\ntype ClassName = string | false | null | undefined;\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: ClassContainingElement,\r\n className: ClassName,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n const classList = elm && (elm as Element).classList;\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (classList && 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(classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: ClassContainingElement, className: ClassName): boolean =>\r\n 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 = (elm: ClassContainingElement, className: ClassName): 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 = (elm: ClassContainingElement, className: ClassName): (() => 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 = (classNameA: ClassName, classNameB: ClassName) => {\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, setT, clearT } from 'support/compatibility/apis';\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 maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear: () => void = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\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 (clear !== noop) {\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 clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\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 clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\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, runEachAndClear } 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() {\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) ?? doSupportPassiveEvents;\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 = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) 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 runEachAndClear.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 type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: 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 const addEvent: 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 const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n 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 && !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 [AddEvent, RemoveEvent, TriggerEvent];\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 = (\r\n changedOptions: PartialOptions,\r\n force: boolean,\r\n ...args: T\r\n) => void;\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<\r\n DynamicState,\r\n StaticState extends Record = Record,\r\n A extends any[] = []\r\n> = [update: SetupUpdate
, state: (() => DynamicState) & StaticState, destroy: () => void];\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\nexport const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\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 ScrollbarVisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type ScrollbarAutoHideBehavior = '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 theme: string | null;\r\n visibility: ScrollbarVisibilityBehavior;\r\n autoHide: ScrollbarAutoHideBehavior;\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 theme: 'os-theme-dark',\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 { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n};\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","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 {\r\n Options,\r\n OverflowBehavior,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { PartialOptions } from 'typings';\r\nimport type { Plugin } from 'plugins';\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 theme: [oTypes.string, oTypes.null], // string || null\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: Plugin = {\r\n [optionsValidationPluginName]: {\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 {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n} from 'support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from 'classnames';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type SizeObserverPluginInstance = {\r\n _: (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean\r\n ) => [appearCallback: () => any, offFns: (() => any)[]];\r\n};\r\n\r\nconst scrollAmount = 3333333;\r\nconst scrollEventName = 'scroll';\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const sizeObserverPlugin: Plugin = {\r\n [sizeObserverPluginName]: {\r\n _: (listenerElement, onSizeChangedCallback, observeAppearChange) => {\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 onSizeChangedCallback(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 stopPropagation(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 const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), 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 return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import {\r\n keys,\r\n attr,\r\n WH,\r\n style,\r\n addClass,\r\n removeClass,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n UpdateCache,\r\n XY,\r\n} from 'support';\r\nimport { classNameViewportArrange } from 'classnames';\r\nimport type { StyleObject } from 'typings';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type {\r\n ViewportOverflowState,\r\n GetViewportOverflowState,\r\n HideNativeScrollbars,\r\n} from 'setups/structureSetup/updateSegments/overflowUpdateSegment';\r\nimport type { InternalEnvironment } from 'environment';\r\nimport type { Plugin } from 'plugins';\r\n\r\nexport type ArrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH,\r\n directionIsRTL: boolean\r\n) => boolean;\r\n\r\nexport type UndoViewportArrangeResult = [\r\n redoViewportArrange: () => void,\r\n overflowState?: ViewportOverflowState\r\n];\r\n\r\nexport type UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars: boolean,\r\n directionIsRTL: boolean,\r\n viewportOverflowState?: ViewportOverflowState\r\n) => UndoViewportArrangeResult;\r\n\r\nexport type ScrollbarsHidingPluginInstance = {\r\n _createUniqueViewportArrangeElement(env: InternalEnvironment): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: boolean,\r\n flexboxGlue: boolean,\r\n viewport: HTMLElement,\r\n viewportArrange: HTMLStyleElement | false | null | undefined,\r\n getState: () => StructureSetupState,\r\n getViewportOverflowState: GetViewportOverflowState,\r\n hideNativeScrollbars: HideNativeScrollbars\r\n ): [ArrangeViewport, UndoArrangeViewport];\r\n _envWindowZoom(): (\r\n envInstance: InternalEnvironment,\r\n updateNativeScrollbarSizeCache: UpdateCache>,\r\n triggerEvent: () => void\r\n ) => void;\r\n};\r\n\r\nlet contentArrangeCounter = 0;\r\nconst { round, abs } = Math;\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = env;\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 _overflowUpdateSegment: (\r\n doViewportArrange,\r\n flexboxGlue,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\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: ArrangeViewport = (\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n directionIsRTL\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 ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }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 * 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: UndoArrangeViewport = (\r\n showNativeOverlaidScrollbars,\r\n directionIsRTL,\r\n viewportOverflowState?\r\n ) => {\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 [arrangeViewport, undoViewportArrange];\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n\r\n return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {\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) {\r\n return;\r\n }\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 && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\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};\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 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\nimport { getPlugins, ScrollbarsHidingPluginInstance, scrollbarsHidingPluginName } from 'plugins';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: 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\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\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 clear && removeElements(measureElm);\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 getNativeScrollbarsHiding = (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 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 {\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n getNativeScrollbarSize.bind(0, body, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n padding: !nativeScrollbarsHiding,\r\n content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\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 (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let resizeFn: undefined | ReturnType;\r\n window.addEventListener('resize', () => {\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n\r\n resizeFn = resizeFn || (scrollbarsHidingPlugin && scrollbarsHidingPlugin._envWindowZoom());\r\n resizeFn && resizeFn(env, updateNativeScrollbarSizeCache, triggerEvent.bind(0, '_'));\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 runEachAndClear,\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 classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\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 | null | undefined;\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\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 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 env = getEnvironment();\r\n const { _getInitializationStrategy, _nativeScrollbarsHiding } = env;\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\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 && _nativeScrollbarsHiding;\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:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\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 (_nativeScrollbarsHiding && !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, runEachAndClear.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 createTrinsicUpdateSegment: 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 createPaddingUpdateSegment: 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 { _nativeScrollbarsHiding: _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 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 equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\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 { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\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\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst max0 = max.bind(0, 0);\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 = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.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 createOverflowUpdateSegment: 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 _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 [updateOverflowEdge, getCurrentOverflowEdgeCache] = 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 = !(_nativeScrollbarsOverlaid.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: GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars,\r\n viewportStyleObj?\r\n ) => {\r\n const arrangeHideOffset =\r\n !_nativeScrollbarsHiding && !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 && !_nativeScrollbarsHiding ? 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', _nativeScrollbarsOverlaid.x, _nativeScrollbarsSize.x);\r\n const [yOverflowStyle, yOverflowScroll, yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] =\r\n getStatePerAxis('overflowY', _nativeScrollbarsOverlaid.y, _nativeScrollbarsSize.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 * 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: HideNativeScrollbars = (\r\n viewportOverflowState,\r\n directionIsRTL,\r\n viewportArrange,\r\n viewportStyleObj\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 const [arrangeViewport, undoViewportArrange] = scrollbarsHidingPlugin\r\n ? scrollbarsHidingPlugin._overflowUpdateSegment(\r\n doViewportArrange,\r\n _flexboxGlue,\r\n _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\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 _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.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 let overflowEdgeCache = getCurrentOverflowEdgeCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\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 const overflowAmountScrollSize = {\r\n w: max0(max(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(max(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n arrangedViewportClientSize.h +\r\n max0(viewportclientSize.h - viewportScrollSize.h) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\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 overflowEdgeChanged ||\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 _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\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 _overflowEdgeChanged: overflowEdgeChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createOverflowUpdateSegment,\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 _overflowEdgeChanged: 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 {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdateSegment(structureSetupElements, state),\r\n createPaddingUpdateSegment(structureSetupElements, state),\r\n createOverflowUpdateSegment(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 _overflowEdgeChanged: 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 scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\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 scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n stopPropagation,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\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 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 sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\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 if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\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, 'scroll', (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 stopPropagation(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, 'animationstart', 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 runEachAndClear(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 runEachAndClear,\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 TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n destroy: () => void,\r\n update: () => void | Parameters\r\n];\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: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH,\r\n fromRecords?: true\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n !fromRecords && onTrinsicChangedCallback(heightIntrinsic);\r\n return [heightIntrinsic];\r\n }\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n entries: IntersectionObserverEntry[],\r\n fromRecords?: true\r\n ) => {\r\n if (entries && entries.length > 0) {\r\n return triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n (entries) => intersectionObserverCallback(entries),\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 () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n },\r\n () => {\r\n if (intersectionObserverInstance) {\r\n return intersectionObserverCallback(intersectionObserverInstance.takeRecords(), true);\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n 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 = [\r\n destroy: () => void,\r\n update: () => void | false | Parameters>\r\n];\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 debouncedEventContentChange = 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 const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\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 = (\r\n mutations: MutationRecord[],\r\n fromRecords?: true\r\n ): void | Parameters> => {\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 !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] as Parameters>;\r\n }\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n !fromRecords &&\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n return [targetChangedAttrs, targetStyleChanged] as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!((mutations) =>\r\n observerCallback(mutations)\r\n );\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 debouncedEventContentChange._flush();\r\n\r\n const records = mutationObserver.takeRecords();\r\n return !isEmptyArray(records) && observerCallback(records, true);\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 closest,\r\n assignDeep,\r\n push,\r\n scrollLeft,\r\n scrollTop,\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 classNameScrollbar,\r\n classNameViewportArrange,\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 destroy: () => void,\r\n updateObservers: () => Partial,\r\n updateObserversOptions: StructureSetupObserversUpdate\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 { _nativeScrollbarsHiding: _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 hasOver = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n const hasVpStyle = _viewportHasClass(classNameViewportArrange, '');\r\n const scrollOffsetX = hasVpStyle && scrollLeft(_viewport);\r\n const scrollOffsetY = hasVpStyle && scrollTop(_viewport);\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n _viewportAddRemoveClass(classNameViewportArrange, '');\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, hasOver);\r\n _viewportAddRemoveClass(classNameViewportArrange, '', hasVpStyle);\r\n scrollLeft(_viewport, scrollOffsetX);\r\n scrollTop(_viewport, scrollOffsetY);\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, fromRecords?: true) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: Partial = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && structureSetupUpdate(updateHints);\r\n return updateHints;\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, fromRecords?: true) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n const updateHints: Partial = {\r\n _contentMutation: contentSizeChanged,\r\n };\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 !fromRecords && updateFn(updateHints);\r\n }\r\n return updateHints;\r\n };\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ) => {\r\n const updateHints: Partial = { _hostMutation: targetStyleChanged };\r\n if (targetStyleChanged) {\r\n !fromRecords && structureSetupUpdateWithDebouncedAdaptiveUpdateHints(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n return updateHints;\r\n };\r\n\r\n const trinsicObserver =\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, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n }\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 () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n trinsicObserver && trinsicObserver[0](); // destroy\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[1](); // update\r\n const trinsicUpdateResult = trinsicObserver && trinsicObserver[1](); // update\r\n\r\n if (hostUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onHostMutation.apply(\r\n 0,\r\n push(hostUpdateResult, true) as [\r\n ...updateResult: typeof hostUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (contentUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onContentMutation.apply(\r\n 0,\r\n push(contentUpdateResult, true) as [\r\n ...updateResult: typeof contentUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n if (trinsicUpdateResult) {\r\n assignDeep(\r\n updateHints,\r\n onTrinsicChanged.apply(\r\n 0,\r\n push(trinsicUpdateResult as any[], true) as [\r\n ...updateResult: typeof trinsicUpdateResult,\r\n fromRecords: true\r\n ]\r\n )\r\n );\r\n }\r\n\r\n return updateHints;\r\n },\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, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\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};\r\n","import { createEventListenerHub, isEmptyObject, keys } 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 _overflowEdge: XY;\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 initialXYNumber = { x: 0, y: 0 };\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 _overflowEdge: initialXYNumber,\r\n _overflowAmount: initialXYNumber,\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 triggerUpdateEvent: (...args: StructureSetupEventMap['u']) => void = (\r\n updateHints,\r\n changedOptions,\r\n force\r\n ) => {\r\n const truthyUpdateHints = keys(updateHints).some((key) => updateHints[key]);\r\n\r\n if (truthyUpdateHints || !isEmptyObject(changedOptions) || force) {\r\n triggerEvent('u', [updateHints, changedOptions, force]);\r\n }\r\n };\r\n const [destroyObservers, updateObservers, updateObserversOptions] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerUpdateEvent(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 updateObserversOptions(checkOption);\r\n triggerUpdateEvent(\r\n updateStructure(checkOption, updateObservers(), force),\r\n changedOptions,\r\n !!force\r\n );\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 {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n each,\r\n isEmptyArray,\r\n noop,\r\n on,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\r\n stopPropagation,\r\n style,\r\n} from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n classNamesScrollbarInteraction,\r\n classNamesScrollbarTransitionless,\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\nimport { StyleObject } from 'typings';\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 ScrollbarsSetupElement {\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _addRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => void;\r\n _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n // _removeClass: (classNames: string) => void;\r\n /*\r\n _addEventListener: () => void;\r\n _removeEventListener: () => void;\r\n */\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\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 interactionStartEventNames = 'touchstart mouseenter';\r\nconst interactionEndEventNames = 'touchend touchcancel mouseleave';\r\nconst stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>\r\n on(\r\n scrollbar,\r\n 'mousedown',\r\n on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),\r\n { _capture: true }\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 { _documentElm, _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot = _targetIsElm\r\n ? null\r\n : (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 const scrollbarsAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action((elm || noop)(scrollbarStructure) || scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const scrollbarsHandleStyle = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => {\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n const [elm, styles] = elmStyle(scrollbarStructure);\r\n style(elm, styles);\r\n });\r\n };\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const addRemoveClassHorizontal = scrollbarsAddRemoveClass.bind(0, horizontalScrollbars);\r\n const addRemoveClassVertical = scrollbarsAddRemoveClass.bind(0, verticalScrollbars);\r\n const generateScrollbarDOM = (horizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = horizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;\r\n const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';\r\n const scrollbar = createDiv(\r\n `${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass}`\r\n );\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n push(arrToPush, result);\r\n push(destroyFns, [\r\n removeElements.bind(0, scrollbar),\r\n on(scrollbar, interactionStartEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction, true);\r\n addRemoveClassVertical(classNamesScrollbarInteraction, true);\r\n }),\r\n on(scrollbar, interactionEndEventNames, () => {\r\n addRemoveClassHorizontal(classNamesScrollbarInteraction);\r\n addRemoveClassVertical(classNamesScrollbarInteraction);\r\n }),\r\n stopRootClickPropagation(scrollbar, _documentElm),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = generateScrollbarDOM.bind(0, true);\r\n const generateVerticalScrollbarStructure = generateScrollbarDOM.bind(0, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n setT(() => {\r\n addRemoveClassHorizontal(classNamesScrollbarTransitionless);\r\n addRemoveClassVertical(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassHorizontal,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _addRemoveClass: addRemoveClassVertical,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, verticalScrollbars),\r\n },\r\n },\r\n appendElements,\r\n runEachAndClear.bind(0, destroyFns),\r\n ];\r\n};\r\n","import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElement,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOSOptions,\r\n ScrollbarVisibilityBehavior,\r\n ScrollbarAutoHideBehavior,\r\n} from 'options';\r\nimport type { Setup, StructureSetupState, StructureSetupStaticState } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { OverflowStyle, StyleObject } from 'typings';\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\nconst { min } = Math;\r\nconst createSelfCancelTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\nconst refreshScrollbarHandleLength = (\r\n setStyleFn: ScrollbarsSetupElement['_handleStyle'],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n const handleRatio = min(1, viewportSize / (viewportSize + overflowAmount));\r\n\r\n setStyleFn((structure) => [\r\n structure._handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(handleRatio * 100).toFixed(3)}%`,\r\n },\r\n ]);\r\n};\r\n\r\nconst refreshScrollbarHandlePosition = (\r\n setStyleFn: (styles: StyleObject) => void,\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n /*\r\n //measure the handle length to respect min & max length\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\r\n var handleTrackDiff = trackLength - handleLength;\r\n var handleCSS = {};\r\n var transformOffset;\r\n var translateValue;\r\n\r\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\r\n // because its a bit behind during the small delay when content size updates\r\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\r\n var maxScroll =\r\n (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] -\r\n _viewportElementNative['client' + scrollbarVars._Width_Height]) *\r\n (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\r\n var getScrollRatio = function (base) {\r\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\r\n };\r\n var getHandleOffset = function (scrollRatio) {\r\n var offset = handleTrackDiff * scrollRatio;\r\n offset = isNaN(offset) ? 0 : offset;\r\n offset =\r\n isRTLisHorizontal && !_rtlScrollBehavior.i ? trackLength - handleLength - offset : offset;\r\n offset = MATH.max(0, offset);\r\n return offset;\r\n };\r\n var scrollRatio = getScrollRatio(nativeScroll);\r\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\r\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\r\n var snappedHandleOffset = getHandleOffset(scrollRatio);\r\n\r\n scrollbarVarsInfo._maxScroll = maxScroll;\r\n scrollbarVarsInfo._currentScroll = nativeScroll;\r\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\r\n\r\n if (_supportTransform) {\r\n transformOffset = isRTLisHorizontal\r\n ? -(trackLength - handleLength - handleOffset)\r\n : handleOffset; //in px\r\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\r\n translateValue = isHorizontal\r\n ? strTranslateBrace + transformOffset + 'px, 0)'\r\n : strTranslateBrace + '0, ' + transformOffset + 'px)';\r\n\r\n handleCSS[strTransform] = translateValue;\r\n\r\n //apply or clear up transition\r\n if (_supportTransition)\r\n handleCSS[strTransition] =\r\n transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1\r\n ? getCSSTransitionString(scrollbarVars._handle) +\r\n ', ' +\r\n (strTransform + _strSpace + transitionDuration + 'ms')\r\n : _strEmpty;\r\n } else handleCSS[scrollbarVars._left_top] = handleOffset;\r\n\r\n //only apply css if offset has changed and overflow exists.\r\n if (!nativeOverlayScrollbarsAreActive()) {\r\n scrollbarVars._handle.css(handleCSS);\r\n\r\n //clear up transition\r\n if (_supportTransform && _supportTransition && transition) {\r\n scrollbarVars._handle.one(_strTransitionEndEvent, function () {\r\n if (!_destroyed) scrollbarVars._handle.css(strTransition, _strEmpty);\r\n });\r\n }\r\n }\r\n\r\n scrollbarVarsInfo._handleOffset = handleOffset;\r\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\r\n scrollbarVarsInfo._trackLength = trackLength;\r\n */\r\n};\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup => {\r\n let autoHideIsMove: boolean;\r\n let autoHideIsLeave: boolean;\r\n let autoHideNotNever: boolean;\r\n let mouseInHost: boolean | undefined;\r\n let prevTheme: string | null | undefined;\r\n let globalAutoHideDelay = 0;\r\n\r\n const state = createState({});\r\n const [getState] = state;\r\n const [requestMouseMoveAnimationFrame, cancelMouseMoveAnimationFrame] = createSelfCancelTimeout();\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = createSelfCancelTimeout();\r\n const [scrollTimeout, clearScrollTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideMoveTimeout, clearAutoHideTimeout] = createSelfCancelTimeout(100);\r\n const [auotHideTimeout, clearAutoTimeout] = createSelfCancelTimeout(() => globalAutoHideDelay);\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupState._elements\r\n );\r\n const { _host, _viewport } = structureSetupState._elements;\r\n const { _horizontal, _vertical } = elements;\r\n const { _addRemoveClass: addRemoveClassHorizontal, _handleStyle: styleHorizontal } = _horizontal;\r\n const { _addRemoveClass: addRemoveClassVertical, _handleStyle: styleVertical } = _vertical;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => {\r\n addRemoveClassHorizontal(classNamesScrollbarAutoHidden, true);\r\n addRemoveClassVertical(classNamesScrollbarAutoHidden, true);\r\n };\r\n if (globalAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const onHostMouseEnter = () => {\r\n mouseInHost = autoHideIsLeave;\r\n mouseInHost && manageScrollbarsAutoHide(true);\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearScrollTimeout,\r\n clearAutoTimeout,\r\n clearAutoHideTimeout,\r\n cancelScrollAnimationFrame,\r\n cancelMouseMoveAnimationFrame,\r\n destroyElements,\r\n\r\n on(_host, 'mouseover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'mouseenter', onHostMouseEnter),\r\n on(_host, 'mouseleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'mousemove', () => {\r\n autoHideIsMove &&\r\n requestMouseMoveAnimationFrame(() => {\r\n clearScrollTimeout();\r\n manageScrollbarsAutoHide(true);\r\n auotHideMoveTimeout(() => {\r\n autoHideIsMove && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n }),\r\n on(_viewport, 'scroll', () => {\r\n autoHideNotNever &&\r\n requestScrollAnimationFrame(() => {\r\n manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\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, structureUpdateHints) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n\r\n const [theme, themeChanged] = checkOption('scrollbars.theme');\r\n const [visibility, visibilityChanged] =\r\n checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] =\r\n checkOption('scrollbars.autoHide');\r\n const [autoHideDelay] = checkOption('scrollbars.autoHideDelay');\r\n const [dragScrolling, dragScrollingChanged] = checkOption(\r\n 'scrollbars.dragScrolling'\r\n );\r\n const [touchSupport, touchSupportChanged] = checkOption('scrollbars.touchSupport');\r\n\r\n const updateHandle = _overflowEdgeChanged || _overflowAmountChanged;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged;\r\n\r\n const setScrollbarVisibility = (\r\n overflowStyle: OverflowStyle,\r\n addRemoveClass: (classNames: string, add?: boolean) => void\r\n ) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n addRemoveClass(classNamesScrollbarVisible, isVisible);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (updateVisibility) {\r\n const { _overflowStyle } = currStructureSetupState;\r\n\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, addRemoveClassHorizontal);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, addRemoveClassVertical);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n addRemoveClassHorizontal(classNamesScrollbarCornerless, !hasCorner);\r\n addRemoveClassVertical(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (themeChanged) {\r\n addRemoveClassHorizontal(prevTheme);\r\n addRemoveClassVertical(prevTheme);\r\n\r\n addRemoveClassHorizontal(theme, true);\r\n addRemoveClassVertical(theme, true);\r\n prevTheme = theme;\r\n }\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideNotNever = autoHide !== 'never';\r\n manageScrollbarsAutoHide(!autoHideNotNever, true);\r\n }\r\n if (updateHandle) {\r\n refreshScrollbarHandleLength(styleHorizontal, currStructureSetupState, true);\r\n refreshScrollbarHandleLength(styleVertical, currStructureSetupState);\r\n }\r\n },\r\n scrollbarsSetupState,\r\n runEachAndClear.bind(0, destroyFns),\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 Plugin,\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(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: 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 overflowEdge: XY;\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 overflowEdgeChanged: 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 _nativeScrollbarsOverlaid: _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\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(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: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\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 structureState._addOnUpdatedListener((updateHints, changedOptions, force: boolean) => {\r\n updateScrollbars(changedOptions, force, updateHints);\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 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 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 _overflowEdgeChanged,\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 overflowEdgeChanged: _overflowEdgeChanged,\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 _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\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 scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\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":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","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","setT","setTimeout","clearT","clearTimeout","rnothtmlwhite","classListAction","className","action","classList","clazz","classes","match","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","noop","debounce","functionToDebounce","maxTimeoutId","prevArguments","latestArguments","clear","_timeout","_maxDelay","_mergeParams","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","clearTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","timeoutId","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","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","_ref","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","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","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarAutoHidden","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","_validateRecursive","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","_validateOptions","_optionsValidationPlu","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","_sizeObserverPlugin","contentArrangeCounter","abs","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","env","_nativeScrollbarStyling","_nativeScrollbarsHiding","_nativeScrollbarIsOverlaid","_nativeScrollbarsOverlaid","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","_getState","_viewportPaddingStyle","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","_getState2","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_envWindowZoom","size","dpr","envInstance","updateNativeScrollbarSizeCache","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","_updateNativeScrollba","scrollbarSize","scrollbarSizeChanged","_nativeScrollbarsSize","_scrollbarsHidingPlug","environmentInstance","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","padding","content","defaultDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getInitializationStr","hostInitializationStrategy","host","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","_host","_viewport","_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","createTrinsicUpdateSegment","structureSetupElements","updateHints","_getEnvironment","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","max0","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdateSegment","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowEdge","_createCache4","getCurrentOverflowEdgeCache","updateOverflowStyleCache","_createCache5","fixFlexboxGlue","heightIntrinsic","_overflowScroll","hostClientSize","isContentBox","subtractXScrollbar","viewportStyleObj","arrangeHideOffset","getStatePerAxis","styleKey","isOverlaid","nativeScrollbarSize","overflowStyle","objectPrefferedOverflowStyle","overflowScroll","nonScrollbarStylingHideOffset","scrollbarsHideOffset","scrollbarsHideOffsetArrange","xOverflowStyle","_getStatePerAxis","xOverflowScroll","xScrollbarsHideOffset","xScrollbarsHideOffsetArrange","yOverflowStyle","_getStatePerAxis2","yOverflowScroll","yScrollbarsHideOffset","yScrollbarsHideOffsetArrange","_overflowStyle","setViewportOverflowState","hasOverflow","overflowOption","setAxisOverflowStyle","behavior","hasOverflowAxis","overflowVisible","overflowVisibleBehavior","_setAxisOverflowStyle","visibleBehaviorX","_setAxisOverflowStyle2","visibleBehaviorY","horizontalMarginKey","viewportHorizontalPaddingKey","horizontalMarginValue","verticalMarginValue","horizontalPaddingValue","verticalPaddingValue","_hostMutation","_getState3","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","overflowEdgeCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmountScrollSize","overflowAmountClientSize","_overflowEdgeCache","overflowEdge","overflowEdgeChanged","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowEdge","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowEdgeChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_ref$_direction","_direction","observeDirectionChange","_ref$_appear","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","_sizeObserverPlugin$_","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","debouncedEventContentChange","_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","records","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","hasOver","hasVpStyle","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","contentUpdateResult","trinsicUpdateResult","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","_createStructureSetup2","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","interactionStartEventNames","interactionEndEventNames","stopRootClickPropagation","scrollbar","documentElm","createScrollbarsSetupElements","environmentScrollbarSlot","scrollbarsSlot","initializationScrollbarSlot","evaluatedScrollbarSlot","scrollbarsAddRemoveClass","scrollbarStructures","scrollbarStructure","_scrollbar","scrollbarsHandleStyle","_elmStyle","horizontalScrollbars","verticalScrollbars","addRemoveClassHorizontal","addRemoveClassVertical","generateScrollbarDOM","horizontal","scrollbarClassName","arrToPush","transitionlessClass","track","handle","_track","_handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_horizontal","_scrollbarStructures","_clone","_addRemoveClass","_handleStyle","_vertical","min","createSelfCancelTimeout","id","setTFn","clearTFn","refreshScrollbarHandleLength","setStyleFn","isHorizontal","axis","viewportSize","handleRatio","structure","toFixed","createScrollbarsSetup","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","prevTheme","globalAutoHideDelay","_createSelfCancelTime","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","_createSelfCancelTime2","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","_createSelfCancelTime3","clearScrollTimeout","auotHideMoveTimeout","_createSelfCancelTime4","clearAutoHideTimeout","_createSelfCancelTime5","auotHideTimeout","clearAutoTimeout","_createScrollbarsSetu","styleHorizontal","styleVertical","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","currStructureSetupState","themeChanged","visibilityChanged","autoHideChanged","updateHandle","updateVisibility","setScrollbarVisibility","addRemoveClass","isVisible","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","_structureState","pluginInstance","sizeChanged","hostMutation","_getEnvironment2","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","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 3d64581..80642f4 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars={})}(this,(function(n){"use strict";function r(n,t){if(b(n))for(var e=0;e-1&&r%1==0;return!(!(p(n)||!h(n)&&t)||r>0&&g(n)&&!(r-1 in n))},w=function(n){if(!n||!g(n)||"object"!==d(n))return!1;var r,t="constructor",e=n[t],i=e&&e.prototype,o=a.call(n,t),u=i&&a.call(i,"isPrototypeOf");if(e&&!o&&!u)return!1;for(r in n);return f(r)||a.call(n,r)},y=function(n){var r=HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===o)},m=function(n){var r=Element;return!!n&&(r?n instanceof r:n.nodeType===o)},x=function(n,r,t){return n.indexOf(r,t)},_=function(n,r,t){return t||v(r)||!b(r)?n.push(r):Array.prototype.push.apply(n,r),n},O=function(n){var t=Array.from,e=[];return t&&n?t(n):(n instanceof Set?n.forEach((function(n){_(e,n)})):r(n,(function(n){_(e,n)})),e)},S=function(n){return!!n&&0===n.length},P=function(n,t,e){r(n,(function(n){return n&&n.apply(void 0,t||[])})),!e&&(n.length=0)},L=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},T=function(n){return n?Object.keys(n):[]},E=function n(t,e,i,o,u,c,a){var f=[e,i,o,u,c,a];return"object"==typeof t&&!l(t)||h(t)||(t={}),r(f,(function(e){r(T(e),(function(r){var i=e[r];if(t===i)return!0;var o=p(i);if(i&&(w(i)||o)){var u=t[r],c=u;o&&!p(u)?c=[]:o||w(u)||(c={}),t[r]=n(c,i)}else t[r]=i}))})),t},C=function(n){for(var r in n)return!1;return!0},M=function(n,r,t,e){if(f(e))return t?t[n]:r;t&&(t[n]=e)},B=function(n,r,t){if(f(t))return n?n.getAttribute(r):null;n&&n.setAttribute(r,t)},A=function(n,r,t,e){var i=B(n,r)||"",o=new Set(i.split(" "));o[e?"add":"delete"](t),B(n,r,O(o).join(" ").trim())},j=function(n,r,t){var e=B(n,r)||"";return new Set(e.split(" ")).has(t)},z=function(n,r){n&&n.removeAttribute(r)},R=function(n,r){return M("scrollLeft",0,n,r)},H=function(n,r){return M("scrollTop",0,n,r)},D=Element.prototype,k=function(n,r){var t=[],e=r?m(r)?r:null:document;return e?_(t,e.querySelectorAll(n)):t},I=function(n,r){return!!m(n)&&(D.matches||D.msMatchesSelector).call(n,r)},F=function(n){return n?O(n.childNodes):[]},N=function(n){return n?n.parentElement:null},Y=function(n,r){if(m(n)){var t=D.closest;if(t)return t.call(n,r);do{if(I(n,r))return n;n=N(n)}while(n)}return null},U=function(n,r,t){var e=n&&Y(n,r),i=n&&function(n,r){var t=r?m(r)?r:null:document;return t?t.querySelector(n):null}(t,e);return!(!e||!i||e!==n&&i!==n&&Y(Y(n,t),r)===e)},V=function(n,t,e){if(e){var i,o=t;n&&(b(e)?(i=document.createDocumentFragment(),r(e,(function(n){n===o&&(o=n.previousSibling),i.appendChild(n)}))):i=e,t&&(o?o!==t&&(o=o.nextSibling):o=n.firstChild),n.insertBefore(i,o||null))}},J=function(n,r){V(n,null,r)},K=function(n,r){V(n,n&&n.firstChild,r)},X=function(n,r){V(N(n),n,r)},q=function(n,r){V(N(n),n&&n.nextSibling,r)},W=function n(t){if(b(t))r(O(t),(function(r){return n(r)}));else if(t){var e=N(t);e&&e.removeChild(t)}},$=function(n){var r=document.createElement("div");return n&&B(r,"class",n),r},G=function(n){var t=$();return t.innerHTML=n.trim(),r(F(t),(function(n){return W(n)}))},Z=function(n){return n.charAt(0).toUpperCase()+n.slice(1)},Q=["-webkit-","-moz-","-o-","-ms-"],nn=["WebKit","Moz","O","MS","webkit","moz","o","ms"],rn={},tn={},en=function(n){var t=rn[n]||window[n];return L(rn,n)||(r(nn,(function(r){return!(t=t||window[r+Z(n)])})),rn[n]=t),t},on=en("MutationObserver"),un=en("IntersectionObserver"),cn=en("ResizeObserver"),an=en("cancelAnimationFrame"),fn=en("requestAnimationFrame"),ln=window.setTimeout,dn=window.clearTimeout,sn=/[^\x20\t\r\n\f]+/g,vn=function(n,r,t){var e,i=n&&n.classList,o=0,u=!1;if(i&&r&&v(r)){var c=r.match(sn)||[];for(u=c.length>0;e=c[o++];)u=!!t(i,e)&&u}return u},hn=function(n,r){vn(n,r,(function(n,r){return n.remove(r)}))},pn=function(n,r){return vn(n,r,(function(n,r){return n.add(r)})),hn.bind(0,n,r)},gn=function(n,t,e,i){if(n&&t){var o=!0;return r(e,(function(r){(i?i(n[r]):n[r])!==(i?i(t[r]):t[r])&&(o=!1)})),o}return!1},bn=function(n,r){return gn(n,r,["w","h"])},wn=function(n,r){return gn(n,r,["x","y"])},yn=function(n,r){return gn(n,r,["t","r","b","l"])},mn=function(n,r,t){return gn(n,r,["width","height"],t&&function(n){return Math.round(n)})},xn=function(){},_n=function(n,r){var t,e,i,o=xn,u=r||{},c=u._,a=u.p,f=u.m,l=function(r){o(),dn(t),t=e=void 0,o=xn,n.apply(this,r)},d=function(n){return f&&e?f(e,n):n},v=function(){o!==xn&&l(d(i)||i)},p=function(){var n=O(arguments),r=h(c)?c():c,u=s(r)&&r>=0;if(u){var f=h(a)?a():a,p=s(f)&&f>=0,g=r>0?ln:fn,b=r>0?dn:an,w=d(n),y=w||n,m=l.bind(0,y);o();var x=g(m,r);o=function(){return b(x)},p&&!t&&(t=ln(v,f)),e=i=y}else l(n)};return p.S=v,p},On={opacity:1,zindex:1},Sn=function(n,r){var t=r?parseFloat(n):parseInt(n,10);return t==t?t:0},Pn=function(n,r,t){return null!=r?r[t]||r.getPropertyValue(t):n.style[t]},Ln=function(n,r,t){try{if(n){var e=n.style;f(e[r])?e.setProperty(r,t):e[r]=function(n,r){return!On[n.toLowerCase()]&&s(r)?r+"px":r}(r,t)}}catch(c){}},Tn=function(n,r,e){var i=r?r+"-":"",o=e?"-"+e:"",u=i+"top"+o,c=i+"right"+o,a=i+"bottom"+o,f=i+"left"+o,l=t(n,[u,c,a,f]);return{t:Sn(l[u]),r:Sn(l[c]),b:Sn(l[a]),l:Sn(l[f])}},En={w:0,h:0},Cn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:En},Mn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:En},Bn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:En},An=function(n){var r=parseFloat(t(n,"height"))||0,e=parseFloat(t(n,"height"))||0;return{w:e-Math.round(e),h:r-Math.round(r)}},jn=function(n){return n.getBoundingClientRect()},zn=function(){if(f(e)){e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(n){}}return e},Rn=function(n){return n.split(" ")},Hn=function(n,t,e,i){r(Rn(t),(function(r){n.removeEventListener(r,e,i)}))},Dn=function(n,t,e,i){var o,u=zn(),c=null!=(o=u&&i&&i.C)?o:u,a=i&&i.O||!1,f=i&&i.A||!1,l=[],d=u?{passive:c,capture:a}:a;return r(Rn(t),(function(r){var t=f?function(i){n.removeEventListener(r,t,a),e&&e(i)}:e;_(l,Hn.bind(null,n,r,t,a)),n.addEventListener(r,t,d)})),P.bind(0,l)},kn=function(n){return n.stopPropagation()},In={x:0,y:0},Fn=function(n){var r=n?jn(n):0;return r?{x:r.left+window.pageYOffset,y:r.top+window.pageXOffset}:In},Nn=function(n,t){r(p(t)?t:[t],n)},Yn=function(n){var t=new Map,e=function(n,r){if(n){var e=t.get(n);Nn((function(n){e&&e[n?"delete":"clear"](n)}),r)}else t.forEach((function(n){n.clear()})),t.clear()},i=function(n,r){var i=t.get(n)||new Set;return t.set(n,i),Nn((function(n){n&&i.add(n)}),r),e.bind(0,n,r)};return r(T(n),(function(r){i(r,n[r])})),[i,e,function(n,e){var i=t.get(n);r(O(i),(function(n){e&&!S(e)?n.apply(0,e):n()}))}]},Un=function(n,r){return n?r.split(".").reduce((function(n,r){return n&&L(n,r)?n[r]:void 0}),n):void 0},Vn=function(n,r,t){return function(e){return[Un(n,e),t||void 0!==Un(r,e)]}},Jn=function(n){var r=n;return[function(){return r},function(n){r=E({},r,n)}]},Kn="os-environment",Xn=Kn+"-flexbox-glue",qn=Xn+"-max",Wn="data-overlayscrollbars",$n=Wn+"-overflow-x",Gn=Wn+"-overflow-y",Zn="overflowVisible",Qn="viewportStyled",nr="os-padding",rr="os-viewport",tr=rr+"-arrange",er="os-content",ir=rr+"-scrollbar-styled",or="os-overflow-visible",ur="os-size-observer",cr=ur+"-appear",ar=ur+"-listener",fr=ar+"-scroll",lr=ar+"-item",dr=lr+"-final",sr="os-trinsic-observer",vr="os-scrollbar",hr=vr+"-horizontal",pr=vr+"-vertical",gr="os-scrollbar-track",br="os-scrollbar-handle",wr=vr+"-visible",yr=vr+"-cornerless",mr=vr+"-transitionless",xr=vr+"-interaction",_r=vr+"-auto-hidden",Or=function(n){return JSON.stringify(n,(function(n,r){if(h(r))throw new Error;return r}))},Sr={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}},Pr=function n(t,e){var i={};return r(T(e).concat(T(t)),(function(r){var o=t[r],u=e[r];if(g(o)&&g(u))E(i[r]={},n(o,u));else if(L(e,r)&&u!==o){var c=!0;if(p(o)||p(u))try{Or(o)===Or(u)&&(c=!1)}catch(l){}c&&(i[r]=u)}})),i},Lr={},Tr=function(){return E({},Lr)},Er={exports:{}};!function(n){function r(){return n.exports=r=Object.assign?Object.assign.bind():function(n){for(var r=1;r0?"\r\nValid strings are: [ "+O.join(", ")+" ].":"")),delete c[a]}})),[u,c]},Hr=function(n,r,t){return Rr(n,r,t)},Dr=zr.boolean,kr=[zr.array,zr.null],Ir="hidden scroll visible visible-hidden",Fr={paddingAbsolute:Dr,updating:{elementEvents:kr,attributes:kr,debounce:[zr.number,zr.array,zr.null],ignoreMutation:[zr.function,zr.null]},overflow:{x:Ir,y:Ir},scrollbars:{visibility:"visible hidden auto",autoHide:"never scroll leavemove",autoHideDelay:zr.number,dragScroll:Dr,clickScroll:Dr,touch:Dr},nativeScrollbarsOverlaid:{show:Dr,initialize:Dr}},Nr="__osOptionsValidationPlugin",Yr=((Cr={})[Nr]={P:function(n,r){var t=Hr(Fr,n,r),e=t[0],i=t[1];return jr({},i,e)}},Cr),Ur=3333333,Vr="scroll",Jr="__osSizeObserverPlugin",Kr=((Mr={})[Jr]={P:function(n,r,e){var i=G('
');J(n,i),pn(n,fr);var o,u=i[0],c=u.lastChild,a=u.firstChild,f=null==a?void 0:a.firstChild,l=Cn(u),d=l,s=!1,v=function(){R(a,Ur),H(a,Ur),R(c,Ur),H(c,Ur)},h=function(n){o=0,s&&(l=d,r(!0===n))},p=function(n){d=Cn(u),s=!n||!bn(d,l),n?(kn(n),s&&!o&&(an(o),o=fn(h))):h(!1===n),v()},g=_([],[Dn(a,Vr,p),Dn(c,Vr,p)]);return t(f,{width:Ur,height:Ur}),v(),[e?p.bind(0,!1):v,g]}},Mr),Xr=0,qr=Math.round,Wr=Math.abs,$r="__osScrollbarsHidingPlugin",Gr=((Br={})[$r]={T:function(n){var r=n.L,t=n.I,e=!(n.M||r||!t.x&&!t.y)&&document.createElement("style");return e&&(B(e,"id",tr+"-"+Xr),Xr++),e},R:function(n,e,i,o,u,c,a){return[function(r,e,c,a){if(n){var f=u().D,l=r.H,d=r.V,s=d.x,v=d.y,h=l.x,p=l.y,g=f[a?"paddingRight":"paddingLeft"],b=f.paddingTop,w=e.w+c.w,y=e.h+c.h,m={w:p&&v?p+w-g+"px":"",h:h&&s?h+y-b+"px":""};if(o){var x=o.sheet;if(x){var _=x.cssRules;if(_){_.length||x.insertRule("#"+B(o,"id")+" + ."+tr+"::before {}",0);var O=_[0].style;O.width=m.w,O.height=m.h}}}else t(i,{"--os-vaw":m.w,"--os-vah":m.h})}return n},function(o,f,l){if(n){var d=l||c(o),s=u().D,v=d.V,h=v.x,p=v.y,g={},b=function(n){return r(n.split(" "),(function(n){g[n]=s[n]}))};h&&b("marginBottom paddingTop paddingBottom"),p&&b("marginLeft marginRight paddingLeft paddingRight");var w=t(i,T(g));return hn(i,tr),e||(g.height=""),t(i,g),[function(){a(d,f,n,w),t(i,w),pn(i,tr)},d]}return[xn]}]},j:function(){var n={w:0,h:0},r=0;return function(t,e,i){var o={w:window.innerWidth,h:window.innerHeight},u={w:o.w-n.w,h:o.h-n.h};if(0!==u.w||0!==u.h){var c=Wr(u.w),a=Wr(u.h),f={w:Wr(qr(o.w/(n.w/100))),h:Wr(qr(o.h/(n.h/100)))},l=function(){var n=window.screen.deviceXDPI||0,r=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/r}(),d=c>2&&a>2,s=!function(n,r){var t=Wr(n),e=Wr(r);return!(t===e||t+1===e||t-1===e)}(f.w,f.h);if(d&&s&&l!==r&&l>0){var v=e(),h=v[0],p=v[1];E(t.k,h),p&&i()}n=o,r=l}}}},Br),Zr=function(n,r,t,e){J(n,r);var i=Mn(r),o=Cn(r),u=An(t);return e&&W(r),{x:o.h-i.h+u.h,y:o.w-i.w+u.w}},Qr=function(n,r){var e="hidden";t(n,{overflowX:e,overflowY:e,direction:"rtl"}),R(n,0);var i=Fn(n),o=Fn(r);R(n,-999);var u=Fn(r);return{i:i.x===o.x,n:o.x!==u.x}},nt=function(n,r){var t=pn(n,Xn),e=jn(n),i=jn(r),o=mn(i,e,!0),u=pn(n,qn),c=jn(n),a=jn(r),f=mn(a,c,!0);return t(),u(),o&&f},rt=function(){return Ar||(Ar=function(){var n,e=document.body,o=G('
')[0],c=o.firstChild,a=Yn(),f=a[0],l=a[2],d=i({o:Zr(e,o,c),u:wn},Zr.bind(0,e,o,c,!0)),s=d[0],v=(0,d[1])()[0],h=function(n){var e=!1,i=pn(n,ir);try{e="none"===t(n,function(n){var t=tn[n];if(L(tn,n))return t;var e=Z(n),i=$().style;return r(Q,(function(r){var o=r.replace(/-/g,""),u=[n,r+n,o+e,Z(o)+e];return!(t=u.find((function(n){return void 0!==i[n]})))})),tn[n]=t||""}("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(u){}return i(),e}(o),p={x:0===v.x,y:0===v.y},g={B:!h,F:!1},b=E({},Sr),w={k:v,I:p,L:h,M:"-1"===t(o,"zIndex"),q:Qr(o,c),U:nt(o,c),Y:function(n){return f("_",n)},N:E.bind(0,{},g),W:function(n){E(g,n)},G:E.bind(0,{},b),X:function(n){E(b,n)},Z:E({},g),$:E({},b)};return z(o,"style"),W(o),h||p.x&&p.y||window.addEventListener("resize",(function(){var r=Tr()[$r];(n=n||r&&r.j())&&n(w,s,l.bind(0,"_"))})),w}()),Ar},tt=function(n,r){return h(n)?n.apply(0,r):n},et=function(n,r,t,e){return tt(e||tt(t,n),n)||r.apply(0,n)},it=function(n,r,t,e){var i=tt(e,n);return(l(i)||f(i))&&(i=tt(t,n)),!0===i||l(i)||f(i)?r.apply(0,n):i},ot=$.bind(0,""),ut=function(n){J(N(n),F(n)),W(n)},ct=function(n,r){return B(n,Wn,r),z.bind(0,n,Wn)},at=function(n){var r=rt(),t=r.N,e=r.L,i=Tr()[$r],o=i&&i.T,u=t(),c=u.J,a=u.K,f=u.B,l=u.F,d=y(n),s=n,v=d?n:s.target,h=I(v,"textarea"),p=!h&&I(v,"body"),g=v.ownerDocument,b=g.body,w=g.defaultView,m=!!cn&&!h&&e,O=et.bind(0,[v]),S=it.bind(0,[v]),L=[O(ot,a,s.viewport),O(ot,a),O(ot)].filter((function(n){return!!m||n!==v}))[0],E=L===v,C={rr:v,J:h?O(ot,c,s.host):v,K:L,B:!E&&S(ot,f,s.padding),F:!E&&S(ot,l,s.content),ar:!E&&!e&&o&&o(r),er:w,nr:g,tr:N(b),ir:b,vr:h,ur:p,lr:d,cr:E,sr:function(n,r){return E?j(L,Wn,r):function(n,r){return vn(n,r,(function(n,r){return n.contains(r)}))}(L,n)},dr:function(n,r,t){return E?A(L,Wn,r,t):(t?pn:hn)(L,n)}},M=T(C).reduce((function(n,r){var t=C[r];return _(n,!(!t||N(t))&&t)}),[]),B=function(n){return n?x(M,n)>-1:null},R=C.rr,H=C.J,D=C.B,k=C.K,Y=C.F,U=C.ar,V=[],K=h&&B(H),$=h?R:F([Y,k,D,H,R].find((function(n){return!1===B(n)}))),G=Y||k;return[C,function(){var n=ct(H,E?"viewport":"host"),r=pn(D,nr),t=pn(k,!E&&rr),i=pn(Y,er);K&&(q(R,H),_(V,(function(){q(H,R),W(H)}))),J(G,$),J(H,D),J(D||H,!E&&k),J(k,Y),_(V,(function(){n(),z(k,$n),z(k,Gn),B(Y)&&ut(Y),B(k)&&ut(k),B(D)&&ut(D),r(),t(),i()})),e&&!E&&_(V,hn.bind(0,k,ir)),U&&(X(k,U),_(V,W.bind(0,U)))},P.bind(0,V)]},ft=function(n,r){var e=n.F,i=r[0];return function(n){var r=rt().U,o=i().gr,u=n.hr,c=(e||!r)&&u;return c&&t(e,{height:o?"":"100%"}),{_r:c,pr:c}}},lt=function(n,r){var e=r[0],o=r[1],u=n.J,c=n.B,a=n.K,f=n.cr,l=i({u:yn,o:Tn()},Tn.bind(0,u,"padding","")),d=l[0],s=l[1];return function(n,r,i){var u=s(i),l=u[0],v=u[1],h=rt(),p=h.L,g=h.U,b=e().wr,w=n._r,y=n.pr,m=n.br,x=r("paddingAbsolute"),_=x[0],O=x[1];if(w||v||!g&&y){var S=d(i);l=S[0],v=S[1]}var P=!f&&(O||m||v);if(P){var L=!_||!c&&!p,T=l.r+l.l,C=l.t+l.b,M={marginRight:L&&!b?-T:0,marginBottom:L?-C:0,marginLeft:L&&b?-T:0,top:L?-l.t:0,right:L?b?-l.r:"auto":0,left:L?b?"auto":-l.l:0,width:L?"calc(100% + "+T+"px)":""},B={paddingTop:L?l.t:0,paddingRight:L?l.r:0,paddingBottom:L?l.b:0,paddingLeft:L?l.l:0};t(c||a,M),t(a,B),o({B:l,mr:!L,D:c?B:E({},M,B)})}return{yr:P}}},dt=Math.max,st=dt.bind(0,0),vt="visible",ht="hidden",pt=42,gt={u:bn,o:{w:0,h:0}},bt={u:wn,o:{x:ht,y:ht}},wt=function(n,r,t){return t?pn(n,r):hn(n,r)},yt=function(n){return 0===n.indexOf(vt)},mt=function(n,r){var e=r[0],o=r[1],u=n.J,c=n.B,a=n.K,f=n.ar,l=n.cr,d=n.dr,s=rt(),v=s.k,h=s.U,p=s.L,g=s.I,b=Tr()[$r],w=!l&&!p&&(g.x||g.y),y=i(gt,An.bind(0,a)),m=y[0],x=y[1],_=i(gt,Bn.bind(0,a)),O=_[0],S=_[1],P=i(gt),L=P[0],T=P[1],E=i(gt),C=E[0],M=E[1],j=i(bt)[0],z=function(n,r){if(t(a,{height:""}),r){var i=e(),o=i.mr,c=i.B,f=n.Sr,l=n.H,d=An(u),s=Mn(u),v="content-box"===t(a,"boxSizing"),h=o||v?c.b+c.t:0,p=!(g.x&&v);t(a,{height:s.h+d.h+(f.x&&p?l.x:0)-h})}},R=function(n,r){var e=p||n?0:pt,i=function(n,i,o){var u=t(a,n),c="scroll"===(r?r[n]:u);return[u,c,c&&!p?i?e:o:0,i&&!!e]},o=i("overflowX",g.x,v.x),u=o[0],c=o[1],f=o[2],l=o[3],d=i("overflowY",g.y,v.y);return{Cr:{x:u,y:d[0]},Sr:{x:c,y:d[1]},H:{x:f,y:d[2]},V:{x:l,y:d[3]}}},H=function(n,r,t,i){var o=n.H,u=n.V,c=u.x,a=u.y,f=o.x,l=o.y,d=e().D,s=r?"marginLeft":"marginRight",v=r?"paddingLeft":"paddingRight",h=d[s],p=d.marginBottom,g=d[v],b=d.paddingBottom;i.width="calc(100% + "+(l+-1*h)+"px)",i[s]=-l+h,i.marginBottom=-f+p,t&&(i[v]=g+(a?l:0),i.paddingBottom=b+(c?f:0))},D=b?b.R(w,h,a,f,e,R,H):[function(){return w},function(){return[xn]}],k=D[0],I=D[1];return function(n,r,i){var f,s=n._r,v=n.Or,b=n.pr,w=n.yr,y=n.hr,_=n.br,P=e(),E=P.gr,D=P.wr,F=r("nativeScrollbarsOverlaid.show"),N=F[0],Y=F[1],U=r("overflow"),V=U[0],J=U[1],K=N&&g.x&&g.y,X=!l&&!h&&(s||b||v||Y||y),q=yt(V.x),W=yt(V.y),$=q||W,G=x(i),Z=S(i),Q=T(i),nn=M(i);if(Y&&p&&d(ir,Qn,!K),X&&(f=R(K),z(f,E)),s||w||b||_||Y){$&&d(or,Zn,!1);var rn=I(K,D,f),tn=rn[0],en=rn[1],on=G=m(i),un=on[0],cn=on[1],an=Z=O(i),fn=an[0],ln=an[1],dn=Mn(a),sn=fn,vn=dn;tn(),(ln||cn||Y)&&en&&!K&&k(en,fn,un,D)&&(vn=Mn(a),sn=Bn(a));var hn={w:st(dt(fn.w,sn.w)+un.w),h:st(dt(fn.h,sn.h)+un.h)},pn={w:st(vn.w+st(dn.w-fn.w)+un.w),h:st(vn.h+st(dn.h-fn.h)+un.h)};nn=C(pn),Q=L(function(n,r){var t=window.devicePixelRatio%1!=0?1:0,e={w:st(n.w-r.w),h:st(n.h-r.h)};return{w:e.w>t?e.w:0,h:e.h>t?e.h:0}}(hn,pn),i)}var gn=nn,bn=gn[0],wn=gn[1],yn=Q,mn=yn[0],xn=yn[1],_n=Z,On=_n[0],Sn=_n[1],Pn=G,Ln=Pn[0],Tn=Pn[1],En={x:mn.w>0,y:mn.h>0},Cn=q&&W&&(En.x||En.y)||q&&En.x&&!En.y||W&&En.y&&!En.x;if(w||_||Tn||Sn||wn||xn||J||Y||X){var An={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},jn=function(n,r,t,e){var i=function(n,r){var t=yt(n),e=r&&t&&n.replace(vt+"-","")||"";return[r&&!t?n:"",yt(e)?"hidden":e]},o=i(t.x,r.x),u=o[0],c=o[1],a=i(t.y,r.y),f=a[0],l=a[1];return e.overflowX=c&&f?c:u,e.overflowY=l&&u?l:f,R(n,e)}(K,En,V,An),zn=k(jn,On,Ln,D);l||H(jn,D,zn,An),X&&z(jn,E),l?(B(u,$n,An.overflowX),B(u,Gn,An.overflowY)):t(a,An)}A(u,Wn,Zn,Cn),wt(c,or,Cn),!l&&wt(a,or,$);var Rn=j(R(K).Cr),Hn=Rn[0],Dn=Rn[1];return o({Cr:Hn,Er:{x:bn.w,y:bn.h},zr:{x:mn.w,y:mn.h},Ar:En}),{Pr:Dn,Tr:wn,Lr:xn}}},xt=function(n,t,e){var i={},o=t||{};return r(T(n).concat(T(o)),(function(r){var t=n[r],u=o[r];i[r]=!!(e||t||u)})),i},_t=function(n,t){var e=n.K,i=rt(),o=i.L,u=i.I,c=i.U,a=!o&&(u.x||u.y),f=[ft(n,t),lt(n,t),mt(n,t)];return function(n,t,i){var o=xt(E({_r:!1,yr:!1,br:!1,hr:!1,Tr:!1,Lr:!1,Pr:!1,Or:!1,pr:!1},t),{},i),u=a||!c,l=u&&R(e),d=u&&H(e),v=o;return r(f,(function(r){v=xt(v,r(v,n,!!i)||{},i)})),s(l)&&R(e,l),s(d)&&H(e,d),v}},Ot=3333333,St=function(n){return"rtl"===t(n,"direction")},Pt=function(n){return n&&(n.height||n.width)},Lt=function(n,r,t){var e=t||{},o=e.Ir,u=void 0!==o&&o,c=e.Mr,a=void 0!==c&&c,f=Tr()[Jr],l=rt().q,d=G('
')[0],s=d.firstChild,v=St.bind(0,d),h=i({o:void 0,g:!0,u:function(n,r){return!(!n||!Pt(n)&&Pt(r))}}),b=h[0],w=function(n){var t=p(n)&&n.length>0&&g(n[0]),e=!t&&function(n){return"boolean"==typeof n}(n[0]),i=!1,o=!1,c=!0;if(t){var a=b(n.pop().contentRect),f=a[0],s=a[2],v=Pt(f);o=!Pt(s)&&v,c=!(i=!s||!v)}else e?c=n[1]:o=!0===n;if(u&&c){var h=e?n[0]:St(d);R(d,h?l.n?-Ot:l.i?0:Ot:Ot),H(d,Ot)}i||r({_r:!e,Rr:e?n:void 0,Mr:!!o})},y=[],m=!!a&&w;if(cn){var x=new cn(w);x.observe(s),_(y,(function(){x.disconnect()}))}else if(f){var O=f.P(s,w,a),S=O[0],L=O[1];m=S,_(y,L)}if(u){var T=i({o:!v()},v)[0];_(y,Dn(d,"scroll",(function(n){var r=T(),t=r[0];r[1]&&(hn(s,"ltr rtl"),pn(s,t?"rtl":"ltr"),w(r)),kn(n)})))}return m&&(pn(d,cr),_(y,Dn(d,"animationstart",m,{A:!!cn}))),K(n,d),function(){P(y),W(d)}},Tt=function(n,r){var t,e=$(sr),o=[],u=i({o:!1})[0],c=function(n,t){if(n){var e=u(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));if(e[1])return!t&&r(e),[e]}},a=function(n,r){if(n&&n.length>0)return c(n.pop(),r)};if(un)(t=new un((function(n){return a(n)}),{root:n})).observe(e),_(o,(function(){t.disconnect()}));else{var f=function(){var n=Cn(e);c(n)};_(o,Lt(e,f)),f()}return K(n,e),[function(){P(o),W(e)},function(){if(t)return a(t.takeRecords(),!0)}]},Et=function(n,t,e,i){var o=!1,u=i||{},c=u.Dr,a=u.Hr,f=u.Vr,l=u.jr,d=u.kr,s=u.Br,h=_n((function(){o&&e(!0)}),{_:33,p:99}),p=function(n,t,e){var i,o=!1,u=function(u){if(e){var c=e.reduce((function(r,t){if(t){var e=t[0],i=t[1],o=i&&e&&(u?u(e):k(e,n));o&&o.length&&i&&v(i)&&_(r,[o,i.trim()],!0)}return r}),[]);r(c,(function(n){return r(n[0],(function(r){var e=n[1],u=i.get(r);if(u){var c=u[0],a=u[1];c===e&&a()}var f=Dn(r,e,(function(n){o?(f(),i.delete(r)):t(n)}));i.set(r,[e,f])}))}))}};return e&&(i=new WeakMap,u()),[function(){o=!0},u]}(n,h,f),g=p[0],b=p[1],w=a||[],y=(c||[]).concat(w),m=function(o,u){var c=d||xn,a=s||xn,f=[],h=[],p=!1,g=!1,y=!1;return r(o,(function(r){var e=r.attributeName,o=r.target,u=r.type,d=r.oldValue,s=r.addedNodes,b="attributes"===u,m="childList"===u,O=n===o,S=b&&v(e)?B(o,e):0,P=0!==S&&d!==S,L=x(w,e)>-1&&P;if(t&&!O){var T=!b,E=b&&L,C=E&&l&&I(o,l),M=(C?!c(o,e,d,S):T||E)&&!a(r,!!C,n,i);_(h,s),g=g||M,y=y||m}!t&&O&&P&&!c(o,e,d,S)&&(_(f,e),p=p||L)})),y&&!S(h)&&b((function(n){return h.reduce((function(r,t){return _(r,k(n,t)),I(t,n)?_(r,t):r}),[])})),t?(!u&&g&&e(!1),[!1]):!S(f)||p?(!u&&e(f,p),[f,p]):void 0},O=new on((function(n){return m(n)}));return O.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(g(),O.disconnect(),o=!1)},function(){if(o){h.S();var n=O.takeRecords();return!S(n)&&m(n,!0)}}]},Ct="["+Wn+"]",Mt="."+rr,Bt=["tabindex"],At=["wrap","cols","rows"],jt=["id","class","style","open"],zt=function(n,t,e){var o,u,c,a=t[1],f=n.J,l=n.K,d=n.F,g=n.vr,b=n.cr,w=n.sr,y=n.dr,m=rt(),O=m.L,S=m.U,P=i({u:bn,o:{w:0,h:0}},(function(){var n=w(or,Zn);n&&y(or,Zn);var r=Bn(d),t=Bn(l),e=An(l);return n&&y(or,Zn,!0),{w:t.w+r.w+e.w,h:t.h+r.h+e.h}})),L=P[0],C=g?At:jt.concat(At),M=_n(e,{_:function(){return o},p:function(){return u},m:function(n,r){var t=n[0],e=r[0];return[T(t).concat(T(e)).reduce((function(n,r){return n[r]=t[r]||e[r],n}),{})]}}),A=function(n){r(n||Bt,(function(n){if(x(Bt,n)>-1){var r=B(f,n);v(r)?B(l,n,r):z(l,n)}}))},j=function(n,r){var t=n[0],i={hr:n[1]};return a({gr:t}),!r&&e(i),i},R=function(n){var r=n._r,t=n.Rr,i=n.Mr,o=!r||i?e:M,u=!1;if(t){var c=t[0];u=t[1],a({wr:c})}o({_r:r,br:u})},H=function(n,r){var t=L()[1],i={pr:t};return t&&!r&&(n?e:M)(i),i},D=function(n,r,t){var e={Or:r};return r?!t&&M(e):b||A(n),e},k=(d||!S)&&Tt(f,j),I=!b&&Lt(f,R,{Mr:!0,Ir:!O}),F=Et(f,!1,D,{Hr:jt,Dr:jt.concat(Bt)}),N=F[0],V=F[1],J=b&&new cn(R.bind(0,{_r:!0}));return J&&J.observe(f),A(),[function(){c&&c[0](),k&&k[0](),I&&I(),J&&J.disconnect(),N()},function(){var n={},r=V(),t=c&&c[1](),e=k&&k[1]();return r&&E(n,D.apply(0,_(r,!0))),t&&E(n,H.apply(0,_(t,!0))),e&&E(n,j.apply(0,_(e,!0))),n},function(n){var r=n("updating.ignoreMutation")[0],t=n("updating.attributes"),e=t[0],i=t[1],a=n("updating.elementEvents"),f=a[0],v=a[1],g=n("updating.debounce"),b=g[0],w=g[1],y=function(n){return h(r)&&r(n)};if((v||i)&&(c&&(c[1](),c[0]()),c=Et(d||l,!0,H,{Hr:C.concat(e||[]),Dr:C.concat(e||[]),Vr:f,jr:Ct,Br:function(n,r){var t=n.target,e=n.attributeName;return!(r||!e)&&U(t,Ct,Mt)||!!Y(t,"."+vr)||!!y(n)}})),w)if(M.S(),p(b)){var m=b[0],x=b[1];o=!!s(m)&&m,u=!!s(x)&&x}else s(b)?(o=b,u=!1):(o=!1,u=!1)}]},Rt={x:0,y:0},Ht={B:{t:0,r:0,b:0,l:0},mr:!1,D:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Er:Rt,zr:Rt,Cr:{x:"hidden",y:"hidden"},Ar:{x:!1,y:!1},gr:!1,wr:!1},Dt="touchstart mouseenter",kt="touchend touchcancel mouseleave",It=function(n,r){return Dn(n,"mousedown",Dn.bind(0,r,"click",kn,{A:!0,O:!0}),{O:!0})},Ft=function(n,t){var e=(0,rt().N)().Yr,i=t.nr,o=t.rr,u=t.J,c=t.K,a=!t.lr&&n.scrollbarsSlot,f=it([o,u,c],(function(){return u}),e,a),l=function(n,t,e){var i=e?pn:hn;r(n,(function(n){i(n.Nr,t)}))},d=[],s=[],v=[],h=l.bind(0,s),p=l.bind(0,v),g=function(n){var r=n?hr:pr,t=n?s:v,e=S(t)?mr:"",o=$(vr+" "+r+" "+e+" os-theme-dark"),u=$(gr),c=$(br),a={Nr:o,Wr:u,Gr:c};return J(o,u),J(u,c),_(t,a),_(d,[W.bind(0,o),Dn(o,Dt,(function(){h(xr,!0),p(xr,!0)})),Dn(o,kt,(function(){h(xr),p(xr)})),It(o,i)]),a},b=g.bind(0,!0),w=g.bind(0,!1);return b(),w(),[{Xr:{Zr:s,$r:b,Jr:h},Kr:{Zr:v,$r:w,Jr:p}},function(){J(f,s[0].Nr),J(f,v[0].Nr),ln((function(){h(mr),p(mr)}),300)},P.bind(0,d)]},Nt=function(n){var r,t=n?ln:fn,e=n?dn:an;return[function(i){e(r),r=t(i,h(n)?n():n)},function(){return e(r)}]},Yt=function(n,r,t){var e,i,o,u,c=0,a=Jn({})[0],f=Nt(),l=f[0],d=f[1],s=Nt(),v=s[0],h=s[1],p=Nt(100),g=p[0],b=p[1],w=Nt(100),y=w[0],m=w[1],x=Nt((function(){return c})),_=x[0],O=x[1],S=Ft(n,t.Ur),L=S[0],T=S[1],E=S[2],C=t.Ur,M=C.J,B=C.K,A=L.Xr,j=L.Kr,z=A.Jr,R=j.Jr,H=function(n,r){if(O(),n)z(_r),R(_r);else{var t=function(){z(_r,!0),R(_r,!0)};c>0&&!r?_(t):t()}},D=function(){(u=i)&&H(!0)},k=[b,O,m,h,d,E,Dn(M,"mouseover",D,{A:!0}),Dn(M,"mouseenter",D),Dn(M,"mouseleave",(function(){u=!1,i&&H(!1)})),Dn(M,"mousemove",(function(){e&&l((function(){b(),H(!0),y((function(){e&&H(!1)}))}))})),Dn(B,"scroll",(function(){o&&v((function(){H(!0),g((function(){o&&!u&&H(!1)}))}))}))],I=a.bind(0);return I.Ur=L,I.qr=T,[function(n,u,a){var f=a.Pr,l=Vn(r,n,u),d=l("scrollbars.visibility"),s=d[0],v=d[1],h=l("scrollbars.autoHide"),p=h[0],g=h[1],b=l("scrollbars.autoHideDelay")[0];l("scrollbars.dragScrolling"),l("scrollbars.touchSupport");var w=function(n,r){var t="visible"===s||"auto"===s&&"scroll"===n;return r(wr,t),t};if(c=b,f||v){var y=t().Cr,m=w(y.x,z),x=w(y.y,R),_=m&&x;z(yr,!_),R(yr,!_)}g&&(e="move"===p,i="leave"===p,H(!(o="never"!==p),!0))},I,P.bind(0,k)]},Ut=new Set,Vt=new WeakMap,Jt=function n(t,e,i){var o=!1,u=rt(),c=u.G,a=u.I,f=u.Y,l=Tr(),d=y(t)?t:t.target,s=function(n){return Vt.get(n)}(d);if(s)return s;var v=l[Nr],p=function(n){var r=n||{},t=v&&v.P;return t?t(r,!0):r},g=E({},c(),p(e)),b=Yn(i),w=b[0],m=b[1],x=b[2],_=function(n,r){var t=Vn(r,{}),e=Jn(Ht),i=Yn(),o=i[0],u=i[1],c=i[2],a=e[0],f=at(n),l=f[0],d=f[1],s=f[2],v=_t(l,e),h=function(n,r,t){var e=T(n).some((function(r){return n[r]}));(e||!C(r)||t)&&c("u",[n,r,t])},p=zt(l,e,(function(n){h(v(t,n),{},!1)})),g=p[0],b=p[1],w=p[2],y=a.bind(0);return y.Fr=function(n){o("u",n)},y.qr=d,y.Ur=l,[function(n,t){var e=Vn(r,n,t);w(e),h(v(e,b(),t),n,!!t)},y,function(){u(),g(),s()}]}(t,g),O=_[0],S=_[1],P=_[2],L=Yt(t,g,S),M=L[0],B=L[1],A=L[2],j=function(n,r){O(n,!!r)},z=f(j.bind(0,{},!0)),R=function(n){!function(n){Vt.delete(n),Ut.delete(n)}(d),z(),A(),P(),o=!0,x("destroyed",[H,!!n]),m()},H={options:function(n){if(n){var r=Pr(g,p(n));C(r)||(E(g,r),j(r))}return E({},g)},on:w,off:function(n,r){n&&r&&m(n,r)},state:function(){var n=S(),r=n.Er,t=n.zr,e=n.Cr,i=n.Ar,u=n.B,c=n.mr;return E({},{overflowEdge:r,overflowAmount:t,overflowStyle:e,hasOverflow:i,padding:u,paddingAbsolute:c,destroyed:o})},elements:function(){var n=S.Ur,r=n.rr,t=n.J,e=n.B,i=n.K,o=n.F;return E({},{target:r,host:t,padding:e||i,viewport:i,content:o||i})},update:function(n){return j({},n),H},destroy:R.bind(0)};return S.Fr((function(n,r,t){M(r,t,n)})),r(T(l),(function(r){var t=l[r];h(t)&&t(n,H)})),a.x&&a.y&&!g.nativeScrollbarsOverlaid.initialize?(R(!0),H):(S.qr(),B.qr(),function(n,r){Vt.set(n,r),Ut.add(n)}(d,H),x("initialized",[H]),S.Fr((function(n,r,t){var e=n._r,i=n.br,o=n.hr,u=n.Tr,c=n.Lr,a=n.Pr,f=n.pr,l=n.Or;x("updated",[H,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowEdgeChanged:u,overflowAmountChanged:c,overflowStyleChanged:a,contentMutation:f,hostMutation:l},changedOptions:r,force:t}])})),H.update(!0))};Jt.plugin=function(n){r(p(n)?n:[n],(function(n){r(T(n),(function(r){Lr[r]=n[r]}))}))},Jt.env=function(){var n=rt(),r=n.k,t=n.I,e=n.L,i=n.q,o=n.U,u=n.M,c=n.Z,a=n.$,f=n.N,l=n.W,d=n.G,s=n.X;return E({},{scrollbarsSize:r,scrollbarsOverlaid:t,scrollbarsHiding:e,rtlScrollBehavior:i,flexboxGlue:o,cssCustomProperties:u,defaultInitializationStrategy:c,defaultDefaultOptions:a,getInitializationStrategy:f,setInitializationStrategy:l,getDefaultOptions:d,setDefaultOptions:s})},n.OverlayScrollbars=Jt,n.optionsValidationPlugin=Yr,n.scrollbarsHidingPlugin=Gr,n.sizeObserverPlugin=Kr,Object.defineProperty(n,"v",{value:!0})})); +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars={})}(this,(function(n){"use strict";function r(n,t){if(b(n))for(var e=0;e-1&&r%1==0;return!(!(p(n)||!h(n)&&t)||r>0&&g(n)&&!(r-1 in n))},w=function(n){if(!n||!g(n)||"object"!==d(n))return!1;var r,t="constructor",e=n[t],i=e&&e.prototype,o=a.call(n,t),u=i&&a.call(i,"isPrototypeOf");if(e&&!o&&!u)return!1;for(r in n);return f(r)||a.call(n,r)},y=function(n){var r=HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===o)},m=function(n){var r=Element;return!!n&&(r?n instanceof r:n.nodeType===o)},x=function(n,r,t){return n.indexOf(r,t)},_=function(n,r,t){return t||v(r)||!b(r)?n.push(r):Array.prototype.push.apply(n,r),n},O=function(n){var t=Array.from,e=[];return t&&n?t(n):(n instanceof Set?n.forEach((function(n){_(e,n)})):r(n,(function(n){_(e,n)})),e)},S=function(n){return!!n&&0===n.length},P=function(n,t,e){r(n,(function(n){return n&&n.apply(void 0,t||[])})),!e&&(n.length=0)},L=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},T=function(n){return n?Object.keys(n):[]},E=function n(t,e,i,o,u,c,a){var f=[e,i,o,u,c,a];return"object"==typeof t&&!l(t)||h(t)||(t={}),r(f,(function(e){r(T(e),(function(r){var i=e[r];if(t===i)return!0;var o=p(i);if(i&&(w(i)||o)){var u=t[r],c=u;o&&!p(u)?c=[]:o||w(u)||(c={}),t[r]=n(c,i)}else t[r]=i}))})),t},C=function(n){for(var r in n)return!1;return!0},M=function(n,r,t,e){if(f(e))return t?t[n]:r;t&&!l(e)&&!1!==e&&(t[n]=e)},z=function(n,r,t){if(f(t))return n?n.getAttribute(r):null;n&&n.setAttribute(r,t)},A=function(n,r,t,e){if(t){var i=z(n,r)||"",o=new Set(i.split(" "));o[e?"add":"delete"](t),z(n,r,O(o).join(" ").trim())}},j=function(n,r,t){var e=z(n,r)||"";return new Set(e.split(" ")).has(t)},R=function(n,r){n&&n.removeAttribute(r)},H=function(n,r){return M("scrollLeft",0,n,r)},D=function(n,r){return M("scrollTop",0,n,r)},k=Element.prototype,B=function(n,r){var t=[],e=r?m(r)?r:null:document;return e?_(t,e.querySelectorAll(n)):t},Y=function(n,r){return!!m(n)&&(k.matches||k.msMatchesSelector).call(n,r)},F=function(n){return n?O(n.childNodes):[]},I=function(n){return n?n.parentElement:null},V=function(n,r){if(m(n)){var t=k.closest;if(t)return t.call(n,r);do{if(Y(n,r))return n;n=I(n)}while(n)}return null},J=function(n,r,t){var e=n&&V(n,r),i=n&&function(n,r){var t=r?m(r)?r:null:document;return t?t.querySelector(n):null}(t,e);return!(!e||!i||e!==n&&i!==n&&V(V(n,t),r)===e)},$=function(n,t,e){if(e){var i,o=t;n&&(b(e)?(i=document.createDocumentFragment(),r(e,(function(n){n===o&&(o=n.previousSibling),i.appendChild(n)}))):i=e,t&&(o?o!==t&&(o=o.nextSibling):o=n.firstChild),n.insertBefore(i,o||null))}},K=function(n,r){$(n,null,r)},N=function(n,r){$(n,n&&n.firstChild,r)},U=function(n,r){$(I(n),n,r)},X=function(n,r){$(I(n),n&&n.nextSibling,r)},W=function n(t){if(b(t))r(O(t),(function(r){return n(r)}));else if(t){var e=I(t);e&&e.removeChild(t)}},q=function(n){var r=document.createElement("div");return n&&z(r,"class",n),r},Z=function(n){var t=q();return t.innerHTML=n.trim(),r(F(t),(function(n){return W(n)}))},G=function(n){return n.charAt(0).toUpperCase()+n.slice(1)},Q=["-webkit-","-moz-","-o-","-ms-"],nn=["WebKit","Moz","O","MS","webkit","moz","o","ms"],rn={},tn={},en=function(n){var t=rn[n]||window[n];return L(rn,n)||(r(nn,(function(r){return!(t=t||window[r+G(n)])})),rn[n]=t),t},on=en("MutationObserver"),un=en("IntersectionObserver"),cn=en("ResizeObserver"),an=en("cancelAnimationFrame"),fn=en("requestAnimationFrame"),ln=window.setTimeout,dn=window.clearTimeout,sn=/[^\x20\t\r\n\f]+/g,vn=function(n,r,t){var e,i=n&&n.classList,o=0,u=!1;if(i&&r&&v(r)){var c=r.match(sn)||[];for(u=c.length>0;e=c[o++];)u=!!t(i,e)&&u}return u},hn=function(n,r){vn(n,r,(function(n,r){return n.remove(r)}))},pn=function(n,r){return vn(n,r,(function(n,r){return n.add(r)})),hn.bind(0,n,r)},gn=function(n,t,e,i){if(n&&t){var o=!0;return r(e,(function(r){(i?i(n[r]):n[r])!==(i?i(t[r]):t[r])&&(o=!1)})),o}return!1},bn=function(n,r){return gn(n,r,["w","h"])},wn=function(n,r){return gn(n,r,["x","y"])},yn=function(n,r){return gn(n,r,["t","r","b","l"])},mn=function(n,r,t){return gn(n,r,["width","height"],t&&function(n){return Math.round(n)})},xn=function(){},_n=function(n,r){var t,e,i,o=xn,u=r||{},c=u._,a=u.p,f=u.m,l=function(r){o(),dn(t),t=e=void 0,o=xn,n.apply(this,r)},d=function(n){return f&&e?f(e,n):n},v=function(){o!==xn&&l(d(i)||i)},p=function(){var n=O(arguments),r=h(c)?c():c,u=s(r)&&r>=0;if(u){var f=h(a)?a():a,p=s(f)&&f>=0,g=r>0?ln:fn,b=r>0?dn:an,w=d(n),y=w||n,m=l.bind(0,y);o();var x=g(m,r);o=function(){return b(x)},p&&!t&&(t=ln(v,f)),e=i=y}else l(n)};return p.S=v,p},On={opacity:1,zindex:1},Sn=function(n,r){var t=r?parseFloat(n):parseInt(n,10);return t==t?t:0},Pn=function(n,r,t){return null!=r?r[t]||r.getPropertyValue(t):n.style[t]},Ln=function(n,r,t){try{if(n){var e=n.style;f(e[r])?e.setProperty(r,t):e[r]=function(n,r){return!On[n.toLowerCase()]&&s(r)?r+"px":r}(r,t)}}catch(c){}},Tn=function(n,r,e){var i=r?r+"-":"",o=e?"-"+e:"",u=i+"top"+o,c=i+"right"+o,a=i+"bottom"+o,f=i+"left"+o,l=t(n,[u,c,a,f]);return{t:Sn(l[u]),r:Sn(l[c]),b:Sn(l[a]),l:Sn(l[f])}},En={w:0,h:0},Cn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:En},Mn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:En},zn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:En},An=function(n){var r=parseFloat(t(n,"height"))||0,e=parseFloat(t(n,"height"))||0;return{w:e-Math.round(e),h:r-Math.round(r)}},jn=function(n){return n.getBoundingClientRect()},Rn=function(){if(f(e)){e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(n){}}return e},Hn=function(n){return n.split(" ")},Dn=function(n,t,e,i){r(Hn(t),(function(r){n.removeEventListener(r,e,i)}))},kn=function(n,t,e,i){var o,u=Rn(),c=null!=(o=u&&i&&i.C)?o:u,a=i&&i.O||!1,f=i&&i.A||!1,l=[],d=u?{passive:c,capture:a}:a;return r(Hn(t),(function(r){var t=f?function(i){n.removeEventListener(r,t,a),e&&e(i)}:e;_(l,Dn.bind(null,n,r,t,a)),n.addEventListener(r,t,d)})),P.bind(0,l)},Bn=function(n){return n.stopPropagation()},Yn={x:0,y:0},Fn=function(n){var r=n?jn(n):0;return r?{x:r.left+window.pageYOffset,y:r.top+window.pageXOffset}:Yn},In=function(n,t){r(p(t)?t:[t],n)},Vn=function(n){var t=new Map,e=function(n,r){if(n){var e=t.get(n);In((function(n){e&&e[n?"delete":"clear"](n)}),r)}else t.forEach((function(n){n.clear()})),t.clear()},i=function(n,r){var i=t.get(n)||new Set;return t.set(n,i),In((function(n){n&&i.add(n)}),r),e.bind(0,n,r)};return r(T(n),(function(r){i(r,n[r])})),[i,e,function(n,e){var i=t.get(n);r(O(i),(function(n){e&&!S(e)?n.apply(0,e):n()}))}]},Jn=function(n,r){return n?r.split(".").reduce((function(n,r){return n&&L(n,r)?n[r]:void 0}),n):void 0},$n=function(n,r,t){return function(e){return[Jn(n,e),t||void 0!==Jn(r,e)]}},Kn=function(n){var r=n;return[function(){return r},function(n){r=E({},r,n)}]},Nn="os-environment",Un=Nn+"-flexbox-glue",Xn=Un+"-max",Wn="data-overlayscrollbars",qn=Wn+"-overflow-x",Zn=Wn+"-overflow-y",Gn="overflowVisible",Qn="viewportStyled",nr="os-padding",rr="os-viewport",tr=rr+"-arrange",er="os-content",ir=rr+"-scrollbar-styled",or="os-overflow-visible",ur="os-size-observer",cr=ur+"-appear",ar=ur+"-listener",fr=ar+"-scroll",lr=ar+"-item",dr=lr+"-final",sr="os-trinsic-observer",vr="os-scrollbar",hr=vr+"-horizontal",pr=vr+"-vertical",gr="os-scrollbar-track",br="os-scrollbar-handle",wr=vr+"-visible",yr=vr+"-cornerless",mr=vr+"-transitionless",xr=vr+"-interaction",_r=vr+"-auto-hidden",Or=function(n){return JSON.stringify(n,(function(n,r){if(h(r))throw new Error;return r}))},Sr={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},Pr=function n(t,e){var i={};return r(T(e).concat(T(t)),(function(r){var o=t[r],u=e[r];if(g(o)&&g(u))E(i[r]={},n(o,u));else if(L(e,r)&&u!==o){var c=!0;if(p(o)||p(u))try{Or(o)===Or(u)&&(c=!1)}catch(l){}c&&(i[r]=u)}})),i},Lr={},Tr=function(){return E({},Lr)},Er={exports:{}};!function(n){function r(){return n.exports=r=Object.assign?Object.assign.bind():function(n){for(var r=1;r0?"\r\nValid strings are: [ "+O.join(", ")+" ].":"")),delete c[a]}})),[u,c]},Dr=function(n,r,t){return Hr(n,r,t)},kr=Rr.boolean,Br=[Rr.array,Rr.null],Yr="hidden scroll visible visible-hidden",Fr={paddingAbsolute:kr,updating:{elementEvents:Br,attributes:Br,debounce:[Rr.number,Rr.array,Rr.null],ignoreMutation:[Rr.function,Rr.null]},overflow:{x:Yr,y:Yr},scrollbars:{theme:[Rr.string,Rr.null],visibility:"visible hidden auto",autoHide:"never scroll leavemove",autoHideDelay:Rr.number,dragScroll:kr,clickScroll:kr,touch:kr},nativeScrollbarsOverlaid:{show:kr,initialize:kr}},Ir="__osOptionsValidationPlugin",Vr=((Cr={})[Ir]={P:function(n,r){var t=Dr(Fr,n,r),e=t[0],i=t[1];return jr({},i,e)}},Cr),Jr=3333333,$r="scroll",Kr="__osSizeObserverPlugin",Nr=((Mr={})[Kr]={P:function(n,r,e){var i=Z('
');K(n,i),pn(n,fr);var o,u=i[0],c=u.lastChild,a=u.firstChild,f=null==a?void 0:a.firstChild,l=Cn(u),d=l,s=!1,v=function(){H(a,Jr),D(a,Jr),H(c,Jr),D(c,Jr)},h=function(n){o=0,s&&(l=d,r(!0===n))},p=function(n){d=Cn(u),s=!n||!bn(d,l),n?(Bn(n),s&&!o&&(an(o),o=fn(h))):h(!1===n),v()},g=_([],[kn(a,$r,p),kn(c,$r,p)]);return t(f,{width:Jr,height:Jr}),v(),[e?p.bind(0,!1):v,g]}},Mr),Ur=0,Xr=Math.round,Wr=Math.abs,qr="__osScrollbarsHidingPlugin",Zr=((zr={})[qr]={T:function(n){var r=n.L,t=n.M,e=!(n.I||r||!t.x&&!t.y)&&document.createElement("style");return e&&(z(e,"id",tr+"-"+Ur),Ur++),e},R:function(n,e,i,o,u,c,a){return[function(r,e,c,a){if(n){var f=u().D,l=r.H,d=r.V,s=d.x,v=d.y,h=l.x,p=l.y,g=f[a?"paddingRight":"paddingLeft"],b=f.paddingTop,w=e.w+c.w,y=e.h+c.h,m={w:p&&v?p+w-g+"px":"",h:h&&s?h+y-b+"px":""};if(o){var x=o.sheet;if(x){var _=x.cssRules;if(_){_.length||x.insertRule("#"+z(o,"id")+" + ."+tr+"::before {}",0);var O=_[0].style;O.width=m.w,O.height=m.h}}}else t(i,{"--os-vaw":m.w,"--os-vah":m.h})}return n},function(o,f,l){if(n){var d=l||c(o),s=u().D,v=d.V,h=v.x,p=v.y,g={},b=function(n){return r(n.split(" "),(function(n){g[n]=s[n]}))};h&&b("marginBottom paddingTop paddingBottom"),p&&b("marginLeft marginRight paddingLeft paddingRight");var w=t(i,T(g));return hn(i,tr),e||(g.height=""),t(i,g),[function(){a(d,f,n,w),t(i,w),pn(i,tr)},d]}return[xn]}]},j:function(){var n={w:0,h:0},r=0;return function(t,e,i){var o={w:window.innerWidth,h:window.innerHeight},u={w:o.w-n.w,h:o.h-n.h};if(0!==u.w||0!==u.h){var c=Wr(u.w),a=Wr(u.h),f={w:Wr(Xr(o.w/(n.w/100))),h:Wr(Xr(o.h/(n.h/100)))},l=function(){var n=window.screen.deviceXDPI||0,r=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/r}(),d=c>2&&a>2,s=!function(n,r){var t=Wr(n),e=Wr(r);return!(t===e||t+1===e||t-1===e)}(f.w,f.h);if(d&&s&&l!==r&&l>0){var v=e(),h=v[0],p=v[1];E(t.k,h),p&&i()}n=o,r=l}}}},zr),Gr=function(n,r,t,e){K(n,r);var i=Mn(r),o=Cn(r),u=An(t);return e&&W(r),{x:o.h-i.h+u.h,y:o.w-i.w+u.w}},Qr=function(n,r){var e="hidden";t(n,{overflowX:e,overflowY:e,direction:"rtl"}),H(n,0);var i=Fn(n),o=Fn(r);H(n,-999);var u=Fn(r);return{i:i.x===o.x,n:o.x!==u.x}},nt=function(n,r){var t=pn(n,Un),e=jn(n),i=jn(r),o=mn(i,e,!0),u=pn(n,Xn),c=jn(n),a=jn(r),f=mn(a,c,!0);return t(),u(),o&&f},rt=function(){return Ar||(Ar=function(){var n,e=document.body,o=Z('
')[0],c=o.firstChild,a=Vn(),f=a[0],l=a[2],d=i({o:Gr(e,o,c),u:wn},Gr.bind(0,e,o,c,!0)),s=d[0],v=(0,d[1])()[0],h=function(n){var e=!1,i=pn(n,ir);try{e="none"===t(n,function(n){var t=tn[n];if(L(tn,n))return t;var e=G(n),i=q().style;return r(Q,(function(r){var o=r.replace(/-/g,""),u=[n,r+n,o+e,G(o)+e];return!(t=u.find((function(n){return void 0!==i[n]})))})),tn[n]=t||""}("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(u){}return i(),e}(o),p={x:0===v.x,y:0===v.y},g={padding:!h,content:!1},b=E({},Sr),w={k:v,M:p,L:h,I:"-1"===t(o,"zIndex"),B:Qr(o,c),F:nt(o,c),q:function(n){return f("_",n)},U:E.bind(0,{},g),Y:function(n){E(g,n)},N:E.bind(0,{},b),W:function(n){E(b,n)},G:E({},g),X:E({},b)};return R(o,"style"),W(o),h||p.x&&p.y||window.addEventListener("resize",(function(){var r=Tr()[qr];(n=n||r&&r.j())&&n(w,s,l.bind(0,"_"))})),w}()),Ar},tt=function(n,r){return h(n)?n.apply(0,r):n},et=function(n,r,t,e){return tt(e||tt(t,n),n)||r.apply(0,n)},it=function(n,r,t,e){var i=tt(e,n);return(l(i)||f(i))&&(i=tt(t,n)),!0===i||l(i)||f(i)?r.apply(0,n):i},ot=q.bind(0,""),ut=function(n){K(I(n),F(n)),W(n)},ct=function(n,r){return z(n,Wn,r),R.bind(0,n,Wn)},at=function(n){var r=rt(),t=r.U,e=r.L,i=Tr()[qr],o=i&&i.T,u=t(),c=u.host,a=u.viewport,f=u.padding,l=u.content,d=y(n),s=n,v=d?n:s.target,h=Y(v,"textarea"),p=!h&&Y(v,"body"),g=v.ownerDocument,b=g.body,w=g.defaultView,m=!!cn&&!h&&e,O=et.bind(0,[v]),S=it.bind(0,[v]),L=[O(ot,a,s.viewport),O(ot,a),O(ot)].filter((function(n){return!!m||n!==v}))[0],E=L===v,C={Z:v,$:h?O(ot,c,s.host):v,J:L,K:!E&&S(ot,f,s.padding),rr:!E&&S(ot,l,s.content),ar:!E&&!e&&o&&o(r),er:w,nr:g,tr:I(b),ir:b,vr:h,ur:p,lr:d,cr:E,sr:function(n,r){return E?j(L,Wn,r):function(n,r){return vn(n,r,(function(n,r){return n.contains(r)}))}(L,n)},dr:function(n,r,t){return E?A(L,Wn,r,t):(t?pn:hn)(L,n)}},M=T(C).reduce((function(n,r){var t=C[r];return _(n,!(!t||I(t))&&t)}),[]),z=function(n){return n?x(M,n)>-1:null},H=C.Z,D=C.$,k=C.K,B=C.J,V=C.rr,J=C.ar,$=[],N=h&&z(D),q=h?H:F([V,B,k,D,H].find((function(n){return!1===z(n)}))),Z=V||B;return[C,function(){var n=ct(D,E?"viewport":"host"),r=pn(k,nr),t=pn(B,!E&&rr),i=pn(V,er);N&&(X(H,D),_($,(function(){X(D,H),W(D)}))),K(Z,q),K(D,k),K(k||D,!E&&B),K(B,V),_($,(function(){n(),R(B,qn),R(B,Zn),z(V)&&ut(V),z(B)&&ut(B),z(k)&&ut(k),r(),t(),i()})),e&&!E&&_($,hn.bind(0,B,ir)),J&&(U(B,J),_($,W.bind(0,J)))},P.bind(0,$)]},ft=function(n,r){var e=n.rr,i=r[0];return function(n){var r=rt().F,o=i().gr,u=n.hr,c=(e||!r)&&u;return c&&t(e,{height:o?"":"100%"}),{_r:c,pr:c}}},lt=function(n,r){var e=r[0],o=r[1],u=n.$,c=n.K,a=n.J,f=n.cr,l=i({u:yn,o:Tn()},Tn.bind(0,u,"padding","")),d=l[0],s=l[1];return function(n,r,i){var u=s(i),l=u[0],v=u[1],h=rt(),p=h.L,g=h.F,b=e().wr,w=n._r,y=n.pr,m=n.br,x=r("paddingAbsolute"),_=x[0],O=x[1];if(w||v||!g&&y){var S=d(i);l=S[0],v=S[1]}var P=!f&&(O||m||v);if(P){var L=!_||!c&&!p,T=l.r+l.l,C=l.t+l.b,M={marginRight:L&&!b?-T:0,marginBottom:L?-C:0,marginLeft:L&&b?-T:0,top:L?-l.t:0,right:L?b?-l.r:"auto":0,left:L?b?"auto":-l.l:0,width:L?"calc(100% + "+T+"px)":""},z={paddingTop:L?l.t:0,paddingRight:L?l.r:0,paddingBottom:L?l.b:0,paddingLeft:L?l.l:0};t(c||a,M),t(a,z),o({K:l,mr:!L,D:c?z:E({},M,z)})}return{yr:P}}},dt=Math.max,st=dt.bind(0,0),vt="visible",ht="hidden",pt=42,gt={u:bn,o:{w:0,h:0}},bt={u:wn,o:{x:ht,y:ht}},wt=function(n,r,t){return t?pn(n,r):hn(n,r)},yt=function(n){return 0===n.indexOf(vt)},mt=function(n,r){var e=r[0],o=r[1],u=n.$,c=n.K,a=n.J,f=n.ar,l=n.cr,d=n.dr,s=rt(),v=s.k,h=s.F,p=s.L,g=s.M,b=Tr()[qr],w=!l&&!p&&(g.x||g.y),y=i(gt,An.bind(0,a)),m=y[0],x=y[1],_=i(gt,zn.bind(0,a)),O=_[0],S=_[1],P=i(gt),L=P[0],T=P[1],E=i(gt),C=E[0],M=E[1],j=i(bt)[0],R=function(n,r){if(t(a,{height:""}),r){var i=e(),o=i.mr,c=i.K,f=n.Sr,l=n.H,d=An(u),s=Mn(u),v="content-box"===t(a,"boxSizing"),h=o||v?c.b+c.t:0,p=!(g.x&&v);t(a,{height:s.h+d.h+(f.x&&p?l.x:0)-h})}},H=function(n,r){var e=p||n?0:pt,i=function(n,i,o){var u=t(a,n),c="scroll"===(r?r[n]:u);return[u,c,c&&!p?i?e:o:0,i&&!!e]},o=i("overflowX",g.x,v.x),u=o[0],c=o[1],f=o[2],l=o[3],d=i("overflowY",g.y,v.y);return{Cr:{x:u,y:d[0]},Sr:{x:c,y:d[1]},H:{x:f,y:d[2]},V:{x:l,y:d[3]}}},D=function(n,r,t,i){var o=n.H,u=n.V,c=u.x,a=u.y,f=o.x,l=o.y,d=e().D,s=r?"marginLeft":"marginRight",v=r?"paddingLeft":"paddingRight",h=d[s],p=d.marginBottom,g=d[v],b=d.paddingBottom;i.width="calc(100% + "+(l+-1*h)+"px)",i[s]=-l+h,i.marginBottom=-f+p,t&&(i[v]=g+(a?l:0),i.paddingBottom=b+(c?f:0))},k=b?b.R(w,h,a,f,e,H,D):[function(){return w},function(){return[xn]}],B=k[0],Y=k[1];return function(n,r,i){var f,s=n._r,v=n.Or,b=n.pr,w=n.yr,y=n.hr,_=n.br,P=e(),E=P.gr,k=P.wr,F=r("nativeScrollbarsOverlaid.show"),I=F[0],V=F[1],J=r("overflow"),$=J[0],K=J[1],N=I&&g.x&&g.y,U=!l&&!h&&(s||b||v||V||y),X=yt($.x),W=yt($.y),q=X||W,Z=x(i),G=S(i),Q=T(i),nn=M(i);if(V&&p&&d(ir,Qn,!N),U&&(f=H(N),R(f,E)),s||w||b||_||V){q&&d(or,Gn,!1);var rn=Y(N,k,f),tn=rn[0],en=rn[1],on=Z=m(i),un=on[0],cn=on[1],an=G=O(i),fn=an[0],ln=an[1],dn=Mn(a),sn=fn,vn=dn;tn(),(ln||cn||V)&&en&&!N&&B(en,fn,un,k)&&(vn=Mn(a),sn=zn(a));var hn={w:st(dt(fn.w,sn.w)+un.w),h:st(dt(fn.h,sn.h)+un.h)},pn={w:st(vn.w+st(dn.w-fn.w)+un.w),h:st(vn.h+st(dn.h-fn.h)+un.h)};nn=C(pn),Q=L(function(n,r){var t=window.devicePixelRatio%1!=0?1:0,e={w:st(n.w-r.w),h:st(n.h-r.h)};return{w:e.w>t?e.w:0,h:e.h>t?e.h:0}}(hn,pn),i)}var gn=nn,bn=gn[0],wn=gn[1],yn=Q,mn=yn[0],xn=yn[1],_n=G,On=_n[0],Sn=_n[1],Pn=Z,Ln=Pn[0],Tn=Pn[1],En={x:mn.w>0,y:mn.h>0},Cn=X&&W&&(En.x||En.y)||X&&En.x&&!En.y||W&&En.y&&!En.x;if(w||_||Tn||Sn||wn||xn||K||V||U){var An={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},jn=function(n,r,t,e){var i=function(n,r){var t=yt(n),e=r&&t&&n.replace(vt+"-","")||"";return[r&&!t?n:"",yt(e)?"hidden":e]},o=i(t.x,r.x),u=o[0],c=o[1],a=i(t.y,r.y),f=a[0],l=a[1];return e.overflowX=c&&f?c:u,e.overflowY=l&&u?l:f,H(n,e)}(N,En,$,An),Rn=B(jn,On,Ln,k);l||D(jn,k,Rn,An),U&&R(jn,E),l?(z(u,qn,An.overflowX),z(u,Zn,An.overflowY)):t(a,An)}A(u,Wn,Gn,Cn),wt(c,or,Cn),!l&&wt(a,or,q);var Hn=j(H(N).Cr),Dn=Hn[0],kn=Hn[1];return o({Cr:Dn,Er:{x:bn.w,y:bn.h},zr:{x:mn.w,y:mn.h},Ar:En}),{Pr:kn,Tr:wn,Lr:xn}}},xt=function(n,t,e){var i={},o=t||{};return r(T(n).concat(T(o)),(function(r){var t=n[r],u=o[r];i[r]=!!(e||t||u)})),i},_t=3333333,Ot=function(n){return"rtl"===t(n,"direction")},St=function(n){return n&&(n.height||n.width)},Pt=function(n,r,t){var e=t||{},o=e.Mr,u=void 0!==o&&o,c=e.Ir,a=void 0!==c&&c,f=Tr()[Kr],l=rt().B,d=Z('
')[0],s=d.firstChild,v=Ot.bind(0,d),h=i({o:void 0,g:!0,u:function(n,r){return!(!n||!St(n)&&St(r))}}),b=h[0],w=function(n){var t=p(n)&&n.length>0&&g(n[0]),e=!t&&function(n){return"boolean"==typeof n}(n[0]),i=!1,o=!1,c=!0;if(t){var a=b(n.pop().contentRect),f=a[0],s=a[2],v=St(f);o=!St(s)&&v,c=!(i=!s||!v)}else e?c=n[1]:o=!0===n;if(u&&c){var h=e?n[0]:Ot(d);H(d,h?l.n?-_t:l.i?0:_t:_t),D(d,_t)}i||r({_r:!e,Rr:e?n:void 0,Ir:!!o})},y=[],m=!!a&&w;if(cn){var x=new cn(w);x.observe(s),_(y,(function(){x.disconnect()}))}else if(f){var O=f.P(s,w,a),S=O[0],L=O[1];m=S,_(y,L)}if(u){var T=i({o:!v()},v)[0];_(y,kn(d,"scroll",(function(n){var r=T(),t=r[0];r[1]&&(hn(s,"ltr rtl"),pn(s,t?"rtl":"ltr"),w(r)),Bn(n)})))}return m&&(pn(d,cr),_(y,kn(d,"animationstart",m,{A:!!cn}))),N(n,d),function(){P(y),W(d)}},Lt=function(n,r){var t,e=q(sr),o=[],u=i({o:!1})[0],c=function(n,t){if(n){var e=u(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));if(e[1])return!t&&r(e),[e]}},a=function(n,r){if(n&&n.length>0)return c(n.pop(),r)};if(un)(t=new un((function(n){return a(n)}),{root:n})).observe(e),_(o,(function(){t.disconnect()}));else{var f=function(){var n=Cn(e);c(n)};_(o,Pt(e,f)),f()}return N(n,e),[function(){P(o),W(e)},function(){if(t)return a(t.takeRecords(),!0)}]},Tt=function(n,t,e,i){var o=!1,u=i||{},c=u.Dr,a=u.Hr,f=u.Vr,l=u.jr,d=u.kr,s=u.Br,h=_n((function(){o&&e(!0)}),{_:33,p:99}),p=function(n,t,e){var i,o=!1,u=function(u){if(e){var c=e.reduce((function(r,t){if(t){var e=t[0],i=t[1],o=i&&e&&(u?u(e):B(e,n));o&&o.length&&i&&v(i)&&_(r,[o,i.trim()],!0)}return r}),[]);r(c,(function(n){return r(n[0],(function(r){var e=n[1],u=i.get(r);if(u){var c=u[0],a=u[1];c===e&&a()}var f=kn(r,e,(function(n){o?(f(),i.delete(r)):t(n)}));i.set(r,[e,f])}))}))}};return e&&(i=new WeakMap,u()),[function(){o=!0},u]}(n,h,f),g=p[0],b=p[1],w=a||[],y=(c||[]).concat(w),m=function(o,u){var c=d||xn,a=s||xn,f=[],h=[],p=!1,g=!1,y=!1;return r(o,(function(r){var e=r.attributeName,o=r.target,u=r.type,d=r.oldValue,s=r.addedNodes,b="attributes"===u,m="childList"===u,O=n===o,S=b&&v(e)?z(o,e):0,P=0!==S&&d!==S,L=x(w,e)>-1&&P;if(t&&!O){var T=!b,E=b&&L,C=E&&l&&Y(o,l),M=(C?!c(o,e,d,S):T||E)&&!a(r,!!C,n,i);_(h,s),g=g||M,y=y||m}!t&&O&&P&&!c(o,e,d,S)&&(_(f,e),p=p||L)})),y&&!S(h)&&b((function(n){return h.reduce((function(r,t){return _(r,B(n,t)),Y(t,n)?_(r,t):r}),[])})),t?(!u&&g&&e(!1),[!1]):!S(f)||p?(!u&&e(f,p),[f,p]):void 0},O=new on((function(n){return m(n)}));return O.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(g(),O.disconnect(),o=!1)},function(){if(o){h.S();var n=O.takeRecords();return!S(n)&&m(n,!0)}}]},Et="["+Wn+"]",Ct="."+rr,Mt=["tabindex"],zt=["wrap","cols","rows"],At=["id","class","style","open"],jt=function(n,t,e){var o,u,c,a=t[1],f=n.$,l=n.J,d=n.rr,g=n.vr,b=n.cr,w=n.sr,y=n.dr,m=rt(),O=m.L,S=m.F,P=i({u:bn,o:{w:0,h:0}},(function(){var n=w(or,Gn),r=w(tr,""),t=r&&H(l),e=r&&D(l);y(or,Gn),y(tr,"");var i=zn(d),o=zn(l),u=An(l);return y(or,Gn,n),y(tr,"",r),H(l,t),D(l,e),{w:o.w+i.w+u.w,h:o.h+i.h+u.h}})),L=P[0],C=g?zt:At.concat(zt),M=_n(e,{_:function(){return o},p:function(){return u},m:function(n,r){var t=n[0],e=r[0];return[T(t).concat(T(e)).reduce((function(n,r){return n[r]=t[r]||e[r],n}),{})]}}),A=function(n){r(n||Mt,(function(n){if(x(Mt,n)>-1){var r=z(f,n);v(r)?z(l,n,r):R(l,n)}}))},j=function(n,r){var t=n[0],i={hr:n[1]};return a({gr:t}),!r&&e(i),i},k=function(n){var r=n._r,t=n.Rr,i=n.Ir,o=!r||i?e:M,u=!1;if(t){var c=t[0];u=t[1],a({wr:c})}o({_r:r,br:u})},B=function(n,r){var t=L()[1],i={pr:t};return t&&!r&&(n?e:M)(i),i},Y=function(n,r,t){var e={Or:r};return r?!t&&M(e):b||A(n),e},F=(d||!S)&&Lt(f,j),I=!b&&Pt(f,k,{Ir:!0,Mr:!O}),$=Tt(f,!1,Y,{Hr:At,Dr:At.concat(Mt)}),K=$[0],N=$[1],U=b&&new cn(k.bind(0,{_r:!0}));return U&&U.observe(f),A(),[function(){c&&c[0](),F&&F[0](),I&&I(),U&&U.disconnect(),K()},function(){var n={},r=N(),t=c&&c[1](),e=F&&F[1]();return r&&E(n,Y.apply(0,_(r,!0))),t&&E(n,B.apply(0,_(t,!0))),e&&E(n,j.apply(0,_(e,!0))),n},function(n){var r=n("updating.ignoreMutation")[0],t=n("updating.attributes"),e=t[0],i=t[1],a=n("updating.elementEvents"),f=a[0],v=a[1],g=n("updating.debounce"),b=g[0],w=g[1],y=function(n){return h(r)&&r(n)};if((v||i)&&(c&&(c[1](),c[0]()),c=Tt(d||l,!0,B,{Hr:C.concat(e||[]),Dr:C.concat(e||[]),Vr:f,jr:Et,Br:function(n,r){var t=n.target,e=n.attributeName;return!(r||!e)&&J(t,Et,Ct)||!!V(t,"."+vr)||!!y(n)}})),w)if(M.S(),p(b)){var m=b[0],x=b[1];o=!!s(m)&&m,u=!!s(x)&&x}else s(b)?(o=b,u=!1):(o=!1,u=!1)}]},Rt={x:0,y:0},Ht={K:{t:0,r:0,b:0,l:0},mr:!1,D:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Er:Rt,zr:Rt,Cr:{x:"hidden",y:"hidden"},Ar:{x:!1,y:!1},gr:!1,wr:!1},Dt=function(n,t){var e=$n(t,{}),i=Kn(Ht),o=Vn(),u=o[0],c=o[1],a=o[2],f=i[0],l=at(n),d=l[0],s=l[1],v=l[2],h=function(n,t){var e=n.J,i=rt(),o=i.L,u=i.M,c=i.F,a=!o&&(u.x||u.y),f=[ft(n,t),lt(n,t),mt(n,t)];return function(n,t,i){var o=xt(E({_r:!1,yr:!1,br:!1,hr:!1,Tr:!1,Lr:!1,Pr:!1,Or:!1,pr:!1},t),{},i),u=a||!c,l=u&&H(e),d=u&&D(e),s=o;return r(f,(function(r){s=xt(s,r(s,n,!!i)||{},i)})),H(e,l),D(e,d),s}}(d,i),p=function(n,r,t){var e=T(n).some((function(r){return n[r]}));(e||!C(r)||t)&&a("u",[n,r,t])},g=jt(d,i,(function(n){p(h(e,n),{},!1)})),b=g[0],w=g[1],y=g[2],m=f.bind(0);return m.Fr=function(n){u("u",n)},m.qr=s,m.Ur=d,[function(n,r){var e=$n(t,n,r);y(e),p(h(e,w(),r),n,!!r)},m,function(){c(),b(),v()}]},kt="touchstart mouseenter",Bt="touchend touchcancel mouseleave",Yt=function(n,r){return kn(n,"mousedown",kn.bind(0,r,"click",Bn,{A:!0,O:!0}),{O:!0})},Ft=function(n,e){var i=(0,rt().U)().scrollbarsSlot,o=e.nr,u=e.Z,c=e.$,a=e.J,f=e.lr?null:n.scrollbarsSlot,l=it([u,c,a],(function(){return c}),i,f),d=function(n,t,e,i){var o=e?pn:hn;r(n,(function(n){o((i||xn)(n)||n.Yr,t)}))},s=function(n,e){r(n,(function(n){var r=e(n);t(r[0],r[1])}))},v=[],h=[],p=[],g=d.bind(0,h),b=d.bind(0,p),w=function(n){var r=n?hr:pr,t=n?h:p,e=S(t)?mr:"",i=q(vr+" "+r+" "+e),u=q(gr),c=q(br),a={Yr:i,Nr:u,Wr:c};return K(i,u),K(u,c),_(t,a),_(v,[W.bind(0,i),kn(i,kt,(function(){g(xr,!0),b(xr,!0)})),kn(i,Bt,(function(){g(xr),b(xr)})),Yt(i,o)]),a},y=w.bind(0,!0),m=w.bind(0,!1);return y(),m(),[{Gr:{Xr:h,Zr:y,$r:g,Jr:s.bind(0,h)},Kr:{Xr:p,Zr:m,$r:b,Jr:s.bind(0,p)}},function(){K(l,h[0].Yr),K(l,p[0].Yr),ln((function(){g(mr),b(mr)}),300)},P.bind(0,v)]},It=Math.min,Vt=function(n){var r,t=n?ln:fn,e=n?dn:an;return[function(i){e(r),r=t(i,h(n)?n():n)},function(){return e(r)}]},Jt=function(n,r,t){var e=r.zr,i=r.Er,o=t?"x":"y",u=i[o],c=e[o],a=It(1,u/(u+c));n((function(n){var r;return[n.Wr,(r={},r[t?"width":"height"]=(100*a).toFixed(3)+"%",r)]}))},$t=function(n,r,t){var e,i,o,u,c,a=0,f=Kn({})[0],l=Vt(),d=l[0],s=l[1],v=Vt(),h=v[0],p=v[1],g=Vt(100),b=g[0],w=g[1],y=Vt(100),m=y[0],x=y[1],_=Vt((function(){return a})),O=_[0],S=_[1],L=Ft(n,t.Ur),T=L[0],E=L[1],C=L[2],M=t.Ur,z=M.$,A=M.J,j=T.Gr,R=T.Kr,H=j.$r,D=j.Jr,k=R.$r,B=R.Jr,Y=function(n,r){if(S(),n)H(_r),k(_r);else{var t=function(){H(_r,!0),k(_r,!0)};a>0&&!r?O(t):t()}},F=function(){(u=i)&&Y(!0)},I=[w,S,x,p,s,C,kn(z,"mouseover",F,{A:!0}),kn(z,"mouseenter",F),kn(z,"mouseleave",(function(){u=!1,i&&Y(!1)})),kn(z,"mousemove",(function(){e&&d((function(){w(),Y(!0),m((function(){e&&Y(!1)}))}))})),kn(A,"scroll",(function(){o&&h((function(){Y(!0),b((function(){o&&!u&&Y(!1)}))}))}))],V=f.bind(0);return V.Ur=T,V.qr=E,[function(n,u,f){var l=f.Tr,d=f.Lr,s=f.Pr,v=$n(r,n,u),h=t(),p=v("scrollbars.theme"),g=p[0],b=p[1],w=v("scrollbars.visibility"),y=w[0],m=w[1],x=v("scrollbars.autoHide"),_=x[0],O=x[1],S=v("scrollbars.autoHideDelay")[0];v("scrollbars.dragScrolling"),v("scrollbars.touchSupport");var P=l||d,L=function(n,r){var t="visible"===y||"auto"===y&&"scroll"===n;return r(wr,t),t};if(a=S,s||m){var T=h.Cr,E=L(T.x,H),C=L(T.y,k),M=E&&C;H(yr,!M),k(yr,!M)}b&&(H(c),k(c),H(g,!0),k(g,!0),c=g),O&&(e="move"===_,i="leave"===_,Y(!(o="never"!==_),!0)),P&&(Jt(D,h,!0),Jt(B,h))},V,P.bind(0,I)]},Kt=new Set,Nt=new WeakMap,Ut=function n(t,e,i){var o=!1,u=rt(),c=u.N,a=u.M,f=u.q,l=Tr(),d=y(t)?t:t.target,s=function(n){return Nt.get(n)}(d);if(s)return s;var v=l[Ir],p=function(n){var r=n||{},t=v&&v.P;return t?t(r,!0):r},g=E({},c(),p(e)),b=Vn(i),w=b[0],m=b[1],x=b[2],_=Dt(t,g),O=_[0],S=_[1],P=_[2],L=$t(t,g,S),M=L[0],z=L[1],A=L[2],j=function(n,r){O(n,!!r)},R=f(j.bind(0,{},!0)),H=function(n){!function(n){Nt.delete(n),Kt.delete(n)}(d),R(),A(),P(),o=!0,x("destroyed",[D,!!n]),m()},D={options:function(n){if(n){var r=Pr(g,p(n));C(r)||(E(g,r),j(r))}return E({},g)},on:w,off:function(n,r){n&&r&&m(n,r)},state:function(){var n=S(),r=n.Er,t=n.zr,e=n.Cr,i=n.Ar,u=n.K,c=n.mr;return E({},{overflowEdge:r,overflowAmount:t,overflowStyle:e,hasOverflow:i,padding:u,paddingAbsolute:c,destroyed:o})},elements:function(){var n=S.Ur,r=n.Z,t=n.$,e=n.K,i=n.J,o=n.rr;return E({},{target:r,host:t,padding:e||i,viewport:i,content:o||i})},update:function(n){return j({},n),D},destroy:H.bind(0)};return S.Fr((function(n,r,t){M(r,t,n)})),r(T(l),(function(r){var t=l[r];h(t)&&t(n,D)})),a.x&&a.y&&!g.nativeScrollbarsOverlaid.initialize?(H(!0),D):(S.qr(),z.qr(),function(n,r){Nt.set(n,r),Kt.add(n)}(d,D),x("initialized",[D]),S.Fr((function(n,r,t){var e=n._r,i=n.br,o=n.hr,u=n.Tr,c=n.Lr,a=n.Pr,f=n.pr,l=n.Or;x("updated",[D,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowEdgeChanged:u,overflowAmountChanged:c,overflowStyleChanged:a,contentMutation:f,hostMutation:l},changedOptions:r,force:t}])})),D.update(!0))};Ut.plugin=function(n){r(p(n)?n:[n],(function(n){r(T(n),(function(r){Lr[r]=n[r]}))}))},Ut.env=function(){var n=rt(),r=n.k,t=n.M,e=n.L,i=n.B,o=n.F,u=n.I,c=n.G,a=n.X,f=n.U,l=n.Y,d=n.N,s=n.W;return E({},{scrollbarsSize:r,scrollbarsOverlaid:t,scrollbarsHiding:e,rtlScrollBehavior:i,flexboxGlue:o,cssCustomProperties:u,defaultInitializationStrategy:c,defaultDefaultOptions:a,getInitializationStrategy:f,setInitializationStrategy:l,getDefaultOptions:d,setDefaultOptions:s})},n.OverlayScrollbars=Ut,n.optionsValidationPlugin=Vr,n.scrollbarsHidingPlugin=Zr,n.sizeObserverPlugin=Nr,Object.defineProperty(n,"v",{value:!0})})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts index f165579..defd45d 100644 --- a/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts +++ b/packages/overlayscrollbars/src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts @@ -44,7 +44,7 @@ export interface ScrollbarsSetupElement { _scrollbarStructures: ScrollbarStructure[]; _clone: () => ScrollbarStructure; _addRemoveClass: ( - classNames: string, + classNames: string | false | null | undefined, add?: boolean, elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined ) => void; @@ -101,7 +101,7 @@ export const createScrollbarsSetupElements = ( ); const scrollbarsAddRemoveClass = ( scrollbarStructures: ScrollbarStructure[], - classNames: string, + classNames: string | false | null | undefined, add?: boolean, elm?: (scrollbarStructure: ScrollbarStructure) => HTMLElement | false | null | undefined ) => { diff --git a/packages/overlayscrollbars/types/overlayscrollbars.d.ts b/packages/overlayscrollbars/types/overlayscrollbars.d.ts index 8bbe8c2..0980e09 100644 --- a/packages/overlayscrollbars/types/overlayscrollbars.d.ts +++ b/packages/overlayscrollbars/types/overlayscrollbars.d.ts @@ -51,6 +51,7 @@ interface Options { y: OverflowBehavior; }; scrollbars: { + theme: string | null; visibility: ScrollbarVisibilityBehavior; autoHide: ScrollbarAutoHideBehavior; autoHideDelay: number; @@ -115,7 +116,7 @@ interface ScrollbarsInitialization { scrollbarsSlot?: ScrollbarsDynamicInitializationElement; } type ScrollbarsInitializationStrategy = { - [K in keyof ScrollbarsInitialization as `_${K}`]: InitializtationElementStrategy; + [K in keyof ScrollbarsInitialization]: InitializtationElementStrategy; }; interface StructureSetupState { _padding: TRBL; @@ -152,7 +153,7 @@ interface StructureInitialization { content?: StructureDynamicInitializationElement; } type StructureInitializationStrategy = { - [K in keyof Omit as `_${K}`]: InitializtationElementStrategy; + [K in keyof Omit]: InitializtationElementStrategy; }; interface ViewportOverflowState { _scrollbarsHideOffset: XY;