From cb992fea8542cf7871ffeef3b14ae16afb6a35c1 Mon Sep 17 00:00:00 2001 From: Rene Haas Date: Mon, 1 Aug 2022 12:45:56 +0200 Subject: [PATCH] improve code --- .../dist/overlayscrollbars.esm.js | 719 +++++++++--------- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 295 +++---- .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- packages/overlayscrollbars/package.json | 7 +- .../types/overlayscrollbars.d.ts | 11 +- .../types/overlayscrollbars.min.d.ts | 0 9 files changed, 525 insertions(+), 515 deletions(-) delete mode 100644 packages/overlayscrollbars/types/overlayscrollbars.min.d.ts diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index 1866e21..abd161b 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -34,13 +34,13 @@ const createCache = (t, n) => { let r; const cacheUpdateContextual = (t, n) => { const o = c; - const i = t; - const l = n || (s ? !s(o, i) : o !== i); - if (l || e) { - c = i; + const l = t; + const i = n || (s ? !s(o, l) : o !== l); + if (i || e) { + c = l; r = o; } - return [ c, l, r ]; + return [ c, i, r ]; }; const cacheUpdateIsolated = t => cacheUpdateContextual(n(c, r), t); const getCurrentCache = t => [ c, !!t, r ]; @@ -84,8 +84,8 @@ const isPlainObject = t => { const e = t[s]; const c = e && e.prototype; const r = o.call(t, s); - const i = c && o.call(c, "isPrototypeOf"); - if (e && !r && !i) { + const l = c && o.call(c, "isPrototypeOf"); + if (e && !r && !l) { return false; } for (n in t) {} @@ -140,11 +140,11 @@ const hasOwnProperty = (t, n) => Object.prototype.hasOwnProperty.call(t, n); const keys = t => t ? Object.keys(t) : []; const assignDeep = (t, n, o, s, e, c, r) => { - const i = [ n, o, s, e, c, r ]; + const l = [ n, o, s, e, c, r ]; if (("object" !== typeof t || isNull(t)) && !isFunction(t)) { t = {}; } - each(i, (n => { + each(l, (n => { each(keys(n), (o => { const s = n[o]; if (t === s) { @@ -333,11 +333,11 @@ const c = [ "WebKit", "Moz", "O", "MS", "webkit", "moz", "o", "ms" ]; const r = {}; -const i = {}; +const l = {}; const cssProperty = t => { - let n = i[t]; - if (hasOwnProperty(i, t)) { + let n = l[t]; + if (hasOwnProperty(l, t)) { return n; } const o = firstLetterToUpper(t); @@ -347,7 +347,7 @@ const cssProperty = t => { const r = [ t, e + t, c + o, firstLetterToUpper(c) + o ]; return !(n = r.find((t => void 0 !== s[t]))); })); - return i[t] = n || ""; + return l[t] = n || ""; }; const jsAPI = t => { @@ -363,7 +363,7 @@ const jsAPI = t => { return n; }; -const l = jsAPI("MutationObserver"); +const i = jsAPI("MutationObserver"); const a = jsAPI("IntersectionObserver"); @@ -435,7 +435,7 @@ const debounce = (t, n) => { let s; let e; let c = noop; - const {g: r, v: i, p: l} = n || {}; + const {g: r, v: l, p: i} = n || {}; const a = function invokeFunctionToDebounce(n) { c(); h(o); @@ -443,7 +443,7 @@ const debounce = (t, n) => { c = noop; t.apply(this, n); }; - const mergeParms = t => l && s ? l(s, t) : t; + const mergeParms = t => i && s ? i(s, t) : t; const flush = () => { if (c !== noop) { a(mergeParms(e) || e); @@ -452,10 +452,10 @@ const debounce = (t, n) => { const u = function debouncedFn() { const t = from(arguments); const n = isFunction(r) ? r() : r; - const l = isNumber(n) && n >= 0; - if (l) { - const r = isFunction(i) ? i() : i; - const l = isNumber(r) && r >= 0; + const i = isNumber(n) && n >= 0; + if (i) { + const r = isFunction(l) ? l() : l; + const i = isNumber(r) && r >= 0; const u = n > 0 ? _ : f; const g = n > 0 ? h : d; const v = mergeParms(t); @@ -464,7 +464,7 @@ const debounce = (t, n) => { c(); const b = u(p, n); c = () => g(b); - if (l && !o) { + if (i && !o) { o = _(flush, r); } s = e = w; @@ -508,14 +508,14 @@ const topRightBottomLeft = (t, n, o) => { const e = o ? `-${o}` : ""; const c = `${s}top${e}`; const r = `${s}right${e}`; - const i = `${s}bottom${e}`; - const l = `${s}left${e}`; - const a = style(t, [ c, r, i, l ]); + const l = `${s}bottom${e}`; + const i = `${s}left${e}`; + const a = style(t, [ c, r, l, i ]); return { t: parseToZeroOrNumber(a[c]), r: parseToZeroOrNumber(a[r]), - b: parseToZeroOrNumber(a[i]), - l: parseToZeroOrNumber(a[l]) + b: parseToZeroOrNumber(a[l]), + l: parseToZeroOrNumber(a[i]) }; }; @@ -585,19 +585,19 @@ const on = (t, n, o, s) => { var e; const c = supportPassiveEvents(); const r = null != (e = c && s && s.S) ? e : c; - const i = s && s.$ || false; - const l = s && s.C || false; + const l = s && s.$ || false; + const i = s && s.C || false; const a = []; const u = c ? { passive: r, - capture: i - } : i; + capture: l + } : l; each(splitEventNames(n), (n => { - const s = l ? e => { - t.removeEventListener(n, s, i); + const s = i ? e => { + t.removeEventListener(n, s, l); o && o(e); } : o; - push(a, off.bind(null, t, n, s, i)); + push(a, off.bind(null, t, n, s, l)); t.addEventListener(n, s, u); })); return runEachAndClear.bind(0, a); @@ -828,9 +828,9 @@ const ct = { const rt = ct.number; -const it = ct.boolean; +const lt = ct.boolean; -const lt = [ ct.array, ct.null ]; +const it = [ ct.array, ct.null ]; const at = "hidden scroll visible visible-hidden"; @@ -839,11 +839,11 @@ const ut = "visible hidden auto"; const dt = "never scroll leavemove"; ({ - paddingAbsolute: it, - showNativeOverlaidScrollbars: it, + paddingAbsolute: lt, + showNativeOverlaidScrollbars: lt, updating: { - elementEvents: lt, - attributes: lt, + elementEvents: it, + attributes: it, debounce: [ ct.number, ct.array, ct.null ], ignoreMutation: [ ct.function, ct.null ] }, @@ -856,8 +856,8 @@ const dt = "never scroll leavemove"; visibility: ut, autoHide: dt, autoHideDelay: rt, - dragScroll: it, - clickScroll: it, + dragScroll: lt, + clickScroll: lt, pointers: [ ct.array, ct.null ] } }); @@ -879,9 +879,9 @@ const vt = { const e = s[0]; const c = e.lastChild; const r = e.firstChild; - const i = null == r ? void 0 : r.firstChild; - let l = offsetSize(e); - let a = l; + const l = null == r ? void 0 : r.firstChild; + let i = offsetSize(e); + let a = i; let u = false; let _; const reset = () => { @@ -893,13 +893,13 @@ const vt = { const onResized = t => { _ = 0; if (u) { - l = a; + i = a; n(true === t); } }; const onScroll = t => { a = offsetSize(e); - u = !t || !equalWH(a, l); + u = !t || !equalWH(a, i); if (t) { stopPropagation(t); if (u && !_) { @@ -912,7 +912,7 @@ const vt = { reset(); }; const h = push([], [ on(r, ht, onScroll), on(c, ht, onScroll) ]); - style(i, { + style(l, { width: _t, height: _t }); @@ -953,13 +953,13 @@ const mt = { return c; }, H: (t, n, o, s, e, c, r) => { - const arrangeViewport = (n, c, r, i) => { + const arrangeViewport = (n, c, r, l) => { if (t) { const {P: t} = e(); - const {D: l, M: a} = n; + const {D: i, M: a} = n; const {x: u, y: d} = a; - const {x: f, y: _} = l; - const h = i ? "paddingRight" : "paddingLeft"; + const {x: f, y: _} = i; + const h = l ? "paddingRight" : "paddingLeft"; const g = t[h]; const v = t.paddingTop; const w = c.w + r.w; @@ -990,9 +990,9 @@ const mt = { } return t; }; - const undoViewportArrange = (s, i, l) => { + const undoViewportArrange = (s, l, i) => { if (t) { - const a = l || c(s); + const a = i || c(s); const {P: u} = e(); const {M: d} = a; const {x: f, y: _} = d; @@ -1013,7 +1013,7 @@ const mt = { } style(o, h); return [ () => { - r(a, i, t, g); + r(a, l, t, g); style(o, g); addClass(o, L); }, a ]; @@ -1037,17 +1037,17 @@ const mt = { if (0 === r.w && 0 === r.h) { return; } - const i = { + const l = { w: bt(r.w), h: bt(r.h) }; - const l = { + const i = { w: bt(pt(c.w / (t.w / 100))), h: bt(pt(c.h / (t.h / 100))) }; const a = getWindowDPR(); - const u = i.w > 2 && i.h > 2; - const d = !diffBiggerThanOne(l.w, l.h); + const u = l.w > 2 && l.h > 2; + const d = !diffBiggerThanOne(i.w, i.h); const f = a !== n && a > 0; const _ = u && d && f; if (_) { @@ -1112,9 +1112,9 @@ const getFlexboxGlue = (t, n) => { const e = getBoundingClientRect(n); const c = equalBCRWH(e, s, true); const r = addClass(t, x); - const i = getBoundingClientRect(t); - const l = getBoundingClientRect(n); - const a = equalBCRWH(l, i, true); + const l = getBoundingClientRect(t); + const i = getBoundingClientRect(n); + const a = equalBCRWH(i, l, true); o(); r(); return c && a; @@ -1126,15 +1126,15 @@ const createEnvironment = () => { const o = n[0]; const s = o.firstChild; const [e, , c] = createEventListenerHub(); - const [r, i] = createCache({ + const [r, l] = createCache({ o: getNativeScrollbarSize(t, o, s), u: equalXY }, getNativeScrollbarSize.bind(0, t, o, s, true)); - const [l] = i(); + const [i] = l(); const a = getNativeScrollbarsHiding(o); const u = { - x: 0 === l.x, - y: 0 === l.y + x: 0 === i.x, + y: 0 === i.y }; const d = { host: null, @@ -1149,7 +1149,7 @@ const createEnvironment = () => { }; const f = assignDeep({}, st); const _ = { - k: l, + k: i, I: u, T: a, L: "-1" === style(o, "zIndex"), @@ -1204,11 +1204,11 @@ const dynamicInitializationElement = (t, n, o, s) => { const cancelInitialization = (t, n) => { const {nativeScrollbarsOverlaid: o, body: s} = t || {}; const {W: e, X: c} = n; - const {Y: r, I: i} = getEnvironment(); - const {nativeScrollbarsOverlaid: l, body: a} = r().cancel; - const u = null != o ? o : l; + const {Y: r, I: l} = getEnvironment(); + const {nativeScrollbarsOverlaid: i, body: a} = r().cancel; + const u = null != o ? o : i; const d = isUndefined(s) ? a : s; - const f = (i.x || i.y) && u; + const f = (l.x || l.y) && u; const _ = e && (isNull(d) ? !c : d); return !!f || !!_; }; @@ -1230,7 +1230,7 @@ const createStructureSetupElements = t => { const {Y: o, T: s} = n; const e = getPlugins()[yt]; const c = e && e.A; - const {host: r, viewport: i, padding: l, content: a} = o(); + const {host: r, viewport: l, padding: i, content: a} = o(); const u = isHTMLElement(t); const d = u ? {} : t; const {host: f, padding: _, viewport: h, content: g} = d; @@ -1241,23 +1241,23 @@ const createStructureSetupElements = t => { const y = p.defaultView; const m = staticInitializationElement.bind(0, [ v ]); const S = dynamicInitializationElement.bind(0, [ v ]); - const x = m(xt, i, h); + const x = m(xt, l, h); const E = x === v; const A = E && b; const T = { J: v, K: w ? m(xt, r, f) : v, Z: x, - tt: !E && S(xt, l, _), + tt: !E && S(xt, i, _), nt: !E && S(xt, a, g), ot: !E && !s && c && c(n), st: A ? p.documentElement : x, et: A ? p : x, ct: y, rt: p, - it: w, + lt: w, W: b, - lt: u, + it: u, X: E, ut: (t, n) => E ? hasAttrClass(x, $, n) : hasClass(x, t), dt: (t, n, o) => E ? attrClass(x, $, n, o) : (o ? addClass : removeClass)(x, t) @@ -1270,7 +1270,7 @@ const createStructureSetupElements = t => { const {J: D, K: M, tt: R, Z: k, nt: B, ot: V} = T; const j = []; const Y = w && elementIsGenerated(M); - const q = w ? D : contents([ B, k, R, M, D ].find((t => false === elementIsGenerated(t)))); + let q = w ? D : contents([ B, k, R, M, D ].find((t => false === elementIsGenerated(t)))); const F = B || k; const appendElements = () => { const t = addDataAttrHost(M, E ? "viewport" : "host"); @@ -1314,6 +1314,7 @@ const createStructureSetupElements = t => { insertBefore(k, V); push(j, removeElements.bind(0, V)); } + q = 0; }; return [ T, appendElements, runEachAndClear.bind(0, j) ]; }; @@ -1340,8 +1341,8 @@ const createTrinsicUpdateSegment = (t, n) => { const createPaddingUpdateSegment = (t, n) => { const [o, s] = n; - const {K: e, tt: c, Z: r, X: i} = t; - const [l, a] = createCache({ + const {K: e, tt: c, Z: r, X: l} = t; + const [i, a] = createCache({ u: equalTRBL, o: topRightBottomLeft() }, topRightBottomLeft.bind(0, e, "padding", "")); @@ -1353,9 +1354,9 @@ const createPaddingUpdateSegment = (t, n) => { const [p, b] = n("paddingAbsolute"); const y = !_ && v; if (g || d || y) { - [u, d] = l(e); + [u, d] = i(e); } - const m = !i && (b || w || d); + const m = !l && (b || w || d); if (m) { const t = !p || !c && !f; const n = u.r + u.l; @@ -1369,18 +1370,18 @@ const createPaddingUpdateSegment = (t, n) => { left: t ? h ? "auto" : -u.l : 0, width: t ? `calc(100% + ${n}px)` : "" }; - const i = { + const l = { paddingTop: t ? u.t : 0, paddingRight: t ? u.r : 0, paddingBottom: t ? u.b : 0, paddingLeft: t ? u.l : 0 }; style(c || r, e); - style(r, i); + style(r, l); s({ tt: u, bt: !t, - P: c ? i : assignDeep({}, e, i) + P: c ? l : assignDeep({}, e, l) }); } return { @@ -1433,11 +1434,11 @@ const overflowIsVisible = t => 0 === t.indexOf(Ot); const createOverflowUpdateSegment = (t, n) => { const [o, s] = n; - const {K: e, tt: c, Z: r, ot: i, X: l, dt: a, W: u, ct: d} = t; + const {K: e, tt: c, Z: r, ot: l, X: i, dt: a, W: u, ct: d} = t; const {k: f, V: _, T: h, I: g} = getEnvironment(); const v = getPlugins()[yt]; - const w = !l && !h && (g.x || g.y); - const p = u && l; + const w = !i && !h && (g.x || g.y); + const p = u && i; const [b, y] = createCache(Tt, fractionalSize.bind(0, r)); const [m, S] = createCache(Tt, scrollSize.bind(0, r)); const [x, T] = createCache(Tt); @@ -1449,14 +1450,14 @@ const createOverflowUpdateSegment = (t, n) => { }); if (n) { const {bt: n, tt: s} = o(); - const {St: c, D: i} = t; - const l = fractionalSize(e); + const {St: c, D: l} = t; + const i = fractionalSize(e); const a = clientSize(e); const u = "content-box" === style(r, "boxSizing"); const d = n || u ? s.b + s.t : 0; const f = !(g.x && u); style(r, { - height: a.h + l.h + (c.x && f ? i.x : 0) - d + height: a.h + i.h + (c.x && f ? l.x : 0) - d }); } }; @@ -1464,19 +1465,19 @@ const createOverflowUpdateSegment = (t, n) => { const o = !h && !t ? At : 0; const getStatePerAxis = (t, s, e) => { const c = style(r, t); - const i = n ? n[t] : c; - const l = "scroll" === i; + const l = n ? n[t] : c; + const i = "scroll" === l; const a = s ? o : e; - const u = l && !h ? a : 0; + const u = i && !h ? a : 0; const d = s && !!o; - return [ c, l, u, d ]; + return [ c, i, u, d ]; }; - const [s, e, c, i] = getStatePerAxis("overflowX", g.x, f.x); - const [l, a, u, d] = getStatePerAxis("overflowY", g.y, f.y); + const [s, e, c, l] = getStatePerAxis("overflowX", g.x, f.x); + const [i, a, u, d] = getStatePerAxis("overflowY", g.y, f.y); return { xt: { x: s, - y: l + y: i }, St: { x: e, @@ -1487,7 +1488,7 @@ const createOverflowUpdateSegment = (t, n) => { y: u }, M: { - x: i, + x: l, y: d } }; @@ -1499,14 +1500,14 @@ const createOverflowUpdateSegment = (t, n) => { return [ n && !o ? t : "", overflowIsVisible(s) ? "hidden" : s ]; }; const [e, c] = setAxisOverflowStyle(o.x, n.x); - const [r, i] = setAxisOverflowStyle(o.y, n.y); + const [r, l] = setAxisOverflowStyle(o.y, n.y); s.overflowX = c && r ? c : e; - s.overflowY = i && e ? i : r; + s.overflowY = l && e ? l : r; return getViewportOverflowState(t, s); }; const hideNativeScrollbars = (t, n, s, e) => { const {D: c, M: r} = t; - const {x: i, y: l} = r; + const {x: l, y: i} = r; const {x: a, y: u} = c; const {P: d} = o(); const f = n ? "marginLeft" : "marginRight"; @@ -1519,25 +1520,25 @@ const createOverflowUpdateSegment = (t, n) => { e[f] = -u + h; e.marginBottom = -a + g; if (s) { - e[_] = v + (l ? u : 0); - e.paddingBottom = w + (i ? a : 0); + e[_] = v + (i ? u : 0); + e.paddingBottom = w + (l ? a : 0); } }; - const [H, M] = v ? v.H(w, _, r, i, o, getViewportOverflowState, hideNativeScrollbars) : [ () => w, () => [ noop ] ]; - return (t, n, i) => { + const [H, M] = v ? v.H(w, _, r, l, o, getViewportOverflowState, hideNativeScrollbars) : [ () => w, () => [ noop ] ]; + return (t, n, l) => { const {ht: u, $t: f, gt: v, yt: w, _t: R, wt: k} = t; const {ft: B, vt: V} = o(); const [j, Y] = n("showNativeOverlaidScrollbars"); const [q, F] = n("overflow"); const G = j && g.x && g.y; - const N = !l && !_ && (u || v || f || Y || R); + const N = !i && !_ && (u || v || f || Y || R); const U = overflowIsVisible(q.x); const W = overflowIsVisible(q.y); const X = U || W; - let J = y(i); - let K = S(i); - let Z = T(i); - let Q = I(i); + let J = y(l); + let K = S(l); + let Z = T(l); + let Q = I(l); let tt; if (Y && h) { a(P, A, !G); @@ -1551,11 +1552,11 @@ const createOverflowUpdateSegment = (t, n) => { a(D, E, false); } const [t, n] = M(G, V, tt); - const [o, s] = J = b(i); - const [e, c] = K = m(i); - const l = clientSize(r); + const [o, s] = J = b(l); + const [e, c] = K = m(l); + const i = clientSize(r); let u = e; - let f = l; + let f = i; t(); if ((c || s || Y) && n && !G && H(n, e, o, V)) { f = clientSize(r); @@ -1566,22 +1567,22 @@ const createOverflowUpdateSegment = (t, n) => { h: Ct($t(e.h, u.h) + o.h) }; const h = { - w: Ct(p ? d.innerWidth : f.w + Ct(l.w - e.w) + o.w), - h: Ct(p ? d.innerHeight : f.h + Ct(l.h - e.h) + o.h) + w: Ct(p ? d.innerWidth : f.w + Ct(i.w - e.w) + o.w), + h: Ct(p ? d.innerHeight : f.h + Ct(i.h - e.h) + o.h) }; Q = z(h); - Z = x(getOverflowAmount(_, h), i); + Z = x(getOverflowAmount(_, h), l); } const [nt, ot] = Q; const [st, et] = Z; const [ct, rt] = K; - const [it, lt] = J; + const [lt, it] = J; const at = { x: st.w > 0, y: st.h > 0 }; const ut = U && W && (at.x || at.y) || U && at.x && !at.y || W && at.y && !at.x; - if (w || k || lt || rt || ot || et || F || Y || N) { + if (w || k || it || rt || ot || et || F || Y || N) { const t = { marginRight: 0, marginBottom: 0, @@ -1591,14 +1592,14 @@ const createOverflowUpdateSegment = (t, n) => { overflowX: "" }; const n = setViewportOverflowState(G, at, q, t); - const o = H(n, ct, it, V); - if (!l) { + const o = H(n, ct, lt, V); + if (!i) { hideNativeScrollbars(n, V, o, t); } if (N) { fixFlexboxGlue(n, B); } - if (l) { + if (i) { attr(e, C, t.overflowX); attr(e, O, t.overflowY); } else { @@ -1607,7 +1608,7 @@ const createOverflowUpdateSegment = (t, n) => { } attrClass(e, $, E, ut); conditionalClass(c, D, ut); - !l && conditionalClass(r, D, X); + !i && conditionalClass(r, D, X); const [dt, ft] = L(getViewportOverflowState(G).xt); s({ xt: dt, @@ -1644,8 +1645,8 @@ const prepareUpdateHints = (t, n, o) => { const createStructureSetupUpdate = (t, n) => { const {Z: o, dt: s} = t; const {T: e, I: c, V: r} = getEnvironment(); - const i = !e && (c.x || c.y); - const l = [ createTrinsicUpdateSegment(t, n), createPaddingUpdateSegment(t, n), createOverflowUpdateSegment(t, n) ]; + const l = !e && (c.x || c.y); + const i = [ createTrinsicUpdateSegment(t, n), createPaddingUpdateSegment(t, n), createOverflowUpdateSegment(t, n) ]; return (t, n, e) => { const c = prepareUpdateHints(assignDeep({ ht: false, @@ -1658,12 +1659,12 @@ const createStructureSetupUpdate = (t, n) => { $t: false, gt: false }, n), {}, e); - const a = i || !r; + const a = l || !r; const u = a && scrollLeft(o); const d = a && scrollTop(o); s("", T, true); let f = c; - each(l, (n => { + each(i, (n => { f = prepareUpdateHints(f, n(f, t, !!e) || {}, e); })); scrollLeft(o, u); @@ -1681,9 +1682,9 @@ const createSizeObserver = (t, n, o) => { const {It: s = false, Lt: e = false} = o || {}; const c = getPlugins()[gt]; const {B: r} = getEnvironment(); - const i = createDOM(`
`); - const l = i[0]; - const a = l.firstChild; + const l = createDOM(`
`); + const i = l[0]; + const a = i.firstChild; const d = directionIsRTL.bind(0, t); const [f] = createCache({ o: void 0, @@ -1694,30 +1695,30 @@ const createSizeObserver = (t, n, o) => { const o = isArray(t) && t.length > 0 && isObject(t[0]); const e = !o && isBoolean(t[0]); let c = false; - let i = false; + let l = false; let a = true; if (o) { const [n, , o] = f(t.pop().contentRect); const s = domRectHasDimensions(n); const e = domRectHasDimensions(o); c = !o || !s; - i = !e && s; + l = !e && s; a = !c; } else if (e) { [, a] = t; } else { - i = true === t; + l = true === t; } if (s && a) { - const n = e ? t[0] : directionIsRTL(l); - scrollLeft(l, n ? r.n ? -It : r.i ? 0 : It : It); - scrollTop(l, It); + const n = e ? t[0] : directionIsRTL(i); + scrollLeft(i, n ? r.n ? -It : r.i ? 0 : It : It); + scrollTop(i, It); } if (!c) { n({ ht: !e, Ht: e ? t : void 0, - Lt: !!i + Lt: !!l }); } }; @@ -1725,7 +1726,7 @@ const createSizeObserver = (t, n, o) => { let h = e ? onSizeChangedCallbackProxy : false; return [ () => { runEachAndClear(_); - removeElements(l); + removeElements(i); }, () => { if (u) { const t = new u(onSizeChangedCallbackProxy); @@ -1742,7 +1743,7 @@ const createSizeObserver = (t, n, o) => { const [t] = createCache({ o: !d() }, d); - push(_, on(l, "scroll", (n => { + push(_, on(i, "scroll", (n => { const o = t(); const [s, e] = o; if (e) { @@ -1758,12 +1759,12 @@ const createSizeObserver = (t, n, o) => { }))); } if (h) { - addClass(l, R); - push(_, on(l, "animationstart", h, { + addClass(i, R); + push(_, on(i, "animationstart", h, { C: !!u })); } - appendChildren(t, l); + appendChildren(t, i); } ]; }; @@ -1850,15 +1851,15 @@ const createEventContentChange = (t, n, o) => { n(); } } - const i = on(o, c, (t => { + const l = on(o, c, (t => { if (e) { - i(); + l(); s.delete(o); } else { n(t); } })); - s.set(o, [ c, i ]); + s.set(o, [ c, l ]); })))); } }; @@ -1871,7 +1872,7 @@ const createEventContentChange = (t, n, o) => { const createDOMObserver = (t, n, o, s) => { let e = false; - const {Pt: c, Dt: r, Mt: i, Rt: a, kt: u, Bt: d} = s || {}; + const {Pt: c, Dt: r, Mt: l, Rt: a, kt: u, Bt: d} = s || {}; const f = debounce((() => { if (e) { o(true); @@ -1880,14 +1881,14 @@ const createDOMObserver = (t, n, o, s) => { g: 33, v: 99 }); - const [_, h] = createEventContentChange(t, f, i); + const [_, h] = createEventContentChange(t, f, l); const g = c || []; const v = r || []; const w = g.concat(v); const observerCallback = (e, c) => { const r = u || noop; - const i = d || noop; - const l = []; + const l = d || noop; + const i = []; const f = []; let _ = false; let g = false; @@ -1902,16 +1903,16 @@ const createDOMObserver = (t, n, o, s) => { const x = indexOf(v, e) > -1 && S; if (n && !y) { const n = !p; - const l = p && x; - const u = l && a && is(c, a); - const _ = u ? !r(c, e, d, m) : n || l; - const v = _ && !i(o, !!u, t, s); + const i = p && x; + const u = i && a && is(c, a); + const _ = u ? !r(c, e, d, m) : n || i; + const v = _ && !l(o, !!u, t, s); push(f, h); g = g || v; w = w || b; } if (!n && y && S && !r(c, e, d, m)) { - push(l, e); + push(i, e); _ = _ || x; } })); @@ -1925,12 +1926,12 @@ const createDOMObserver = (t, n, o, s) => { !c && g && o(false); return [ false ]; } - if (!isEmptyArray(l) || _) { - !c && o(l, _); - return [ l, _ ]; + if (!isEmptyArray(i) || _) { + !c && o(i, _); + return [ i, _ ]; } }; - const p = new l((t => observerCallback(t))); + const p = new i((t => observerCallback(t))); p.observe(t, { attributes: true, attributeOldValue: true, @@ -1970,7 +1971,7 @@ const createStructureSetupObservers = (t, n, o) => { let e; let c; const [, r] = n; - const {K: i, Z: l, nt: a, it: d, X: f, ut: _, dt: h} = t; + const {K: l, Z: i, nt: a, lt: d, X: f, ut: _, dt: h} = t; const {V: g} = getEnvironment(); const [v] = createCache({ u: equalWH, @@ -1981,19 +1982,19 @@ const createStructureSetupObservers = (t, n, o) => { }, (() => { const t = _(D, E); const n = _(L, ""); - const o = n && scrollLeft(l); - const s = n && scrollTop(l); + const o = n && scrollLeft(i); + const s = n && scrollTop(i); h(D, E); h(L, ""); h("", T, true); const e = scrollSize(a); - const c = scrollSize(l); - const r = fractionalSize(l); + const c = scrollSize(i); + const r = fractionalSize(i); h(D, E, t); h(L, "", n); h("", T); - scrollLeft(l, o); - scrollTop(l, s); + scrollLeft(i, o); + scrollTop(i, s); return { w: c.w + e.w + r.w, h: c.h + e.h + r.h @@ -2015,11 +2016,11 @@ const createStructureSetupObservers = (t, n, o) => { const updateViewportAttrsFromHost = t => { each(t || Pt, (t => { if (indexOf(Pt, t) > -1) { - const n = attr(i, t); + const n = attr(l, t); if (isString(n)) { - attr(l, t, n); + attr(i, t, n); } else { - removeAttr(l, t); + removeAttr(i, t); } } })); @@ -2072,19 +2073,19 @@ const createStructureSetupObservers = (t, n, o) => { } return s; }; - const [b, y, m] = a || !g ? createTrinsicObserver(i, onTrinsicChanged) : [ noop, noop, noop ]; - const [S, x] = !f ? createSizeObserver(i, onSizeChanged, { + const [b, y, m] = a || !g ? createTrinsicObserver(l, onTrinsicChanged) : [ noop, noop, noop ]; + const [S, x] = !f ? createSizeObserver(l, onSizeChanged, { Lt: true, It: true }) : [ noop, noop ]; - const [$, C] = createDOMObserver(i, false, onHostMutation, { + const [$, C] = createDOMObserver(l, false, onHostMutation, { Dt: Mt, Pt: Mt.concat(Pt) }); const O = f && u && new u(onSizeChanged.bind(0, { ht: true })); - O && O.observe(i); + O && O.observe(l); updateViewportAttrsFromHost(); return [ () => { b(); @@ -2113,7 +2114,7 @@ const createStructureSetupObservers = (t, n, o) => { }, t => { const [n] = t("updating.ignoreMutation"); const [o, r] = t("updating.attributes"); - const [i, u] = t("updating.elementEvents"); + const [l, u] = t("updating.elementEvents"); const [d, _] = t("updating.debounce"); const h = u || r; const ignoreMutationFromOptions = t => isFunction(n) && n(t); @@ -2122,10 +2123,10 @@ const createStructureSetupObservers = (t, n, o) => { c[1](); c[0](); } - c = createDOMObserver(a || l, true, onContentMutation, { + c = createDOMObserver(a || i, true, onContentMutation, { Dt: w.concat(o || []), Pt: w.concat(o || []), - Mt: i, + Mt: l, Rt: Lt, Bt: (t, n) => { const {target: o, attributeName: s} = t; @@ -2192,19 +2193,19 @@ const createStructureSetup = (t, n) => { const o = createOptionCheck(n, {}); const s = createState(kt); const [e, c, r] = createEventListenerHub(); - const [i] = s; - const [l, a, u] = createStructureSetupElements(t); - const d = createStructureSetupUpdate(l, s); + const [l] = s; + const [i, a, u] = createStructureSetupElements(t); + const d = createStructureSetupUpdate(i, s); const triggerUpdateEvent = (t, n, o) => { const s = keys(t).some((n => t[n])); if (s || !isEmptyObject(n) || o) { r("u", [ t, n, o ]); } }; - const [f, _, h, g] = createStructureSetupObservers(l, s, (t => { + const [f, _, h, g] = createStructureSetupObservers(i, s, (t => { triggerUpdateEvent(d(o, t), {}, false); })); - const v = i.bind(0); + const v = l.bind(0); v.Vt = t => { e("u", t); }; @@ -2212,7 +2213,7 @@ const createStructureSetup = (t, n) => { _(); a(); }; - v.Yt = l; + v.Yt = i; return [ (t, o) => { const s = createOptionCheck(n, t, o); g(s); @@ -2243,8 +2244,8 @@ const getScale = t => { const continuePointerDown = (t, n, o) => { const s = n.scrollbars; const {button: e, isPrimary: c, pointerType: r} = t; - const {pointers: i} = s; - return 0 === e && c && s[o] && (i || []).includes(r); + const {pointers: l} = s; + return 0 === e && c && s[o] && (l || []).includes(r); }; const createRootClickStopPropagationEvents = (t, n) => on(t, "mousedown", on.bind(0, n, "click", stopPropagation, { @@ -2256,45 +2257,45 @@ const createRootClickStopPropagationEvents = (t, n) => on(t, "mousedown", on.bin const createDragScrollingEvents = (t, n, o, s, e, c) => { const {B: r} = getEnvironment(); - const {qt: i, Ft: l, Gt: a} = o; + const {qt: l, Ft: i, Gt: a} = o; const u = `scroll${c ? "Left" : "Top"}`; const d = `${c ? "x" : "y"}`; const f = `${c ? "w" : "h"}`; const createOnPointerMoveHandler = (t, n, o) => _ => { const {Ot: h} = e(); const g = (getClientOffset(_)[d] - n) * o; - const v = offsetSize(l)[f] - offsetSize(i)[f]; + const v = offsetSize(i)[f] - offsetSize(l)[f]; const w = g / v; const p = w * h[d]; const b = directionIsRTL(a); const y = b && c ? r.n || r.i ? 1 : -1 : 1; s[u] = t + p * y; }; - return on(i, "pointerdown", (o => { + return on(l, "pointerdown", (o => { if (continuePointerDown(o, t, "dragScroll")) { const t = on(n, "selectstart", (t => preventDefault(t)), { S: false }); - const e = on(i, "pointermove", createOnPointerMoveHandler(s[u] || 0, getClientOffset(o)[d], 1 / getScale(s)[d])); - on(i, "pointerup", (n => { + const e = on(l, "pointermove", createOnPointerMoveHandler(s[u] || 0, getClientOffset(o)[d], 1 / getScale(s)[d])); + on(l, "pointerup", (n => { t(); e(); - i.releasePointerCapture(n.pointerId); + l.releasePointerCapture(n.pointerId); }), { C: true }); - i.setPointerCapture(o.pointerId); + l.setPointerCapture(o.pointerId); } })); }; const createScrollbarsSetupEvents = (t, n) => (o, s, e, c, r) => { - const {Gt: i} = o; - return runEachAndClear.bind(0, [ on(i, "pointerenter", (() => { + const {Gt: l} = o; + return runEachAndClear.bind(0, [ on(l, "pointerenter", (() => { s(Z, true); - })), on(i, "pointerleave pointercancel", (() => { + })), on(l, "pointerleave pointercancel", (() => { s(Z); - })), createRootClickStopPropagationEvents(i, e), createDragScrollingEvents(t, e, o, c, n, r) ]); + })), createRootClickStopPropagationEvents(l, e), createDragScrollingEvents(t, e, o, c, n, r) ]); }; const {min: Vt, max: jt, abs: Yt, round: qt} = Math; @@ -2315,11 +2316,11 @@ const getScrollbarHandleLengthRatio = (t, n, o, s) => { const getScrollbarHandleOffsetRatio = (t, n, o, s, e, c) => { const {B: r} = getEnvironment(); - const i = c ? "x" : "y"; - const l = c ? "Left" : "Top"; + const l = c ? "x" : "y"; + const i = c ? "Left" : "Top"; const {Ot: a} = s; - const u = qt(a[i]); - const d = Yt(o[`scroll${l}`]); + const u = qt(a[l]); + const d = Yt(o[`scroll${i}`]); const f = c && e; const _ = r.i ? d : u - d; const h = f ? _ : d; @@ -2331,9 +2332,9 @@ const getScrollbarHandleOffsetRatio = (t, n, o, s, e, c) => { const createScrollbarsSetupElements = (t, n, o) => { const {Y: s} = getEnvironment(); const {scrollbarsSlot: e} = s(); - const {rt: c, J: r, K: i, Z: l, lt: a, st: u} = n; + const {rt: c, J: r, K: l, Z: i, it: a, st: u} = n; const {scrollbarsSlot: d} = a ? {} : t; - const f = dynamicInitializationElement([ r, i, l ], (() => i), e, d); + const f = dynamicInitializationElement([ r, l, i ], (() => l), e, d); const scrollbarStructureAddRemoveClass = (t, n, o) => { const s = o ? addClass : removeClass; each(t, (t => { @@ -2358,10 +2359,10 @@ const createScrollbarsSetupElements = (t, n, o) => { const s = o ? "X" : "Y"; scrollbarsHandleStyle(t, (t => { const {qt: e, Ft: c, Gt: r} = t; - const i = getScrollbarHandleOffsetRatio(e, c, u, n, directionIsRTL(r), o); - const l = i === i; + const l = getScrollbarHandleOffsetRatio(e, c, u, n, directionIsRTL(r), o); + const i = l === l; return [ e, { - transform: l ? `translate${s}(${(100 * i).toFixed(3)}%)` : "" + transform: i ? `translate${s}(${(100 * l).toFixed(3)}%)` : "" } ]; })); }; @@ -2388,15 +2389,15 @@ const createScrollbarsSetupElements = (t, n, o) => { const s = t ? g : v; const e = isEmptyArray(s) ? K : ""; const r = createDiv(`${q} ${n} ${e}`); - const i = createDiv(U); - const l = createDiv(W); + const l = createDiv(U); + const i = createDiv(W); const a = { Gt: r, - Ft: i, - qt: l + Ft: l, + qt: i }; - appendChildren(r, i); - appendChildren(i, l); + appendChildren(r, l); + appendChildren(l, i); push(s, a); push(h, [ removeElements.bind(0, r), o(a, scrollbarsAddRemoveClass, c, u, t) ]); return a; @@ -2444,15 +2445,15 @@ const createScrollbarsSetup = (t, n, o) => { let e; let c; let r; - let i; - let l = 0; + let l; + let i = 0; const a = createState({}); const [u] = a; const [d, f] = createSelfCancelTimeout(); const [_, h] = createSelfCancelTimeout(); const [g, v] = createSelfCancelTimeout(100); const [w, p] = createSelfCancelTimeout(100); - const [b, y] = createSelfCancelTimeout((() => l)); + const [b, y] = createSelfCancelTimeout((() => i)); const [m, S, x] = createScrollbarsSetupElements(t, o.Yt, createScrollbarsSetupEvents(n, o)); const {K: $, Z: C, st: O, et: E, X: A, W: T} = o.Yt; const {Xt: z, Qt: I, Wt: L, Nt: H, Ut: P} = m; @@ -2471,7 +2472,7 @@ const createScrollbarsSetup = (t, n, o) => { L(tt); } else { const hide = () => L(tt, true); - if (l > 0 && !n) { + if (i > 0 && !n) { b(hide); } else { hide(); @@ -2527,11 +2528,11 @@ const createScrollbarsSetup = (t, n, o) => { L(X, o, n); return o; }; - l = C; + i = C; if (y) { - L(i); + L(l); L(b, true); - i = b; + l = b; } if ($) { s = "move" === x; @@ -2561,164 +2562,166 @@ const createScrollbarsSetup = (t, n, o) => { }, k, runEachAndClear.bind(0, R) ]; }; -const Ft = new Set; - -const Gt = new WeakMap; +const Ft = new WeakMap; const addInstance = (t, n) => { - Gt.set(t, n); - Ft.add(t); + Ft.set(t, n); }; const removeInstance = t => { - Gt.delete(t); Ft.delete(t); }; -const getInstance = t => Gt.get(t); +const getInstance = t => Ft.get(t); const OverlayScrollbars = (t, n, o) => { - let s = false; - const {F: e, j: c} = getEnvironment(); - const r = getPlugins(); - const i = isHTMLElement(t); - const l = i ? t : t.target; - const a = getInstance(l); - if (a) { - return a; - } - const u = r[ft]; - const validateOptions = t => { - const n = t || {}; - const o = u && u.O; - return o ? o(n, true) : n; - }; - const d = assignDeep({}, e(), validateOptions(n)); - const [f, _, h] = createEventListenerHub(o); - const [g, v, w] = createStructureSetup(t, d); - const [p, b, y] = createScrollbarsSetup(t, d, v); - const update = (t, n) => { - g(t, !!n); - }; - const m = c(update.bind(0, {}, true)); - const destroy = t => { - removeInstance(l); - m(); - y(); - w(); - s = true; - h("destroyed", [ S, !!t ]); - _(); - }; - const S = { - options(t) { - if (t) { - const n = getOptionsDiff(d, validateOptions(t)); - if (!isEmptyObject(n)) { - assignDeep(d, n); - update(n); - } - } - return assignDeep({}, d); - }, - on: f, - off: (t, n) => { - t && n && _(t, n); - }, - state() { - const {Ct: t, Ot: n, xt: o, Et: e, tt: c, bt: r, vt: i} = v(); - return assignDeep({}, { - overflowEdge: t, - overflowAmount: n, - overflowStyle: o, - hasOverflow: e, - padding: c, - paddingAbsolute: r, - directionRTL: i, - destroyed: s - }); - }, - elements() { - const {J: t, K: n, tt: o, Z: s, nt: e, st: c, et: r} = v.Yt; - const {Xt: i, Qt: l} = b.Yt; - const translateScrollbarStructure = t => { - const {qt: n, Ft: o, Gt: s} = t; - return { - scrollbar: s, - track: o, - handle: n - }; - }; - const translateScrollbarsSetupElement = t => { - const {Jt: n, Kt: o} = t; - const s = translateScrollbarStructure(n[0]); - return assignDeep({}, s, { - clone: () => { - const t = translateScrollbarStructure(o()); - p({}, true, {}); - return t; + const {F: s, j: e} = getEnvironment(); + const c = getPlugins(); + const r = isHTMLElement(t); + const l = r ? t : t.target; + const i = getInstance(l); + if (n && !i) { + let i = false; + const a = c[ft]; + const validateOptions = t => { + const n = t || {}; + const o = a && a.O; + return o ? o(n, true) : n; + }; + const u = assignDeep({}, s(), validateOptions(n)); + const [d, f, _] = createEventListenerHub(o); + const [h, g, v] = createStructureSetup(t, u); + const [w, p, b] = createScrollbarsSetup(t, u, g); + const update = (t, n) => { + h(t, !!n); + }; + const y = e(update.bind(0, {}, true)); + const destroy = t => { + removeInstance(l); + y(); + b(); + v(); + i = true; + _("destroyed", [ m, !!t ]); + f(); + }; + const m = { + options(t) { + if (t) { + const n = getOptionsDiff(u, validateOptions(t)); + if (!isEmptyObject(n)) { + assignDeep(u, n); + update(n); } - }); - }; - return assignDeep({}, { - target: t, - host: n, - padding: o || s, - viewport: s, - content: e || s, - scrollOffsetElement: c, - scrollEventElement: r, - scrollbarHorizontal: translateScrollbarsSetupElement(i), - scrollbarVertical: translateScrollbarsSetupElement(l) - }); - }, - update(t) { - update({}, t); - return S; - }, - destroy: destroy.bind(0) - }; - v.Vt(((t, n, o) => { - p(n, o, t); - })); - each(keys(r), (t => { - const n = r[t]; - if (isFunction(n)) { - n(OverlayScrollbars, S); - } - })); - if (cancelInitialization(!i && t.cancel, v.Yt)) { - destroy(true); - return S; - } - v.jt(); - b.jt(); - addInstance(l, S); - h("initialized", [ S ]); - v.Vt(((t, n, o) => { - const {ht: s, wt: e, _t: c, Tt: r, zt: i, At: l, gt: a, $t: u} = t; - h("updated", [ S, { - updateHints: { - sizeChanged: s, - directionChanged: e, - heightIntrinsicChanged: c, - overflowEdgeChanged: r, - overflowAmountChanged: i, - overflowStyleChanged: l, - contentMutation: a, - hostMutation: u + } + return assignDeep({}, u); }, - changedOptions: n, - force: o - } ]); - })); - return S.update(true); + on: d, + off: (t, n) => { + t && n && f(t, n); + }, + state() { + const {Ct: t, Ot: n, xt: o, Et: s, tt: e, bt: c, vt: r} = g(); + return assignDeep({}, { + overflowEdge: t, + overflowAmount: n, + overflowStyle: o, + hasOverflow: s, + padding: e, + paddingAbsolute: c, + directionRTL: r, + destroyed: i + }); + }, + elements() { + const {J: t, K: n, tt: o, Z: s, nt: e, st: c, et: r} = g.Yt; + const {Xt: l, Qt: i} = p.Yt; + const translateScrollbarStructure = t => { + const {qt: n, Ft: o, Gt: s} = t; + return { + scrollbar: s, + track: o, + handle: n + }; + }; + const translateScrollbarsSetupElement = t => { + const {Jt: n, Kt: o} = t; + const s = translateScrollbarStructure(n[0]); + return assignDeep({}, s, { + clone: () => { + const t = translateScrollbarStructure(o()); + w({}, true, {}); + return t; + } + }); + }; + return assignDeep({}, { + target: t, + host: n, + padding: o || s, + viewport: s, + content: e || s, + scrollOffsetElement: c, + scrollEventElement: r, + scrollbarHorizontal: translateScrollbarsSetupElement(l), + scrollbarVertical: translateScrollbarsSetupElement(i) + }); + }, + update(t) { + update({}, t); + return m; + }, + destroy: destroy.bind(0) + }; + g.Vt(((t, n, o) => { + w(n, o, t); + })); + each(keys(c), (t => { + const n = c[t]; + if (isFunction(n)) { + n(OverlayScrollbars, m); + } + })); + if (cancelInitialization(!r && t.cancel, g.Yt)) { + destroy(true); + return m; + } + g.jt(); + p.jt(); + addInstance(l, m); + _("initialized", [ m ]); + g.Vt(((t, n, o) => { + const {ht: s, wt: e, _t: c, Tt: r, zt: l, At: i, gt: a, $t: u} = t; + _("updated", [ m, { + updateHints: { + sizeChanged: s, + directionChanged: e, + heightIntrinsicChanged: c, + overflowEdgeChanged: r, + overflowAmountChanged: l, + overflowStyleChanged: i, + contentMutation: a, + hostMutation: u + }, + changedOptions: n, + force: o + } ]); + })); + return m.update(true); + } + return i; }; OverlayScrollbars.plugin = addPlugin; +OverlayScrollbars.valid = t => { + const n = t && t.elements; + const o = isFunction(n) && n(); + return isPlainObject(o) && !!getInstance(o.target); +}; + OverlayScrollbars.env = () => { - const {k: t, I: n, T: o, B: s, V: e, L: c, N: r, U: i, Y: l, q: a, F: u, G: d} = getEnvironment(); + const {k: t, I: n, T: o, B: s, V: e, L: c, N: r, U: l, Y: i, q: a, F: u, G: d} = getEnvironment(); return assignDeep({}, { scrollbarsSize: t, scrollbarsOverlaid: n, @@ -2727,8 +2730,8 @@ OverlayScrollbars.env = () => { flexboxGlue: e, cssCustomProperties: c, staticDefaultInitialization: r, - staticDefaultOptions: i, - getDefaultInitialization: l, + staticDefaultOptions: l, + getDefaultInitialization: i, setDefaultInitialization: a, getDefaultOptions: u, setDefaultOptions: d diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 630935d..4727343 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","../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.events.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.calculations.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 = (elm: HTMLElement, prop: string, val: string | number): void => {\r\n try {\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 } 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 elm && 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\nexport const directionIsRTL = (elm: HTMLElement | false | null | undefined): boolean =>\r\n style(elm, 'direction') === 'rtl';\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 const deepBoundaryIsValid =\r\n closest(closestDeepBoundaryElm, highBoundarySelector) === closestHighBoundaryElm;\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n (deepBoundaryIsValid &&\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !==\r\n 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 && parentElm) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\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 * 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 { round } = Math;\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, 'width')) || 0;\r\n return {\r\n w: cssWidth - round(cssWidth),\r\n h: cssHeight - 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, ReadonlyOptions } from 'options';\r\nimport type { DeepPartial } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: DeepPartial,\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: ReadonlyOptions,\r\n changedOptions: DeepPartial,\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 dataValueHostScrollbarHidden = 'scrollbarHidden';\r\nexport const dataValueHostUpdating = 'updating';\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 classNameViewportScrollbarHidden = `${classNameViewport}-scrollbar-hidden`;\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 classNameScrollbarRtl = `${classNameScrollbar}-rtl`;\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = `${classNameScrollbar}-track`;\r\nexport const classNameScrollbarHandle = `${classNameScrollbar}-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 classNamesScrollbarUnusable = `${classNameScrollbar}-unusable`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\r\nexport const classNamesScrollbarTrackInteractive = `${classNameScrollbarTrack}-interactive`;\r\nexport const classNamesScrollbarHandleInteractive = `${classNameScrollbarHandle}-interactive`;\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { DeepPartial, DeepReadonly } 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 showNativeOverlaidScrollbars: 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 pointers: string[] | null;\r\n };\r\n}\r\n\r\nexport type ReadonlyOptions = DeepReadonly;\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 showNativeOverlaidScrollbars: 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 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: 1300, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n pointers: ['mouse', 'touch', 'pen'], // null || array of supported pointers: https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\r\n },\r\n};\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\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 { 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 = () => pluginRegistry;\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n const pluginName = keys(plugin)[0];\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n};\r\n","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, DeepPartial } 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 DeepPartial, // 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: DeepPartial,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: DeepPartial = {};\r\n const optionsCopy: DeepPartial = { ...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: DeepPartial,\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 { DeepPartial } 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 showNativeOverlaidScrollbars: 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 pointers: [oTypes.array, oTypes.null], // string array\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};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => DeepPartial;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: DeepPartial, 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 rAF!(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 { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { DeepPartial } from 'typings';\r\nimport { Initialization } 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 _staticDefaultInitialization: Initialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): Initialization;\r\n _setDefaultInitialization(newInitialization: DeepPartial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: DeepPartial): 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, classNameViewportScrollbarHidden);\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 staticDefaultInitialization: Initialization = {\r\n host: null,\r\n padding: !nativeScrollbarsHiding,\r\n viewport: (target) => nativeScrollbarsHiding && target === target.ownerDocument.body && target,\r\n content: false,\r\n scrollbarsSlot: true,\r\n cancel: {\r\n nativeScrollbarsOverlaid: true,\r\n body: null,\r\n },\r\n };\r\n const staticDefaultOptions = 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 _getDefaultInitialization: assignDeep.bind(\r\n 0,\r\n {} as Initialization,\r\n staticDefaultInitialization\r\n ),\r\n _setDefaultInitialization(newInitializationStrategy) {\r\n assignDeep(staticDefaultInitialization, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, staticDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(staticDefaultOptions, newDefaultOptions);\r\n },\r\n _staticDefaultInitialization: assignDeep({}, staticDefaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, staticDefaultOptions),\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, isHTMLElement, isNull, isUndefined } from 'support';\r\nimport type { StructureInitialization } from 'setups/structureSetup';\r\nimport type { ScrollbarsInitialization } from 'setups/scrollbarsSetup';\r\nimport { getEnvironment } from 'environment';\r\nimport { DeepPartial } from 'typings';\r\nimport { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\ntype StaticInitialization = HTMLElement | false | null;\r\ntype DynamicInitialization = HTMLElement | boolean | null;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type Initialization = Omit &\r\n ScrollbarsInitialization & {\r\n cancel: {\r\n nativeScrollbarsOverlaid: boolean;\r\n body: boolean | null;\r\n };\r\n };\r\n\r\nexport type InitializationTargetObject = DeepPartial &\r\n Pick;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * With false, null or undefined the element will be generated, otherwise the specified element is taken.\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 taken as the repsective element.\r\n * With true the element will be generated.\r\n * With false, null or undefined the element won't be generated.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type FallbackInitializtationElement<\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 fallbackStaticInitializationElement: FallbackInitializtationElement,\r\n defaultStaticInitializationElementStrategy: T,\r\n staticInitializationElementValue?: T\r\n): HTMLElement => {\r\n const staticInitialization = isUndefined(staticInitializationElementValue)\r\n ? defaultStaticInitializationElementStrategy\r\n : staticInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n staticInitialization,\r\n args\r\n );\r\n return resolvedInitialization || fallbackStaticInitializationElement();\r\n};\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackDynamicInitializationElement: FallbackInitializtationElement,\r\n defaultDynamicInitializationElementStrategy: T,\r\n dynamicInitializationElementValue?: T\r\n): HTMLElement | false => {\r\n const dynamicInitialization = isUndefined(dynamicInitializationElementValue)\r\n ? defaultDynamicInitializationElementStrategy\r\n : dynamicInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n dynamicInitialization,\r\n args\r\n );\r\n return (\r\n !!resolvedInitialization &&\r\n (isHTMLElement(resolvedInitialization)\r\n ? resolvedInitialization\r\n : fallbackDynamicInitializationElement())\r\n );\r\n};\r\n\r\nconst cancelInitialization = (\r\n cancelInitializationValue: DeepPartial | false | null | undefined,\r\n structureSetupElements: StructureSetupElementsObj\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _isBody, _viewportIsTarget } = structureSetupElements;\r\n const { _getDefaultInitialization, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isUndefined(body) ? defaultbody : body;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n _isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_viewportIsTarget\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement, cancelInitialization };\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 noop,\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 classNameViewportScrollbarHidden,\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 {\r\n InitializationTarget,\r\n InitializationTargetElement,\r\n InitializationTargetObject,\r\n} from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\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 _scrollOffsetElement: HTMLElement;\r\n _scrollEventElement: HTMLElement | Document;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\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 { _getDefaultInitialization, _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: defaultHostInitialization,\r\n viewport: defaultViewportInitialization,\r\n padding: defaultPaddingInitialization,\r\n content: defaultContentInitialization,\r\n } = _getDefaultInitialization();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const {\r\n host: hostInitialization,\r\n padding: paddingInitialization,\r\n viewport: viewportInitialization,\r\n content: contentInitialization,\r\n } = targetStructureInitialization;\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const isBody = targetElement === ownerDocument.body;\r\n const wnd = ownerDocument.defaultView as Window;\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 = staticInitializationElement(\r\n createNewDiv,\r\n defaultViewportInitialization,\r\n viewportInitialization\r\n );\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const viewportIsTargetBody = viewportIsTarget && isBody;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(createNewDiv, defaultHostInitialization, hostInitialization)\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultPaddingInitialization,\r\n paddingInitialization\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultContentInitialization,\r\n contentInitialization\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\r\n _scrollOffsetElement: viewportIsTargetBody ? ownerDocument.documentElement : viewportElement,\r\n _scrollEventElement: viewportIsTargetBody ? ownerDocument : viewportElement,\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\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 const removeHtmlClass = viewportIsTargetBody\r\n ? addClass(parent(targetElement), classNameViewportScrollbarHidden)\r\n : noop;\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 removeHtmlClass();\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, classNameViewportScrollbarHidden));\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 classNameViewportScrollbarHidden,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostScrollbarHidden,\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 _isBody,\r\n _windowElm,\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 const viewportIsTargetBody = _isBody && _viewportIsTarget;\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('showNativeOverlaidScrollbars');\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 classNameViewportScrollbarHidden,\r\n dataValueHostScrollbarHidden,\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 viewportIsTargetBody\r\n ? _windowElm.innerWidth\r\n : arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n viewportIsTargetBody\r\n ? _windowElm.innerHeight\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 { dataValueHostUpdating } from 'classnames';\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, _viewportAddRemoveClass } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 _viewportAddRemoveClass('', dataValueHostUpdating, true);\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 _viewportAddRemoveClass('', dataValueHostUpdating);\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\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 appendChildren,\r\n directionIsRTL,\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 SizeObserver = [destroy: () => void, append: () => void];\r\n\r\nconst scrollAmount = 3333333;\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): SizeObserver => {\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 = directionIsRTL.bind(0, target);\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 : directionIsRTL(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\r\n return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n },\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 const [updateDirectionIsRTLCache] = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'scroll', (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTLCache, directionIsRTLCacheChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLCacheChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTLCache) {\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 appendChildren(target, sizeObserver);\r\n },\r\n ];\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n appendChildren,\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 append: () => 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 return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\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 const [destroySizeObserver, appendSizeObserver] = createSizeObserver(\r\n trinsicObserver,\r\n onSizeChanged\r\n );\r\n push(offListeners, destroySizeObserver);\r\n appendSizeObserver();\r\n onSizeChanged();\r\n }\r\n\r\n appendChildren(target, 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 noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n dataValueHostUpdating,\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 appendElements: () => 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 { _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 _viewportAddRemoveClass('', dataValueHostUpdating, true);\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 _viewportAddRemoveClass('', dataValueHostUpdating);\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\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\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 [destroyTrinsicObserver, appendTrinsicObserver, updateTrinsicObserver] =\r\n _content || !_flexboxGlue ? createTrinsicObserver(_host, onTrinsicChanged) : [noop, noop, noop];\r\n const [destroySizeObserver, appendSizeObserver] = !_viewportIsTarget\r\n ? createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: true,\r\n })\r\n : [noop, noop];\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 ResizeObserverConstructor &&\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 destroyTrinsicObserver();\r\n destroySizeObserver();\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n // order is matter!\r\n appendSizeObserver();\r\n appendTrinsicObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const trinsicUpdateResult = updateTrinsicObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[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 (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 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\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 && !_viewportIsTarget\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, ReadonlyOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { DeepPartial, 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: [updateHints: StructureSetupUpdateHints, changedOptions: DeepPartial, force: boolean];\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: ReadonlyOptions\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, appendStructureElements, 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, appendObserverElements, updateObservers, updateObserversOptions] =\r\n createStructureSetupObservers(elements, state, (updateHints) => {\r\n triggerUpdateEvent(updateStructure(checkOptionsFallback, updateHints), {}, false);\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 = () => {\r\n appendObserverElements();\r\n appendStructureElements();\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n 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 directionIsRTL,\r\n getBoundingClientRect,\r\n offsetSize,\r\n on,\r\n preventDefault,\r\n runEachAndClear,\r\n stopPropagation,\r\n XY,\r\n} from 'support';\r\nimport { classNamesScrollbarInteraction } from 'classnames';\r\nimport type { ReadonlyOptions } from 'options';\r\nimport type { StructureSetupState } from 'setups';\r\nimport type {\r\n ScrollbarsSetupElementsObj,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport type ScrollbarsSetupEvents = (\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollbarsAddRemoveClass: ScrollbarsSetupElementsObj['_scrollbarsAddRemoveClass'],\r\n documentElm: Document,\r\n scrollOffsetElm: HTMLElement,\r\n isHorizontal?: boolean\r\n) => () => void;\r\n\r\nconst { round } = Math;\r\nconst getClientOffset = (event: PointerEvent): XY => ({\r\n x: event.clientX,\r\n y: event.clientY,\r\n});\r\nconst getScale = (element: HTMLElement): XY => {\r\n const { width, height } = getBoundingClientRect(element);\r\n const { w, h } = offsetSize(element);\r\n return {\r\n x: round(width) / w || 1,\r\n y: round(height) / h || 1,\r\n };\r\n};\r\nconst continuePointerDown = (\r\n event: PointerEvent,\r\n options: ReadonlyOptions,\r\n scrollType: 'dragScroll' | 'clickScroll'\r\n) => {\r\n const scrollbarOptions = options.scrollbars;\r\n const { button, isPrimary, pointerType } = event;\r\n const { pointers } = scrollbarOptions;\r\n return (\r\n button === 0 &&\r\n isPrimary &&\r\n scrollbarOptions[scrollType] &&\r\n (pointers || []).includes(pointerType)\r\n );\r\n};\r\nconst createRootClickStopPropagationEvents = (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\nconst createDragScrollingEvents = (\r\n options: ReadonlyOptions,\r\n doc: Document,\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollOffsetElement: HTMLElement,\r\n structureSetupState: () => StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _rtlScrollBehavior } = getEnvironment();\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n const scrollOffsetKey = `scroll${isHorizontal ? 'Left' : 'Top'}`;\r\n const xyKey = `${isHorizontal ? 'x' : 'y'}`;\r\n const whKey = `${isHorizontal ? 'w' : 'h'}`;\r\n const createOnPointerMoveHandler =\r\n (mouseDownScroll: number, mouseDownClientOffset: number, mouseDownInvertedScale: number) =>\r\n (event: PointerEvent) => {\r\n const { _overflowAmount } = structureSetupState();\r\n const movement =\r\n (getClientOffset(event)[xyKey] - mouseDownClientOffset) * mouseDownInvertedScale;\r\n const handleTrackDiff = offsetSize(_track)[whKey] - offsetSize(_handle)[whKey];\r\n const scrollDeltaPercent = movement / handleTrackDiff;\r\n const scrollDelta = scrollDeltaPercent * _overflowAmount[xyKey];\r\n const isRTL = directionIsRTL(_scrollbar);\r\n const negateMultiplactor =\r\n isRTL && isHorizontal ? (_rtlScrollBehavior.n || _rtlScrollBehavior.i ? 1 : -1) : 1;\r\n\r\n scrollOffsetElement[scrollOffsetKey] = mouseDownScroll + scrollDelta * negateMultiplactor;\r\n };\r\n\r\n return on(_handle, 'pointerdown', (pointerDownEvent: PointerEvent) => {\r\n if (continuePointerDown(pointerDownEvent, options, 'dragScroll')) {\r\n const offSelectStart = on(doc, 'selectstart', (event: Event) => preventDefault(event), {\r\n _passive: false,\r\n });\r\n const offPointerMove = on(\r\n _handle,\r\n 'pointermove',\r\n createOnPointerMoveHandler(\r\n scrollOffsetElement[scrollOffsetKey] || 0,\r\n getClientOffset(pointerDownEvent)[xyKey],\r\n 1 / getScale(scrollOffsetElement)[xyKey]\r\n )\r\n );\r\n\r\n on(\r\n _handle,\r\n 'pointerup',\r\n (pointerUpEvent: PointerEvent) => {\r\n offSelectStart();\r\n offPointerMove();\r\n _handle.releasePointerCapture(pointerUpEvent.pointerId);\r\n },\r\n { _once: true }\r\n );\r\n _handle.setPointerCapture(pointerDownEvent.pointerId);\r\n }\r\n });\r\n};\r\n\r\nexport const createScrollbarsSetupEvents =\r\n (\r\n options: ReadonlyOptions,\r\n structureSetupState: () => StructureSetupState\r\n ): ScrollbarsSetupEvents =>\r\n (scrollbarStructure, scrollbarsAddRemoveClass, documentElm, scrollOffsetElm, isHorizontal) => {\r\n const { _scrollbar } = scrollbarStructure;\r\n\r\n return runEachAndClear.bind(0, [\r\n on(_scrollbar, 'pointerenter', () => {\r\n scrollbarsAddRemoveClass(classNamesScrollbarInteraction, true);\r\n }),\r\n on(_scrollbar, 'pointerleave pointercancel', () => {\r\n scrollbarsAddRemoveClass(classNamesScrollbarInteraction);\r\n }),\r\n createRootClickStopPropagationEvents(_scrollbar, documentElm),\r\n createDragScrollingEvents(\r\n options,\r\n documentElm,\r\n scrollbarStructure,\r\n scrollOffsetElm,\r\n structureSetupState,\r\n isHorizontal\r\n ),\r\n ]);\r\n };\r\n","import { offsetSize } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { StructureSetupState } from 'setups';\r\n\r\nconst { min, max, abs, round } = Math;\r\n\r\nexport const getScrollbarHandleLengthRatio = (\r\n scrollbarHandle: HTMLElement,\r\n scrollbarTrack: HTMLElement,\r\n isHorizontal?: boolean,\r\n structureSetupState?: StructureSetupState\r\n) => {\r\n if (structureSetupState) {\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n return max(0, min(1, viewportSize / (viewportSize + overflowAmount)));\r\n }\r\n const axis = isHorizontal ? 'w' : 'h';\r\n const handleSize = offsetSize(scrollbarHandle)[axis];\r\n const trackSize = offsetSize(scrollbarTrack)[axis];\r\n return max(0, min(1, handleSize / trackSize));\r\n};\r\n\r\nexport const getScrollbarHandleOffsetRatio = (\r\n scrollbarHandle: HTMLElement,\r\n scrollbarTrack: HTMLElement,\r\n scrollOffsetElement: HTMLElement,\r\n structureSetupState: StructureSetupState,\r\n isRTL: boolean,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _rtlScrollBehavior } = getEnvironment();\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const scrollLeftTop = isHorizontal ? 'Left' : 'Top';\r\n const { _overflowAmount } = structureSetupState;\r\n const scrollPositionMax = round(_overflowAmount[axis]);\r\n const scrollPosition = abs(scrollOffsetElement[`scroll${scrollLeftTop}`]);\r\n const handleRTL = isHorizontal && isRTL;\r\n const rtlNormalizedScrollPosition = _rtlScrollBehavior.i\r\n ? scrollPosition\r\n : scrollPositionMax - scrollPosition;\r\n const finalScrollPosition = handleRTL ? rtlNormalizedScrollPosition : scrollPosition;\r\n const scrollPercent = min(1, finalScrollPosition / scrollPositionMax);\r\n const lengthRatio = getScrollbarHandleLengthRatio(scrollbarHandle, scrollbarTrack, isHorizontal);\r\n\r\n return (1 / lengthRatio) * (1 - lengthRatio) * scrollPercent;\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n directionIsRTL,\r\n each,\r\n isBoolean,\r\n isEmptyArray,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\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 classNamesScrollbarTransitionless,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport {\r\n getScrollbarHandleLengthRatio,\r\n getScrollbarHandleOffsetRatio,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.calculations';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ScrollbarsSetupEvents } from 'setups/scrollbarsSetup/scrollbarsSetup.events';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\nimport type { StyleObject } from 'typings';\r\nimport { StructureSetupState } from 'setups';\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 _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _scrollbarsAddRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n isHorizontal?: boolean\r\n ) => void;\r\n _refreshScrollbarsHandleLength: (structureSetupState: StructureSetupState) => void;\r\n _refreshScrollbarsHandleOffset: (structureSetupState: StructureSetupState) => void;\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\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj,\r\n scrollbarsSetupEvents: ScrollbarsSetupEvents\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization } = getEnvironment();\r\n const { scrollbarsSlot: defaultScrollbarsSlot } = _getDefaultInitialization();\r\n const { _documentElm, _target, _host, _viewport, _targetIsElm, _scrollOffsetElement } =\r\n structureSetupElements;\r\n const { scrollbarsSlot } = (_targetIsElm ? {} : target) as ScrollbarsInitialization;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n defaultScrollbarsSlot,\r\n scrollbarsSlot\r\n );\r\n const scrollbarStructureAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\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 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 scrollbarStructureRefreshHandleLength = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n ) => {\r\n scrollbarsHandleStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _track } = structure;\r\n return [\r\n _handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(\r\n getScrollbarHandleLengthRatio(_handle, _track, isHorizontal, structureSetupState) * 100\r\n ).toFixed(3)}%`,\r\n },\r\n ];\r\n });\r\n };\r\n const scrollbarStructureRefreshHandleOffset = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n ) => {\r\n const translateAxis = isHorizontal ? 'X' : 'Y';\r\n scrollbarsHandleStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _track, _scrollbar } = structure;\r\n const offsetRatio = getScrollbarHandleOffsetRatio(\r\n _handle,\r\n _track,\r\n _scrollOffsetElement,\r\n structureSetupState,\r\n directionIsRTL(_scrollbar),\r\n isHorizontal\r\n );\r\n // eslint-disable-next-line no-self-compare\r\n const validOffsetRatio = offsetRatio === offsetRatio; // is false when offset is NaN\r\n return [\r\n _handle,\r\n {\r\n transform: validOffsetRatio\r\n ? `translate${translateAxis}(${(offsetRatio * 100).toFixed(3)}%)`\r\n : '',\r\n },\r\n ];\r\n });\r\n };\r\n\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const scrollbarsAddRemoveClass = (\r\n className: string | false | null | undefined,\r\n add?: boolean,\r\n onlyHorizontal?: boolean\r\n ) => {\r\n const singleAxis = isBoolean(onlyHorizontal);\r\n const runHorizontal = singleAxis ? onlyHorizontal : true;\r\n const runVertical = singleAxis ? !onlyHorizontal : true;\r\n runHorizontal && scrollbarStructureAddRemoveClass(horizontalScrollbars, className, add);\r\n runVertical && scrollbarStructureAddRemoveClass(verticalScrollbars, className, add);\r\n };\r\n const refreshScrollbarsHandleLength = (structureSetupState: StructureSetupState) => {\r\n scrollbarStructureRefreshHandleLength(horizontalScrollbars, structureSetupState, true);\r\n scrollbarStructureRefreshHandleLength(verticalScrollbars, structureSetupState);\r\n };\r\n const refreshScrollbarsHandleOffset = (structureSetupState: StructureSetupState) => {\r\n scrollbarStructureRefreshHandleOffset(horizontalScrollbars, structureSetupState, true);\r\n scrollbarStructureRefreshHandleOffset(verticalScrollbars, structureSetupState);\r\n };\r\n const generateScrollbarDOM = (isHorizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = isHorizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = isHorizontal ? 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 scrollbarsSetupEvents(\r\n result,\r\n scrollbarsAddRemoveClass,\r\n _documentElm,\r\n _scrollOffsetElement,\r\n isHorizontal\r\n ),\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 scrollbarsAddRemoveClass(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _refreshScrollbarsHandleLength: refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset: refreshScrollbarsHandleOffset,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\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 {\r\n rAF,\r\n cAF,\r\n isFunction,\r\n on,\r\n runEachAndClear,\r\n setT,\r\n clearT,\r\n parent,\r\n scrollLeft,\r\n scrollTop,\r\n} from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createScrollbarsSetupEvents } from 'setups/scrollbarsSetup/scrollbarsSetup.events';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarUnusable,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n classNamesScrollbarHandleInteractive,\r\n classNamesScrollbarTrackInteractive,\r\n classNameScrollbarRtl,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOptions,\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 { DeepPartial, 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 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: ReadonlyOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup<\r\n ScrollbarsSetupState,\r\n ScrollbarsSetupStaticState,\r\n [DeepPartial]\r\n> => {\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 createScrollbarsSetupEvents(options, structureSetupState)\r\n );\r\n const {\r\n _host,\r\n _viewport,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n _viewportIsTarget,\r\n _isBody,\r\n } = structureSetupState._elements;\r\n const {\r\n _horizontal,\r\n _vertical,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset,\r\n } = elements;\r\n const { _handleStyle: styleHorizontal } = _horizontal;\r\n const { _handleStyle: styleVertical } = _vertical;\r\n const styleScrollbarPosition = (structure: ScrollbarStructure) => {\r\n const { _scrollbar } = structure;\r\n const elm = _viewportIsTarget && !_isBody && parent(_scrollbar) === _viewport && _scrollbar;\r\n return [\r\n elm,\r\n {\r\n transform: elm\r\n ? `translate(${scrollLeft(_scrollOffsetElement)}px, ${scrollTop(_scrollOffsetElement)}px)`\r\n : '',\r\n },\r\n ] as [HTMLElement | false, StyleObject];\r\n };\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => scrollbarsAddRemoveClass(classNamesScrollbarAutoHidden, true);\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\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, 'pointerover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'pointerenter', onHostMouseEnter),\r\n on(_host, 'pointerleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'pointermove', () => {\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(_scrollEventElement, 'scroll', () => {\r\n requestScrollAnimationFrame(() => {\r\n _refreshScrollbarsHandleOffset(structureSetupState());\r\n\r\n autoHideNotNever && manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n\r\n _viewportIsTarget && styleHorizontal(styleScrollbarPosition);\r\n _viewportIsTarget && styleVertical(styleScrollbarPosition);\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 {\r\n _overflowEdgeChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _directionChanged,\r\n } = structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n const { _overflowAmount, _overflowStyle, _directionIsRTL } = currStructureSetupState;\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 [dragScroll, dragScrollChanged] = checkOption('scrollbars.dragScroll');\r\n const [clickScroll, clickScrollChanged] = checkOption('scrollbars.clickScroll');\r\n\r\n const updateHandle =\r\n _overflowEdgeChanged || _overflowAmountChanged || _directionChanged || force;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged || force;\r\n\r\n const setScrollbarVisibility = (overflowStyle: OverflowStyle, isHorizontal: boolean) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n scrollbarsAddRemoveClass(classNamesScrollbarVisible, isVisible, isHorizontal);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (themeChanged) {\r\n scrollbarsAddRemoveClass(prevTheme);\r\n scrollbarsAddRemoveClass(theme, true);\r\n\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 (dragScrollChanged) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarHandleInteractive, dragScroll);\r\n }\r\n if (clickScrollChanged) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarTrackInteractive, clickScroll);\r\n }\r\n if (updateVisibility) {\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, true);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, false);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n scrollbarsAddRemoveClass(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (updateHandle) {\r\n _refreshScrollbarsHandleLength(currStructureSetupState);\r\n _refreshScrollbarsHandleOffset(currStructureSetupState);\r\n\r\n scrollbarsAddRemoveClass(classNamesScrollbarUnusable, !_overflowAmount.x, true);\r\n scrollbarsAddRemoveClass(classNamesScrollbarUnusable, !_overflowAmount.y, false);\r\n scrollbarsAddRemoveClass(classNameScrollbarRtl, _directionIsRTL && !_isBody);\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, ReadonlyOptions } 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 { DeepPartial, OverflowStyle } from 'typings';\r\nimport { InitializationTarget, Initialization, cancelInitialization } from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\nimport {\r\n ScrollbarsSetupElement,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget,\r\n options?: DeepPartial,\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 staticDefaultInitialization: Initialization;\r\n staticDefaultOptions: Options;\r\n\r\n getDefaultInitialization(): Initialization;\r\n setDefaultInitialization(newDefaultInitialization: DeepPartial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: DeepPartial): 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 directionRTL: boolean;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface ScrollbarElements {\r\n scrollbar: HTMLElement;\r\n track: HTMLElement;\r\n handle: HTMLElement;\r\n}\r\n\r\nexport interface CloneableScrollbarElements extends ScrollbarElements {\r\n clone(): ScrollbarElements;\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 scrollOffsetElement: HTMLElement;\r\n scrollEventElement: HTMLElement | Document;\r\n scrollbarHorizontal: CloneableScrollbarElements;\r\n scrollbarVertical: CloneableScrollbarElements;\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: DeepPartial;\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, canceled: 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?: DeepPartial): 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 { _getDefaultOptions, _addListener: addEnvListener } = getEnvironment();\r\n const plugins = getPlugins();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? 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?: DeepPartial) => {\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: ReadonlyOptions = 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: DeepPartial, force?: boolean) => {\r\n updateStructure(changedOptions, !!force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (canceled?: 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, !!canceled]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: DeepPartial) {\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 _directionIsRTL,\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 directionRTL: _directionIsRTL,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const {\r\n _target,\r\n _host,\r\n _padding,\r\n _viewport,\r\n _content,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n } = structureState._elements;\r\n const { _horizontal, _vertical } = scrollbarsState._elements;\r\n const translateScrollbarStructure = (\r\n scrollbarStructure: ScrollbarStructure\r\n ): ScrollbarElements => {\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n return {\r\n scrollbar: _scrollbar,\r\n track: _track,\r\n handle: _handle,\r\n };\r\n };\r\n const translateScrollbarsSetupElement = (\r\n scrollbarsSetupElement: ScrollbarsSetupElement\r\n ): CloneableScrollbarElements => {\r\n const { _scrollbarStructures, _clone } = scrollbarsSetupElement;\r\n const translatedStructure = translateScrollbarStructure(_scrollbarStructures[0]);\r\n\r\n return assignDeep({}, translatedStructure, {\r\n clone: () => {\r\n const result = translateScrollbarStructure(_clone());\r\n updateScrollbars({}, true, {});\r\n return result;\r\n },\r\n });\r\n };\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 scrollOffsetElement: _scrollOffsetElement,\r\n scrollEventElement: _scrollEventElement,\r\n scrollbarHorizontal: translateScrollbarsSetupElement(_horizontal),\r\n scrollbarVertical: translateScrollbarsSetupElement(_vertical),\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 (cancelInitialization(!targetIsElement && target.cancel, structureState._elements)) {\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 _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\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 staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\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","o","_initialValue","u","_equal","_","_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","deepBoundaryIsValid","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","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","g","_timeout","v","_maxDelay","p","_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","directionIsRTL","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","preventDefault","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostScrollbarHidden","dataValueHostUpdating","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarHidden","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarRtl","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarUnusable","classNamesScrollbarAutoHidden","classNamesScrollbarTrackInteractive","classNamesScrollbarHandleInteractive","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","showNativeOverlaidScrollbars","updating","elementEvents","attributes","ignoreMutation","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","pointers","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","optionsTemplateTypes","boolean","number","string","object","function","null","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsValidationPluginName","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","T","_nativeScrollbarsHiding","I","_nativeScrollbarsOverlaid","L","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","P","_viewportPaddingStyle","D","_scrollbarsHideOffset","M","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","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","nativeScrollbarsOverlaid","staticDefaultInitialization","host","padding","ownerDocument","content","scrollbarsSlot","cancel","staticDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElementStrategy","staticInitializationElementValue","staticInitialization","resolvedInitialization","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElementStrategy","dynamicInitializationElementValue","dynamicInitialization","cancelInitialization","cancelInitializationValue","structureSetupElements","W","_isBody","X","_viewportIsTarget","Y","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","defaultHostInitialization","defaultViewportInitialization","defaultPaddingInitialization","defaultContentInitialization","targetIsElm","targetStructureInitialization","hostInitialization","paddingInitialization","viewportInitialization","contentInitialization","targetElement","isTextarea","isBody","wnd","defaultView","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","viewportIsTarget","viewportIsTargetBody","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_scrollOffsetElement","documentElement","_scrollEventElement","_windowElm","_documentElm","_isTextarea","_targetIsElm","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","J","K","tt","Z","nt","ot","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","removeHtmlClass","createTrinsicUpdateSegment","updateHints","V","ft","_heightIntrinsic","_t","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_nativeScrollbarStyling","vt","_directionIsRTL","ht","gt","wt","_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","dt","ct","k","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowEdge","getCurrentOverflowEdgeCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","bt","St","_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","yt","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","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","resizeObserverInstance","observe","disconnect","pluginAppearCallback","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLCache","directionIsRTLCacheChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","destroySizeObserver","appendSizeObserver","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Pt","_attributes","Dt","_styleChangingAttributes","Mt","_eventContentChange","Rt","_nestedTargetSelector","kt","_ignoreTargetChange","Bt","_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","it","ut","updateContentSizeCache","hasOver","hasVpStyle","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","directionIsRTLChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","appendTrinsicObserver","updateTrinsicObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","trinsicUpdateResult","contentUpdateResult","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","appendStructureElements","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","appendObserverElements","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","getClientOffset","clientX","clientY","getScale","element","continuePointerDown","scrollType","scrollbarOptions","button","isPrimary","pointerType","includes","createRootClickStopPropagationEvents","scrollbar","documentElm","createDragScrollingEvents","doc","scrollbarStructure","scrollOffsetElement","isHorizontal","B","qt","_handle","Ft","_track","Gt","_scrollbar","scrollOffsetKey","xyKey","whKey","createOnPointerMoveHandler","mouseDownScroll","mouseDownClientOffset","mouseDownInvertedScale","Ot","movement","handleTrackDiff","scrollDeltaPercent","scrollDelta","isRTL","negateMultiplactor","pointerDownEvent","offSelectStart","offPointerMove","pointerUpEvent","releasePointerCapture","pointerId","setPointerCapture","createScrollbarsSetupEvents","scrollbarsAddRemoveClass","scrollOffsetElm","min","getScrollbarHandleLengthRatio","scrollbarHandle","scrollbarTrack","axis","Ct","viewportSize","handleSize","trackSize","getScrollbarHandleOffsetRatio","scrollLeftTop","scrollPositionMax","scrollPosition","handleRTL","rtlNormalizedScrollPosition","finalScrollPosition","scrollPercent","lengthRatio","createScrollbarsSetupElements","scrollbarsSetupEvents","defaultScrollbarsSlot","rt","lt","st","evaluatedScrollbarSlot","scrollbarStructureAddRemoveClass","scrollbarStructures","scrollbarsHandleStyle","scrollbarStructureRefreshHandleLength","structure","toFixed","scrollbarStructureRefreshHandleOffset","translateAxis","offsetRatio","validOffsetRatio","transform","horizontalScrollbars","verticalScrollbars","onlyHorizontal","singleAxis","runHorizontal","runVertical","refreshScrollbarsHandleLength","refreshScrollbarsHandleOffset","generateScrollbarDOM","scrollbarClassName","arrToPush","transitionlessClass","track","handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_refreshScrollbarsHandleLength","_refreshScrollbarsHandleOffset","_scrollbarsAddRemoveClass","_horizontal","_scrollbarStructures","_clone","_handleStyle","_vertical","createSelfCancelTimeout","id","setTFn","clearTFn","createScrollbarsSetup","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","prevTheme","globalAutoHideDelay","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","clearScrollTimeout","auotHideMoveTimeout","clearAutoHideTimeout","auotHideTimeout","clearAutoTimeout","et","Xt","Qt","Nt","Ut","styleHorizontal","styleVertical","styleScrollbarPosition","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","Tt","zt","At","currStructureSetupState","xt","themeChanged","visibilityChanged","autoHideChanged","dragScrollChanged","clickScrollChanged","updateHandle","updateVisibility","setScrollbarVisibility","isVisible","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","F","addEnvListener","plugins","targetIsElement","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","canceled","instance","Et","directionRTL","translateScrollbarStructure","translateScrollbarsSetupElement","scrollbarsSetupElement","Jt","Kt","translatedStructure","scrollEventElement","scrollbarHorizontal","scrollbarVertical","pluginInstance","sizeChanged","hostMutation","N","U","q","G","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","getDefaultInitialization","setDefaultInitialization","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"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","../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.events.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.calculations.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 = (elm: HTMLElement, prop: string, val: string | number): void => {\r\n try {\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 } 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(elm: HTMLElement | false | null | undefined, styles: string): 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 elm && 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\nexport const directionIsRTL = (elm: HTMLElement | false | null | undefined): boolean =>\r\n style(elm, 'direction') === 'rtl';\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-next-line no-restricted-syntax, no-unreachable-loop, 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 const deepBoundaryIsValid =\r\n closest(closestDeepBoundaryElm, highBoundarySelector) === closestHighBoundaryElm;\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n (deepBoundaryIsValid &&\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !==\r\n 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 && parentElm) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\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 * 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 { round } = Math;\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, 'width')) || 0;\r\n return {\r\n w: cssWidth - round(cssWidth),\r\n h: cssHeight - 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 // eslint-disable-next-line @typescript-eslint/no-shadow\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 (...eventArgs: 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, ReadonlyOptions } from 'options';\r\nimport type { DeepPartial } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: DeepPartial,\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: ReadonlyOptions,\r\n changedOptions: DeepPartial,\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 dataValueHostScrollbarHidden = 'scrollbarHidden';\r\nexport const dataValueHostUpdating = 'updating';\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 classNameViewportScrollbarHidden = `${classNameViewport}-scrollbar-hidden`;\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 classNameScrollbarRtl = `${classNameScrollbar}-rtl`;\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = `${classNameScrollbar}-track`;\r\nexport const classNameScrollbarHandle = `${classNameScrollbar}-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 classNamesScrollbarUnusable = `${classNameScrollbar}-unusable`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\r\nexport const classNamesScrollbarTrackInteractive = `${classNameScrollbarTrack}-interactive`;\r\nexport const classNamesScrollbarHandleInteractive = `${classNameScrollbarHandle}-interactive`;\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { DeepPartial, DeepReadonly } 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 showNativeOverlaidScrollbars: 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 pointers: string[] | null;\r\n };\r\n}\r\n\r\nexport type ReadonlyOptions = DeepReadonly;\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 showNativeOverlaidScrollbars: 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 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: 1300, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n pointers: ['mouse', 'touch', 'pen'], // null || array of supported pointers: https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\r\n },\r\n};\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\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 { 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 = () => pluginRegistry;\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]): void => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n const pluginName = keys(plugin)[0];\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n};\r\n","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, DeepPartial } 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 DeepPartial, // 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: DeepPartial,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: DeepPartial = {};\r\n const optionsCopy: DeepPartial = { ...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: DeepPartial,\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 { DeepPartial } 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 showNativeOverlaidScrollbars: 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 pointers: [oTypes.array, oTypes.null], // string array\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};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => DeepPartial;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: DeepPartial, 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 rAF!(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 { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { DeepPartial } from 'typings';\r\nimport { Initialization } 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 _staticDefaultInitialization: Initialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): Initialization;\r\n _setDefaultInitialization(newInitialization: DeepPartial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: DeepPartial): 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, classNameViewportScrollbarHidden);\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 staticDefaultInitialization: Initialization = {\r\n host: null,\r\n padding: !nativeScrollbarsHiding,\r\n viewport: (target) => nativeScrollbarsHiding && target === target.ownerDocument.body && target,\r\n content: false,\r\n scrollbarsSlot: true,\r\n cancel: {\r\n nativeScrollbarsOverlaid: true,\r\n body: null,\r\n },\r\n };\r\n const staticDefaultOptions = 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 _getDefaultInitialization: assignDeep.bind(\r\n 0,\r\n {} as Initialization,\r\n staticDefaultInitialization\r\n ),\r\n _setDefaultInitialization(newInitializationStrategy) {\r\n assignDeep(staticDefaultInitialization, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, staticDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(staticDefaultOptions, newDefaultOptions);\r\n },\r\n _staticDefaultInitialization: assignDeep({}, staticDefaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, staticDefaultOptions),\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, isHTMLElement, isNull, isUndefined } from 'support';\r\nimport type { StructureInitialization } from 'setups/structureSetup';\r\nimport type { ScrollbarsInitialization } from 'setups/scrollbarsSetup';\r\nimport { getEnvironment } from 'environment';\r\nimport { DeepPartial } from 'typings';\r\nimport { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\ntype StaticInitialization = HTMLElement | false | null;\r\ntype DynamicInitialization = HTMLElement | boolean | null;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type Initialization = Omit &\r\n ScrollbarsInitialization & {\r\n cancel: {\r\n nativeScrollbarsOverlaid: boolean;\r\n body: boolean | null;\r\n };\r\n };\r\n\r\nexport type InitializationTargetObject = DeepPartial &\r\n Pick;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * With false, null or undefined the element will be generated, otherwise the specified element is taken.\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 taken as the repsective element.\r\n * With true the element will be generated.\r\n * With false, null or undefined the element won't be generated.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type FallbackInitializtationElement<\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 fallbackStaticInitializationElement: FallbackInitializtationElement,\r\n defaultStaticInitializationElementStrategy: T,\r\n staticInitializationElementValue?: T\r\n): HTMLElement => {\r\n const staticInitialization = isUndefined(staticInitializationElementValue)\r\n ? defaultStaticInitializationElementStrategy\r\n : staticInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n staticInitialization,\r\n args\r\n );\r\n return resolvedInitialization || fallbackStaticInitializationElement();\r\n};\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackDynamicInitializationElement: FallbackInitializtationElement,\r\n defaultDynamicInitializationElementStrategy: T,\r\n dynamicInitializationElementValue?: T\r\n): HTMLElement | false => {\r\n const dynamicInitialization = isUndefined(dynamicInitializationElementValue)\r\n ? defaultDynamicInitializationElementStrategy\r\n : dynamicInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n dynamicInitialization,\r\n args\r\n );\r\n return (\r\n !!resolvedInitialization &&\r\n (isHTMLElement(resolvedInitialization)\r\n ? resolvedInitialization\r\n : fallbackDynamicInitializationElement())\r\n );\r\n};\r\n\r\nconst cancelInitialization = (\r\n cancelInitializationValue: DeepPartial | false | null | undefined,\r\n structureSetupElements: StructureSetupElementsObj\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _isBody, _viewportIsTarget } = structureSetupElements;\r\n const { _getDefaultInitialization, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isUndefined(body) ? defaultbody : body;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n _isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_viewportIsTarget\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement, cancelInitialization };\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 noop,\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 classNameViewportScrollbarHidden,\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 {\r\n InitializationTarget,\r\n InitializationTargetElement,\r\n InitializationTargetObject,\r\n} from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\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 _scrollOffsetElement: HTMLElement;\r\n _scrollEventElement: HTMLElement | Document;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\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 { _getDefaultInitialization, _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: defaultHostInitialization,\r\n viewport: defaultViewportInitialization,\r\n padding: defaultPaddingInitialization,\r\n content: defaultContentInitialization,\r\n } = _getDefaultInitialization();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const {\r\n host: hostInitialization,\r\n padding: paddingInitialization,\r\n viewport: viewportInitialization,\r\n content: contentInitialization,\r\n } = targetStructureInitialization;\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const isBody = targetElement === ownerDocument.body;\r\n const wnd = ownerDocument.defaultView as Window;\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 = staticInitializationElement(\r\n createNewDiv,\r\n defaultViewportInitialization,\r\n viewportInitialization\r\n );\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const viewportIsTargetBody = viewportIsTarget && isBody;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(createNewDiv, defaultHostInitialization, hostInitialization)\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultPaddingInitialization,\r\n paddingInitialization\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultContentInitialization,\r\n contentInitialization\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\r\n _scrollOffsetElement: viewportIsTargetBody ? ownerDocument.documentElement : viewportElement,\r\n _scrollEventElement: viewportIsTargetBody ? ownerDocument : viewportElement,\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\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 let 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 const removeHtmlClass = viewportIsTargetBody\r\n ? addClass(parent(targetElement), classNameViewportScrollbarHidden)\r\n : noop;\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 removeHtmlClass();\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, classNameViewportScrollbarHidden));\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 // @ts-ignore\r\n targetContents = 0;\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 classNameViewportScrollbarHidden,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostScrollbarHidden,\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 _isBody,\r\n _windowElm,\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 const viewportIsTargetBody = _isBody && _viewportIsTarget;\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('showNativeOverlaidScrollbars');\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 classNameViewportScrollbarHidden,\r\n dataValueHostScrollbarHidden,\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 viewportIsTargetBody\r\n ? _windowElm.innerWidth\r\n : arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n viewportIsTargetBody\r\n ? _windowElm.innerHeight\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 { dataValueHostUpdating } from 'classnames';\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, _viewportAddRemoveClass } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 _viewportAddRemoveClass('', dataValueHostUpdating, true);\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 _viewportAddRemoveClass('', dataValueHostUpdating);\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\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 appendChildren,\r\n directionIsRTL,\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 SizeObserver = [destroy: () => void, append: () => void];\r\n\r\nconst scrollAmount = 3333333;\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): SizeObserver => {\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 = directionIsRTL.bind(0, target);\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 : directionIsRTL(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\r\n return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n },\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 const [updateDirectionIsRTLCache] = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'scroll', (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTLCache, directionIsRTLCacheChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLCacheChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTLCache) {\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 appendChildren(target, sizeObserver);\r\n },\r\n ];\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n appendChildren,\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 append: () => 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 return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\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 const [destroySizeObserver, appendSizeObserver] = createSizeObserver(\r\n trinsicObserver,\r\n onSizeChanged\r\n );\r\n push(offListeners, destroySizeObserver);\r\n appendSizeObserver();\r\n onSizeChanged();\r\n }\r\n\r\n appendChildren(target, 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 noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n dataValueHostUpdating,\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 appendElements: () => 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 { _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 _viewportAddRemoveClass('', dataValueHostUpdating, true);\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 _viewportAddRemoveClass('', dataValueHostUpdating);\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\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\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 [destroyTrinsicObserver, appendTrinsicObserver, updateTrinsicObserver] =\r\n _content || !_flexboxGlue ? createTrinsicObserver(_host, onTrinsicChanged) : [noop, noop, noop];\r\n const [destroySizeObserver, appendSizeObserver] = !_viewportIsTarget\r\n ? createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: true,\r\n })\r\n : [noop, noop];\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 ResizeObserverConstructor &&\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 destroyTrinsicObserver();\r\n destroySizeObserver();\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n // order is matter!\r\n appendSizeObserver();\r\n appendTrinsicObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const trinsicUpdateResult = updateTrinsicObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[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 (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 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\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 && !_viewportIsTarget\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, ReadonlyOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { DeepPartial, 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: [updateHints: StructureSetupUpdateHints, changedOptions: DeepPartial, force: boolean];\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: ReadonlyOptions\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, appendStructureElements, 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, appendObserverElements, updateObservers, updateObserversOptions] =\r\n createStructureSetupObservers(elements, state, (updateHints) => {\r\n triggerUpdateEvent(updateStructure(checkOptionsFallback, updateHints), {}, false);\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 = () => {\r\n appendObserverElements();\r\n appendStructureElements();\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n 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 directionIsRTL,\r\n getBoundingClientRect,\r\n offsetSize,\r\n on,\r\n preventDefault,\r\n runEachAndClear,\r\n stopPropagation,\r\n XY,\r\n} from 'support';\r\nimport { classNamesScrollbarInteraction } from 'classnames';\r\nimport type { ReadonlyOptions } from 'options';\r\nimport type { StructureSetupState } from 'setups';\r\nimport type {\r\n ScrollbarsSetupElementsObj,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport type ScrollbarsSetupEvents = (\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollbarsAddRemoveClass: ScrollbarsSetupElementsObj['_scrollbarsAddRemoveClass'],\r\n documentElm: Document,\r\n scrollOffsetElm: HTMLElement,\r\n isHorizontal?: boolean\r\n) => () => void;\r\n\r\nconst { round } = Math;\r\nconst getClientOffset = (event: PointerEvent): XY => ({\r\n x: event.clientX,\r\n y: event.clientY,\r\n});\r\nconst getScale = (element: HTMLElement): XY => {\r\n const { width, height } = getBoundingClientRect(element);\r\n const { w, h } = offsetSize(element);\r\n return {\r\n x: round(width) / w || 1,\r\n y: round(height) / h || 1,\r\n };\r\n};\r\nconst continuePointerDown = (\r\n event: PointerEvent,\r\n options: ReadonlyOptions,\r\n scrollType: 'dragScroll' | 'clickScroll'\r\n) => {\r\n const scrollbarOptions = options.scrollbars;\r\n const { button, isPrimary, pointerType } = event;\r\n const { pointers } = scrollbarOptions;\r\n return (\r\n button === 0 &&\r\n isPrimary &&\r\n scrollbarOptions[scrollType] &&\r\n (pointers || []).includes(pointerType)\r\n );\r\n};\r\nconst createRootClickStopPropagationEvents = (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\nconst createDragScrollingEvents = (\r\n options: ReadonlyOptions,\r\n doc: Document,\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollOffsetElement: HTMLElement,\r\n structureSetupState: () => StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _rtlScrollBehavior } = getEnvironment();\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n const scrollOffsetKey = `scroll${isHorizontal ? 'Left' : 'Top'}`;\r\n const xyKey = `${isHorizontal ? 'x' : 'y'}`;\r\n const whKey = `${isHorizontal ? 'w' : 'h'}`;\r\n const createOnPointerMoveHandler =\r\n (mouseDownScroll: number, mouseDownClientOffset: number, mouseDownInvertedScale: number) =>\r\n (event: PointerEvent) => {\r\n const { _overflowAmount } = structureSetupState();\r\n const movement =\r\n (getClientOffset(event)[xyKey] - mouseDownClientOffset) * mouseDownInvertedScale;\r\n const handleTrackDiff = offsetSize(_track)[whKey] - offsetSize(_handle)[whKey];\r\n const scrollDeltaPercent = movement / handleTrackDiff;\r\n const scrollDelta = scrollDeltaPercent * _overflowAmount[xyKey];\r\n const isRTL = directionIsRTL(_scrollbar);\r\n const negateMultiplactor =\r\n isRTL && isHorizontal ? (_rtlScrollBehavior.n || _rtlScrollBehavior.i ? 1 : -1) : 1;\r\n\r\n scrollOffsetElement[scrollOffsetKey] = mouseDownScroll + scrollDelta * negateMultiplactor;\r\n };\r\n\r\n return on(_handle, 'pointerdown', (pointerDownEvent: PointerEvent) => {\r\n if (continuePointerDown(pointerDownEvent, options, 'dragScroll')) {\r\n const offSelectStart = on(doc, 'selectstart', (event: Event) => preventDefault(event), {\r\n _passive: false,\r\n });\r\n const offPointerMove = on(\r\n _handle,\r\n 'pointermove',\r\n createOnPointerMoveHandler(\r\n scrollOffsetElement[scrollOffsetKey] || 0,\r\n getClientOffset(pointerDownEvent)[xyKey],\r\n 1 / getScale(scrollOffsetElement)[xyKey]\r\n )\r\n );\r\n\r\n on(\r\n _handle,\r\n 'pointerup',\r\n (pointerUpEvent: PointerEvent) => {\r\n offSelectStart();\r\n offPointerMove();\r\n _handle.releasePointerCapture(pointerUpEvent.pointerId);\r\n },\r\n { _once: true }\r\n );\r\n _handle.setPointerCapture(pointerDownEvent.pointerId);\r\n }\r\n });\r\n};\r\n\r\nexport const createScrollbarsSetupEvents =\r\n (\r\n options: ReadonlyOptions,\r\n structureSetupState: () => StructureSetupState\r\n ): ScrollbarsSetupEvents =>\r\n (scrollbarStructure, scrollbarsAddRemoveClass, documentElm, scrollOffsetElm, isHorizontal) => {\r\n const { _scrollbar } = scrollbarStructure;\r\n\r\n return runEachAndClear.bind(0, [\r\n on(_scrollbar, 'pointerenter', () => {\r\n scrollbarsAddRemoveClass(classNamesScrollbarInteraction, true);\r\n }),\r\n on(_scrollbar, 'pointerleave pointercancel', () => {\r\n scrollbarsAddRemoveClass(classNamesScrollbarInteraction);\r\n }),\r\n createRootClickStopPropagationEvents(_scrollbar, documentElm),\r\n createDragScrollingEvents(\r\n options,\r\n documentElm,\r\n scrollbarStructure,\r\n scrollOffsetElm,\r\n structureSetupState,\r\n isHorizontal\r\n ),\r\n ]);\r\n };\r\n","import { offsetSize } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { StructureSetupState } from 'setups';\r\n\r\nconst { min, max, abs, round } = Math;\r\n\r\nexport const getScrollbarHandleLengthRatio = (\r\n scrollbarHandle: HTMLElement,\r\n scrollbarTrack: HTMLElement,\r\n isHorizontal?: boolean,\r\n structureSetupState?: StructureSetupState\r\n) => {\r\n if (structureSetupState) {\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n return max(0, min(1, viewportSize / (viewportSize + overflowAmount)));\r\n }\r\n const axis = isHorizontal ? 'w' : 'h';\r\n const handleSize = offsetSize(scrollbarHandle)[axis];\r\n const trackSize = offsetSize(scrollbarTrack)[axis];\r\n return max(0, min(1, handleSize / trackSize));\r\n};\r\n\r\nexport const getScrollbarHandleOffsetRatio = (\r\n scrollbarHandle: HTMLElement,\r\n scrollbarTrack: HTMLElement,\r\n scrollOffsetElement: HTMLElement,\r\n structureSetupState: StructureSetupState,\r\n isRTL: boolean,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _rtlScrollBehavior } = getEnvironment();\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const scrollLeftTop = isHorizontal ? 'Left' : 'Top';\r\n const { _overflowAmount } = structureSetupState;\r\n const scrollPositionMax = round(_overflowAmount[axis]);\r\n const scrollPosition = abs(scrollOffsetElement[`scroll${scrollLeftTop}`]);\r\n const handleRTL = isHorizontal && isRTL;\r\n const rtlNormalizedScrollPosition = _rtlScrollBehavior.i\r\n ? scrollPosition\r\n : scrollPositionMax - scrollPosition;\r\n const finalScrollPosition = handleRTL ? rtlNormalizedScrollPosition : scrollPosition;\r\n const scrollPercent = min(1, finalScrollPosition / scrollPositionMax);\r\n const lengthRatio = getScrollbarHandleLengthRatio(scrollbarHandle, scrollbarTrack, isHorizontal);\r\n\r\n return (1 / lengthRatio) * (1 - lengthRatio) * scrollPercent;\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n directionIsRTL,\r\n each,\r\n isBoolean,\r\n isEmptyArray,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\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 classNamesScrollbarTransitionless,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport {\r\n getScrollbarHandleLengthRatio,\r\n getScrollbarHandleOffsetRatio,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.calculations';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ScrollbarsSetupEvents } from 'setups/scrollbarsSetup/scrollbarsSetup.events';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\nimport type { StyleObject } from 'typings';\r\nimport { StructureSetupState } from 'setups';\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 _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _scrollbarsAddRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n isHorizontal?: boolean\r\n ) => void;\r\n _refreshScrollbarsHandleLength: (structureSetupState: StructureSetupState) => void;\r\n _refreshScrollbarsHandleOffset: (structureSetupState: StructureSetupState) => void;\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\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj,\r\n scrollbarsSetupEvents: ScrollbarsSetupEvents\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization } = getEnvironment();\r\n const { scrollbarsSlot: defaultScrollbarsSlot } = _getDefaultInitialization();\r\n const { _documentElm, _target, _host, _viewport, _targetIsElm, _scrollOffsetElement } =\r\n structureSetupElements;\r\n const { scrollbarsSlot } = (_targetIsElm ? {} : target) as ScrollbarsInitialization;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n defaultScrollbarsSlot,\r\n scrollbarsSlot\r\n );\r\n const scrollbarStructureAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\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 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 scrollbarStructureRefreshHandleLength = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n ) => {\r\n scrollbarsHandleStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _track } = structure;\r\n return [\r\n _handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(\r\n getScrollbarHandleLengthRatio(_handle, _track, isHorizontal, structureSetupState) * 100\r\n ).toFixed(3)}%`,\r\n },\r\n ];\r\n });\r\n };\r\n const scrollbarStructureRefreshHandleOffset = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n ) => {\r\n const translateAxis = isHorizontal ? 'X' : 'Y';\r\n scrollbarsHandleStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _track, _scrollbar } = structure;\r\n const offsetRatio = getScrollbarHandleOffsetRatio(\r\n _handle,\r\n _track,\r\n _scrollOffsetElement,\r\n structureSetupState,\r\n directionIsRTL(_scrollbar),\r\n isHorizontal\r\n );\r\n // eslint-disable-next-line no-self-compare\r\n const validOffsetRatio = offsetRatio === offsetRatio; // is false when offset is NaN\r\n return [\r\n _handle,\r\n {\r\n transform: validOffsetRatio\r\n ? `translate${translateAxis}(${(offsetRatio * 100).toFixed(3)}%)`\r\n : '',\r\n },\r\n ];\r\n });\r\n };\r\n\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const scrollbarsAddRemoveClass = (\r\n className: string | false | null | undefined,\r\n add?: boolean,\r\n onlyHorizontal?: boolean\r\n ) => {\r\n const singleAxis = isBoolean(onlyHorizontal);\r\n const runHorizontal = singleAxis ? onlyHorizontal : true;\r\n const runVertical = singleAxis ? !onlyHorizontal : true;\r\n runHorizontal && scrollbarStructureAddRemoveClass(horizontalScrollbars, className, add);\r\n runVertical && scrollbarStructureAddRemoveClass(verticalScrollbars, className, add);\r\n };\r\n const refreshScrollbarsHandleLength = (structureSetupState: StructureSetupState) => {\r\n scrollbarStructureRefreshHandleLength(horizontalScrollbars, structureSetupState, true);\r\n scrollbarStructureRefreshHandleLength(verticalScrollbars, structureSetupState);\r\n };\r\n const refreshScrollbarsHandleOffset = (structureSetupState: StructureSetupState) => {\r\n scrollbarStructureRefreshHandleOffset(horizontalScrollbars, structureSetupState, true);\r\n scrollbarStructureRefreshHandleOffset(verticalScrollbars, structureSetupState);\r\n };\r\n const generateScrollbarDOM = (isHorizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = isHorizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = isHorizontal ? 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 scrollbarsSetupEvents(\r\n result,\r\n scrollbarsAddRemoveClass,\r\n _documentElm,\r\n _scrollOffsetElement,\r\n isHorizontal\r\n ),\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 scrollbarsAddRemoveClass(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _refreshScrollbarsHandleLength: refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset: refreshScrollbarsHandleOffset,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\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 {\r\n rAF,\r\n cAF,\r\n isFunction,\r\n on,\r\n runEachAndClear,\r\n setT,\r\n clearT,\r\n parent,\r\n scrollLeft,\r\n scrollTop,\r\n} from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createScrollbarsSetupEvents } from 'setups/scrollbarsSetup/scrollbarsSetup.events';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarUnusable,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n classNamesScrollbarHandleInteractive,\r\n classNamesScrollbarTrackInteractive,\r\n classNameScrollbarRtl,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOptions,\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 { DeepPartial, 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 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: ReadonlyOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup<\r\n ScrollbarsSetupState,\r\n ScrollbarsSetupStaticState,\r\n [DeepPartial]\r\n> => {\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 createScrollbarsSetupEvents(options, structureSetupState)\r\n );\r\n const {\r\n _host,\r\n _viewport,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n _viewportIsTarget,\r\n _isBody,\r\n } = structureSetupState._elements;\r\n const {\r\n _horizontal,\r\n _vertical,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset,\r\n } = elements;\r\n const { _handleStyle: styleHorizontal } = _horizontal;\r\n const { _handleStyle: styleVertical } = _vertical;\r\n const styleScrollbarPosition = (structure: ScrollbarStructure) => {\r\n const { _scrollbar } = structure;\r\n const elm = _viewportIsTarget && !_isBody && parent(_scrollbar) === _viewport && _scrollbar;\r\n return [\r\n elm,\r\n {\r\n transform: elm\r\n ? `translate(${scrollLeft(_scrollOffsetElement)}px, ${scrollTop(_scrollOffsetElement)}px)`\r\n : '',\r\n },\r\n ] as [HTMLElement | false, StyleObject];\r\n };\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => scrollbarsAddRemoveClass(classNamesScrollbarAutoHidden, true);\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\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, 'pointerover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'pointerenter', onHostMouseEnter),\r\n on(_host, 'pointerleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'pointermove', () => {\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(_scrollEventElement, 'scroll', () => {\r\n requestScrollAnimationFrame(() => {\r\n _refreshScrollbarsHandleOffset(structureSetupState());\r\n\r\n autoHideNotNever && manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n\r\n _viewportIsTarget && styleHorizontal(styleScrollbarPosition);\r\n _viewportIsTarget && styleVertical(styleScrollbarPosition);\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 {\r\n _overflowEdgeChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _directionChanged,\r\n } = structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n const { _overflowAmount, _overflowStyle, _directionIsRTL } = currStructureSetupState;\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 [dragScroll, dragScrollChanged] = checkOption('scrollbars.dragScroll');\r\n const [clickScroll, clickScrollChanged] = checkOption('scrollbars.clickScroll');\r\n\r\n const updateHandle =\r\n _overflowEdgeChanged || _overflowAmountChanged || _directionChanged || force;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged || force;\r\n\r\n const setScrollbarVisibility = (overflowStyle: OverflowStyle, isHorizontal: boolean) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n scrollbarsAddRemoveClass(classNamesScrollbarVisible, isVisible, isHorizontal);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (themeChanged) {\r\n scrollbarsAddRemoveClass(prevTheme);\r\n scrollbarsAddRemoveClass(theme, true);\r\n\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 (dragScrollChanged) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarHandleInteractive, dragScroll);\r\n }\r\n if (clickScrollChanged) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarTrackInteractive, clickScroll);\r\n }\r\n if (updateVisibility) {\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, true);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, false);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n scrollbarsAddRemoveClass(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (updateHandle) {\r\n _refreshScrollbarsHandleLength(currStructureSetupState);\r\n _refreshScrollbarsHandleOffset(currStructureSetupState);\r\n\r\n scrollbarsAddRemoveClass(classNamesScrollbarUnusable, !_overflowAmount.x, true);\r\n scrollbarsAddRemoveClass(classNamesScrollbarUnusable, !_overflowAmount.y, false);\r\n scrollbarsAddRemoveClass(classNameScrollbarRtl, _directionIsRTL && !_isBody);\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 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};\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};\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","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 isPlainObject,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOptions } 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 { DeepPartial, OverflowStyle } from 'typings';\r\nimport { InitializationTarget, Initialization, cancelInitialization } from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\nimport {\r\n ScrollbarsSetupElement,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\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\nexport interface OverlayScrollbarsStatic {\r\n (target: InitializationTarget): OverlayScrollbars | undefined;\r\n (\r\n target: InitializationTarget,\r\n options: DeepPartial,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(plugin: Plugin | Plugin[]): void;\r\n valid(osInstance: any): boolean;\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 staticDefaultInitialization: Initialization;\r\n staticDefaultOptions: Options;\r\n\r\n getDefaultInitialization(): Initialization;\r\n setDefaultInitialization(newDefaultInitialization: DeepPartial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: DeepPartial): 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 directionRTL: boolean;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface ScrollbarElements {\r\n scrollbar: HTMLElement;\r\n track: HTMLElement;\r\n handle: HTMLElement;\r\n}\r\n\r\nexport interface CloneableScrollbarElements extends ScrollbarElements {\r\n clone(): ScrollbarElements;\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 scrollOffsetElement: HTMLElement;\r\n scrollEventElement: HTMLElement | Document;\r\n scrollbarHorizontal: CloneableScrollbarElements;\r\n scrollbarVertical: CloneableScrollbarElements;\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: DeepPartial;\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, canceled: 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?: DeepPartial): 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// eslint-disable-next-line @typescript-eslint/no-redeclare\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: InitializationTarget,\r\n options?: DeepPartial,\r\n eventListeners?: GeneralInitialEventListeners\r\n) => {\r\n const { _getDefaultOptions, _addListener: addEnvListener } = getEnvironment();\r\n const plugins = getPlugins();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (options && !potentialInstance) {\r\n let destroyed = false;\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: DeepPartial) => {\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: ReadonlyOptions = 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: DeepPartial, force?: boolean) => {\r\n updateStructure(changedOptions, !!force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (canceled?: 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 @typescript-eslint/no-use-before-define\r\n triggerEvent('destroyed', [instance, !!canceled]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: DeepPartial) {\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 _directionIsRTL,\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 directionRTL: _directionIsRTL,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const {\r\n _target,\r\n _host,\r\n _padding,\r\n _viewport,\r\n _content,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n } = structureState._elements;\r\n const { _horizontal, _vertical } = scrollbarsState._elements;\r\n const translateScrollbarStructure = (\r\n scrollbarStructure: ScrollbarStructure\r\n ): ScrollbarElements => {\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n return {\r\n scrollbar: _scrollbar,\r\n track: _track,\r\n handle: _handle,\r\n };\r\n };\r\n const translateScrollbarsSetupElement = (\r\n scrollbarsSetupElement: ScrollbarsSetupElement\r\n ): CloneableScrollbarElements => {\r\n const { _scrollbarStructures, _clone } = scrollbarsSetupElement;\r\n const translatedStructure = translateScrollbarStructure(_scrollbarStructures[0]);\r\n\r\n return assignDeep({}, translatedStructure, {\r\n clone: () => {\r\n const result = translateScrollbarStructure(_clone());\r\n updateScrollbars({}, true, {});\r\n return result;\r\n },\r\n });\r\n };\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 scrollOffsetElement: _scrollOffsetElement,\r\n scrollEventElement: _scrollEventElement,\r\n scrollbarHorizontal: translateScrollbarsSetupElement(_horizontal),\r\n scrollbarVertical: translateScrollbarsSetupElement(_vertical),\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 (cancelInitialization(!targetIsElement && target.cancel, structureState._elements)) {\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 return potentialInstance!;\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.valid = (osInstance: any) => {\r\n const hasElmsFn = osInstance && (osInstance as OverlayScrollbars).elements;\r\n const elements = isFunction(hasElmsFn) && hasElmsFn();\r\n return isPlainObject(elements) && !!getInstance(elements.target);\r\n};\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 _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\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 staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\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","o","_initialValue","u","_equal","_","_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","deepBoundaryIsValid","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","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","g","_timeout","v","_maxDelay","p","_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","directionIsRTL","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","preventDefault","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostScrollbarHidden","dataValueHostUpdating","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarHidden","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarRtl","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarUnusable","classNamesScrollbarAutoHidden","classNamesScrollbarTrackInteractive","classNamesScrollbarHandleInteractive","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","showNativeOverlaidScrollbars","updating","elementEvents","attributes","ignoreMutation","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","pointers","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","optionsTemplateTypes","boolean","number","string","object","function","null","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsValidationPluginName","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","T","_nativeScrollbarsHiding","I","_nativeScrollbarsOverlaid","L","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","P","_viewportPaddingStyle","D","_scrollbarsHideOffset","M","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","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","nativeScrollbarsOverlaid","staticDefaultInitialization","host","padding","ownerDocument","content","scrollbarsSlot","cancel","staticDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElementStrategy","staticInitializationElementValue","staticInitialization","resolvedInitialization","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElementStrategy","dynamicInitializationElementValue","dynamicInitialization","cancelInitialization","cancelInitializationValue","structureSetupElements","W","_isBody","X","_viewportIsTarget","Y","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","defaultHostInitialization","defaultViewportInitialization","defaultPaddingInitialization","defaultContentInitialization","targetIsElm","targetStructureInitialization","hostInitialization","paddingInitialization","viewportInitialization","contentInitialization","targetElement","isTextarea","isBody","wnd","defaultView","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","viewportIsTarget","viewportIsTargetBody","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_scrollOffsetElement","documentElement","_scrollEventElement","_windowElm","_documentElm","_isTextarea","_targetIsElm","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","J","K","tt","Z","nt","ot","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","removeHtmlClass","createTrinsicUpdateSegment","updateHints","V","ft","_heightIntrinsic","_t","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","_nativeScrollbarStyling","vt","_directionIsRTL","ht","gt","wt","_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","dt","ct","k","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowEdge","getCurrentOverflowEdgeCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","bt","St","_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","yt","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","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","resizeObserverInstance","observe","disconnect","pluginAppearCallback","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLCache","directionIsRTLCacheChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","destroySizeObserver","appendSizeObserver","takeRecords","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Pt","_attributes","Dt","_styleChangingAttributes","Mt","_eventContentChange","Rt","_nestedTargetSelector","kt","_ignoreTargetChange","Bt","_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","lt","ut","updateContentSizeCache","hasOver","hasVpStyle","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","directionIsRTLChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","appendTrinsicObserver","updateTrinsicObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","trinsicUpdateResult","contentUpdateResult","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","appendStructureElements","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","appendObserverElements","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","getClientOffset","clientX","clientY","getScale","element","continuePointerDown","scrollType","scrollbarOptions","button","isPrimary","pointerType","includes","createRootClickStopPropagationEvents","scrollbar","documentElm","createDragScrollingEvents","doc","scrollbarStructure","scrollOffsetElement","isHorizontal","B","qt","_handle","Ft","_track","Gt","_scrollbar","scrollOffsetKey","xyKey","whKey","createOnPointerMoveHandler","mouseDownScroll","mouseDownClientOffset","mouseDownInvertedScale","Ot","movement","handleTrackDiff","scrollDeltaPercent","scrollDelta","isRTL","negateMultiplactor","pointerDownEvent","offSelectStart","offPointerMove","pointerUpEvent","releasePointerCapture","pointerId","setPointerCapture","createScrollbarsSetupEvents","scrollbarsAddRemoveClass","scrollOffsetElm","min","getScrollbarHandleLengthRatio","scrollbarHandle","scrollbarTrack","axis","Ct","viewportSize","handleSize","trackSize","getScrollbarHandleOffsetRatio","scrollLeftTop","scrollPositionMax","scrollPosition","handleRTL","rtlNormalizedScrollPosition","finalScrollPosition","scrollPercent","lengthRatio","createScrollbarsSetupElements","scrollbarsSetupEvents","defaultScrollbarsSlot","rt","it","st","evaluatedScrollbarSlot","scrollbarStructureAddRemoveClass","scrollbarStructures","scrollbarsHandleStyle","scrollbarStructureRefreshHandleLength","structure","toFixed","scrollbarStructureRefreshHandleOffset","translateAxis","offsetRatio","validOffsetRatio","transform","horizontalScrollbars","verticalScrollbars","onlyHorizontal","singleAxis","runHorizontal","runVertical","refreshScrollbarsHandleLength","refreshScrollbarsHandleOffset","generateScrollbarDOM","scrollbarClassName","arrToPush","transitionlessClass","track","handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_refreshScrollbarsHandleLength","_refreshScrollbarsHandleOffset","_scrollbarsAddRemoveClass","_horizontal","_scrollbarStructures","_clone","_handleStyle","_vertical","createSelfCancelTimeout","id","setTFn","clearTFn","createScrollbarsSetup","autoHideIsMove","autoHideIsLeave","autoHideNotNever","mouseInHost","prevTheme","globalAutoHideDelay","requestMouseMoveAnimationFrame","cancelMouseMoveAnimationFrame","requestScrollAnimationFrame","cancelScrollAnimationFrame","scrollTimeout","clearScrollTimeout","auotHideMoveTimeout","clearAutoHideTimeout","auotHideTimeout","clearAutoTimeout","et","Xt","Qt","Nt","Ut","styleHorizontal","styleVertical","styleScrollbarPosition","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","Tt","zt","At","currStructureSetupState","xt","themeChanged","visibilityChanged","autoHideChanged","dragScrollChanged","clickScrollChanged","updateHandle","updateVisibility","setScrollbarVisibility","isVisible","xVisible","yVisible","hasCorner","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","F","addEnvListener","plugins","targetIsElement","instanceTarget","potentialInstance","optionsValidationPlugin","validateOptions","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","canceled","instance","Et","directionRTL","translateScrollbarStructure","translateScrollbarsSetupElement","scrollbarsSetupElement","Jt","Kt","translatedStructure","scrollEventElement","scrollbarHorizontal","scrollbarVertical","pluginInstance","sizeChanged","hostMutation","valid","hasElmsFn","N","U","q","G","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","getDefaultInitialization","setDefaultInitialization","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 e65df20..8c060e7 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -function t(e,n){if(w(e))for(let t=0;tn(e[t],t,e)));return e}function e(e,n){const r=d(n);if(p(n)||r){let t=r?"":{};if(e){const o=window.getComputedStyle(e,null);t=r?yt(e,o,n):n.reduce(((t,n)=>(t[n]=yt(e,o,n),t)),t)}return t}e&&t(L(n),(t=>mt(e,t,n[t])))}const n=(t,e)=>{const{o:n,u:r,_:o}=t;let i,s=n;const l=(t,e)=>{const n=s,l=t,c=e||(r?!r(n,l):n!==l);return(c||o)&&(s=l,i=n),[s,c,i]};return[e?t=>l(e(s,i),t):l,t=>[s,!!t,i]]},r=Node.ELEMENT_NODE,{toString:o,hasOwnProperty:i}=Object.prototype,s=t=>void 0===t,l=t=>null===t,c=t=>s(t)||l(t)?`${t}`:o.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),a=t=>"number"==typeof t,d=t=>"string"==typeof t,u=t=>"boolean"==typeof t,h=t=>"function"==typeof t,p=t=>Array.isArray(t),f=t=>"object"==typeof t&&!p(t)&&!l(t),w=t=>{const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!(!(p(t)||!h(t)&&n)||e>0&&f(t)&&!(e-1 in t))},g=t=>{if(!t||!f(t)||"object"!==c(t))return!1;let e;const n="constructor",r=t[n],o=r&&r.prototype,l=i.call(t,n),a=o&&i.call(o,"isPrototypeOf");if(r&&!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===r)},v=t=>{const e=Element;return!!t&&(e?t instanceof e:t.nodeType===r)},y=(t,e,n)=>t.indexOf(e,n),m=(t,e,n)=>(n||d(e)||!w(e)?t.push(e):Array.prototype.push.apply(t,e),t),x=e=>{const n=Array.from,r=[];return n&&e?n(e):(e instanceof Set?e.forEach((t=>{m(r,t)})):t(e,(t=>{m(r,t)})),r)},$=t=>!!t&&0===t.length,O=(e,n,r)=>{t(e,(t=>t&&t.apply(void 0,n||[]))),!r&&(e.length=0)},S=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),L=t=>t?Object.keys(t):[],C=(e,n,r,o,i,s,c)=>{const a=[n,r,o,i,s,c];return"object"==typeof e&&!l(e)||h(e)||(e={}),t(a,(n=>{t(L(n),(t=>{const r=n[t];if(e===r)return!0;const o=p(r);if(r&&(g(r)||o)){const n=e[t];let i=n;o&&!p(n)?i=[]:o||g(n)||(i={}),e[t]=C(i,r)}else e[t]=r}))})),e},E=t=>{for(const e in t)return!1;return!0},P=(t,e,n,r)=>{if(s(r))return n?n[t]:e;n&&!l(r)&&!1!==r&&(n[t]=r)},T=(t,e,n)=>{if(s(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)},M=(t,e,n,r)=>{if(n){const o=T(t,e)||"",i=new Set(o.split(" "));i[r?"add":"delete"](n),T(t,e,x(i).join(" ").trim())}},R=(t,e)=>{t&&t.removeAttribute(e)},z=(t,e)=>P("scrollLeft",0,t,e),D=(t,e)=>P("scrollTop",0,t,e),A=Element.prototype,B=(t,e)=>{const n=[],r=e?v(e)?e:null:document;return r?m(n,r.querySelectorAll(t)):n},H=(t,e)=>!!v(t)&&(A.matches||A.msMatchesSelector).call(t,e),k=t=>t?x(t.childNodes):[],I=t=>t?t.parentElement:null,Y=(t,e)=>{if(v(t)){const n=A.closest;if(n)return n.call(t,e);do{if(H(t,e))return t;t=I(t)}while(t)}return null},X=(e,n,r)=>{if(r&&e){let o,i=n;w(r)?(o=document.createDocumentFragment(),t(r,(t=>{t===i&&(i=t.previousSibling),o.appendChild(t)}))):o=r,n&&(i?i!==n&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(o,i||null)}},V=(t,e)=>{X(t,null,e)},F=(t,e)=>{X(I(t),t&&t.nextSibling,e)},j=e=>{if(w(e))t(x(e),(t=>j(t)));else if(e){const t=I(e);t&&t.removeChild(e)}},_=t=>{const e=document.createElement("div");return t&&T(e,"class",t),e},N=e=>{const n=_();return n.innerHTML=e.trim(),t(k(n),(t=>j(t)))},W=t=>t.charAt(0).toUpperCase()+t.slice(1),Z=["-webkit-","-moz-","-o-","-ms-"],G=["WebKit","Moz","O","MS","webkit","moz","o","ms"],K={},q={},J=e=>{let n=q[e];if(S(q,e))return n;const r=W(e),o=_().style;return t(Z,(t=>{const i=t.replace(/-/g,""),s=[e,t+e,i+r,W(i)+r];return!(n=s.find((t=>void 0!==o[t])))})),q[e]=n||""},U=e=>{let n=K[e]||window[e];return S(K,e)||(t(G,(t=>(n=n||window[t+W(e)],!n))),K[e]=n),n},Q=U("MutationObserver"),tt=U("IntersectionObserver"),et=U("ResizeObserver"),nt=U("cancelAnimationFrame"),rt=U("requestAnimationFrame"),ot=window.setTimeout,it=window.clearTimeout,st=/[^\x20\t\r\n\f]+/g,lt=(t,e,n)=>{const r=t&&t.classList;let o,i=0,s=!1;if(r&&e&&d(e)){const t=e.match(st)||[];for(s=t.length>0;o=t[i++];)s=!!n(r,o)&&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,r,o)=>{if(e&&n){let i=!0;return t(r,(t=>{(o?o(e[t]):e[t])!==(o?o(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))),wt=()=>{},gt=(t,e)=>{let n,r,o,i=wt;const{g:s,v:l,p:c}=e||{},d=function(e){i(),it(n),n=r=void 0,i=wt,t.apply(this,e)},u=t=>c&&r?c(r,t):t,p=()=>{i!==wt&&d(u(o)||o)},f=function(){const t=x(arguments),e=h(s)?s():s,c=a(e)&&e>=0;if(c){const s=h(l)?l():l,c=a(s)&&s>=0,f=e>0?ot:rt,w=e>0?it:nt,g=u(t)||t,b=d.bind(0,g);i();const v=f(b,e);i=()=>w(v),c&&!n&&(n=ot(p,s)),r=o=g}else d(t)};return f.m=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{const{style:r}=t;s(r[e])?r.setProperty(e,n):r[e]=((t,e)=>!bt[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}catch(A){}},xt=t=>"rtl"===e(t,"direction"),$t=(t,n,r)=>{const o=n?`${n}-`:"",i=r?`-${r}`:"",s=`${o}top${i}`,l=`${o}right${i}`,c=`${o}bottom${i}`,a=`${o}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])}},{round:Ot}=Math,St={w:0,h:0},Lt=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:St,Ct=t=>t?{w:t.clientWidth,h:t.clientHeight}:St,Et=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:St,Pt=t=>{const n=parseFloat(e(t,"height"))||0,r=parseFloat(e(t,"width"))||0;return{w:r-Ot(r),h:n-Ot(n)}},Tt=t=>t.getBoundingClientRect();let Mt;const Rt=t=>t.split(" "),zt=(e,n,r,o)=>{t(Rt(n),(t=>{e.removeEventListener(t,r,o)}))},Dt=(e,n,r,o)=>{var i;const l=(()=>{if(s(Mt)){Mt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){Mt=!0}}))}catch(e){}}return Mt})(),c=null!=(i=l&&o&&o.S)?i:l,a=o&&o.$||!1,d=o&&o.C||!1,u=[],h=l?{passive:c,capture:a}:a;return t(Rt(n),(t=>{const n=d?o=>{e.removeEventListener(t,n,a),r&&r(o)}:r;m(u,zt.bind(null,e,t,n,a)),e.addEventListener(t,n,h)})),O.bind(0,u)},At=t=>t.stopPropagation(),Bt={x:0,y:0},Ht=t=>{const e=t?Tt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Bt},kt=(e,n)=>{t(p(n)?n:[n],e)},It=e=>{const n=new Map,r=(t,e)=>{if(t){const r=n.get(t);kt((t=>{r&&r[t?"delete":"clear"](t)}),e)}else n.forEach((t=>{t.clear()})),n.clear()},o=(t,e)=>{const o=n.get(t)||new Set;return n.set(t,o),kt((t=>{t&&o.add(t)}),e),r.bind(0,t,e)};return t(L(e),(t=>{o(t,e[t])})),[o,r,(e,r)=>{const o=n.get(e);t(x(o),(t=>{r&&!$(r)?t.apply(0,r):t()}))}]},Yt=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&S(t,e)?t[e]:void 0),t):void 0,Xt=(t,e,n)=>r=>[Yt(t,r),n||void 0!==Yt(e,r)],Vt=t=>{let e=t;return[()=>e,t=>{e=C({},e,t)}]},Ft="os-environment",jt=`${Ft}-flexbox-glue`,_t=`${jt}-max`,Nt="data-overlayscrollbars",Wt=`${Nt}-overflow-x`,Zt=`${Nt}-overflow-y`,Gt="overflowVisible",Kt="scrollbarHidden",qt="updating",Jt="os-padding",Ut="os-viewport",Qt=`${Ut}-arrange`,te="os-content",ee=`${Ut}-scrollbar-hidden`,ne=`os-overflow-visible`,re="os-size-observer",oe=`${re}-appear`,ie=`${re}-listener`,se=`${ie}-scroll`,le=`${ie}-item`,ce=`${le}-final`,ae="os-trinsic-observer",de="os-scrollbar",ue=`${de}-rtl`,he=`${de}-horizontal`,pe=`${de}-vertical`,fe=`${de}-track`,we=`${de}-handle`,ge=`${de}-visible`,be=`${de}-cornerless`,ve=`${de}-transitionless`,ye=`${de}-interaction`,me=`${de}-unusable`,xe=`${de}-auto-hidden`,$e=`${fe}-interactive`,Oe=`${we}-interactive`,Se=t=>JSON.stringify(t,((t,e)=>{if(h(e))throw new Error;return e})),Le={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},Ce=(e,n)=>{const r={};return t(L(n).concat(L(e)),(t=>{const o=e[t],i=n[t];if(f(o)&&f(i))C(r[t]={},Ce(o,i));else if(S(n,t)&&i!==o){let e=!0;if(p(o)||p(i))try{Se(o)===Se(i)&&(e=!1)}catch(K){}e&&(r[t]=i)}})),r},Ee={},Pe=()=>Ee,Te="__osOptionsValidationPlugin",Me=3333333,Re="scroll",ze="__osSizeObserverPlugin",De={[ze]:{O:(t,n,r)=>{const o=N(`
`);V(t,o),at(t,se);const i=o[0],s=i.lastChild,l=i.firstChild,c=null==l?void 0:l.firstChild;let a,d=Lt(i),u=d,h=!1;const p=()=>{z(l,Me),D(l,Me),z(s,Me),D(s,Me)},f=t=>{a=0,h&&(d=u,n(!0===t))},w=t=>{u=Lt(i),h=!t||!ut(u,d),t?(At(t),h&&!a&&(nt(a),a=rt(f))):f(!1===t),p()},g=m([],[Dt(l,Re,w),Dt(s,Re,w)]);return e(c,{width:Me,height:Me}),rt(p),[r?w.bind(0,!1):p,g]}}};let Ae=0;const{round:Be,abs:He}=Math,ke="__osScrollbarsHidingPlugin",Ie={[ke]:{A:t=>{const{T:e,I:n,L:r}=t,o=!(r||e||!n.x&&!n.y)&&document.createElement("style");return o&&(T(o,"id",`${Qt}-${Ae}`),Ae++),o},H:(n,r,o,i,s,l,c)=>[(t,r,l,c)=>{if(n){const{P:n}=s(),{D:a,M:d}=t,{x:u,y:h}=d,{x:p,y:f}=a,w=n[c?"paddingRight":"paddingLeft"],g=n.paddingTop,b=r.w+l.w,v=r.h+l.h,y={w:f&&h?`${f+b-w}px`:"",h:p&&u?`${p+v-g}px`:""};if(i){const{sheet:t}=i;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${T(i,"id")} + .${Qt}::before {}`,0);const n=e[0].style;n.width=y.w,n.height=y.h}}}else e(o,{"--os-vaw":y.w,"--os-vah":y.h})}return n},(i,a,d)=>{if(n){const u=d||l(i),{P:h}=s(),{M:p}=u,{x:f,y:w}=p,g={},b=e=>t(e.split(" "),(t=>{g[t]=h[t]}));f&&b("marginBottom paddingTop paddingBottom"),w&&b("marginLeft marginRight paddingLeft paddingRight");const v=e(o,L(g));return ct(o,Qt),r||(g.height=""),e(o,g),[()=>{c(u,a,n,v),e(o,v),at(o,Qt)},u]}return[wt]}],R:()=>{let t={w:0,h:0},e=0;return(n,r,o)=>{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(Be(i.w/(t.w/100))),h:He(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=He(t),r=He(e);return!(n===r||n+1===r||n-1===r)})(a.w,a.h);if(u&&h&&d!==e&&d>0){const[t,e]=r();C(n.k,t),e&&o()}t=i,e=d}}}};let Ye;const Xe=(t,e,n,r)=>{V(t,e);const o=Ct(e),i=Lt(e),s=Pt(n);return r&&j(e),{x:i.h-o.h+s.h,y:i.w-o.w+s.w}},Ve=(t,n)=>{const r="hidden";e(t,{overflowX:r,overflowY:r,direction:"rtl"}),z(t,0);const o=Ht(t),i=Ht(n);z(t,-999);const s=Ht(n);return{i:o.x===i.x,n:i.x!==s.x}},Fe=(t,e)=>{const n=at(t,jt),r=Tt(t),o=Tt(e),i=ft(o,r,!0),s=at(t,_t),l=Tt(t),c=Tt(e),a=ft(c,l,!0);return n(),s(),i&&a},je=()=>(Ye||(Ye=(()=>{const{body:t}=document,r=N(`
`)[0],o=r.firstChild,[i,,s]=It(),[l,c]=n({o:Xe(t,r,o),u:ht},Xe.bind(0,t,r,o,!0)),[a]=c(),d=(t=>{let n=!1;const r=at(t,ee);try{n="none"===e(t,J("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(o){}return r(),n})(r),u={x:0===a.x,y:0===a.y},h={host:null,padding:!d,viewport:t=>d&&t===t.ownerDocument.body&&t,content:!1,scrollbarsSlot:!0,cancel:{nativeScrollbarsOverlaid:!0,body:null}},p=C({},Le),f={k:a,I:u,T:d,L:"-1"===e(r,"zIndex"),B:Ve(r,o),V:Fe(r,o),j:t=>i("_",t),Y:C.bind(0,{},h),q(t){C(h,t)},F:C.bind(0,{},p),G(t){C(p,t)},N:C({},h),U:C({},p)};if(R(r,"style"),j(r),!(d||u.x&&u.y)){let t;window.addEventListener("resize",(()=>{const e=Pe()[ke];t=t||e&&e.R(),t&&t(f,l,s.bind(0,"_"))}))}return f})()),Ye),_e=(t,e)=>h(t)?t.apply(0,e):t,Ne=(t,e,n,r)=>{const o=s(r)?n:r;return _e(o,t)||e()},We=(t,e,n,r)=>{const o=s(r)?n:r,i=_e(o,t);return!!i&&(b(i)?i:e())},Ze=_.bind(0,""),Ge=t=>{V(I(t),k(t)),j(t)},Ke=t=>{const e=je(),{Y:n,T:r}=e,o=Pe()[ke],i=o&&o.A,{host:s,viewport:l,padding:c,content:a}=n(),d=b(t),u=d?{}:t,{host:h,padding:p,viewport:f,content:w}=u,g=d?t:u.target,v=H(g,"textarea"),x=g.ownerDocument,$=g===x.body,S=x.defaultView,C=Ne.bind(0,[g]),E=We.bind(0,[g]),P=C(Ze,l,f),z=P===g,D=z&&$,A={J:g,K:v?C(Ze,s,h):g,Z:P,tt:!z&&E(Ze,c,p),nt:!z&&E(Ze,a,w),ot:!z&&!r&&i&&i(e),st:D?x.documentElement:P,et:D?x:P,ct:S,rt:x,it:v,W:$,lt:d,X:z,ut:(t,e)=>z?((t,e,n)=>{const r=T(t,Nt)||"";return new Set(r.split(" ")).has(n)})(P,0,e):((t,e)=>lt(t,e,((t,e)=>t.contains(e))))(P,t),dt:(t,e,n)=>z?M(P,Nt,e,n):(n?at:ct)(P,t)},B=L(A).reduce(((t,e)=>{const n=A[e];return m(t,!(!n||I(n))&&n)}),[]),Y=t=>t?y(B,t)>-1:null,{J:_,K:N,tt:W,Z,nt:G,ot:K}=A,q=[],J=v&&Y(N),U=v?_:k([G,Z,W,N,_].find((t=>!1===Y(t)))),Q=G||Z;return[A,()=>{const t=((t,e)=>(T(t,Nt,e),R.bind(0,t,Nt)))(N,z?"viewport":"host"),e=at(W,Jt),n=at(Z,!z&&Ut),o=at(G,te),i=D?at(I(g),ee):wt;J&&(F(_,N),m(q,(()=>{F(N,_),j(N)}))),V(Q,U),V(N,W),V(W||N,!z&&Z),V(Z,G),m(q,(()=>{i(),t(),R(Z,Wt),R(Z,Zt),Y(G)&&Ge(G),Y(Z)&&Ge(Z),Y(W)&&Ge(W),e(),n(),o()})),r&&!z&&m(q,ct.bind(0,Z,ee)),K&&(((t,e)=>{X(I(t),t,e)})(Z,K),m(q,j.bind(0,K)))},O.bind(0,q)]},qe=(t,n)=>{const{nt:r}=t,[o]=n;return t=>{const{V:n}=je(),{ft:i}=o(),{_t:s}=t,l=(r||!n)&&s;return l&&e(r,{height:i?"":"100%"}),{ht:l,gt:l}}},Je=(t,r)=>{const[o,i]=r,{K:s,tt:l,Z:c,X:a}=t,[d,u]=n({u:pt,o:$t()},$t.bind(0,s,"padding",""));return(t,n,r)=>{let[s,h]=u(r);const{T:p,V:f}=je(),{vt:w}=o(),{ht:g,gt:b,wt:v}=t,[y,m]=n("paddingAbsolute");(g||h||!f&&b)&&([s,h]=d(r));const x=!a&&(m||v||h);if(x){const t=!y||!l&&!p,n=s.r+s.l,r=s.t+s.b,o={marginRight:t&&!w?-n:0,marginBottom:t?-r:0,marginLeft:t&&w?-n:0,top:t?-s.t:0,right:t?w?-s.r:"auto":0,left:t?w?"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,o),e(c,a),i({tt:s,bt:!t,P:l?a:C({},o,a)})}return{yt:x}}},{max:Ue}=Math,Qe=Ue.bind(0,0),tn="visible",en="hidden",nn=42,rn={u:ut,o:{w:0,h:0}},on={u:ht,o:{x:en,y:en}},sn=(t,e,n)=>n?at(t,e):ct(t,e),ln=t=>0===t.indexOf(tn),cn=(t,r)=>{const[o,i]=r,{K:s,tt:l,Z:c,ot:a,X:d,dt:u,W:h,ct:p}=t,{k:f,V:w,T:g,I:b}=je(),v=Pe()[ke],y=!d&&!g&&(b.x||b.y),m=h&&d,[x,$]=n(rn,Pt.bind(0,c)),[O,S]=n(rn,Et.bind(0,c)),[L,C]=n(rn),[E,P]=n(rn),[R]=n(on),z=(t,n)=>{if(e(c,{height:""}),n){const{bt:n,tt:r}=o(),{St:i,D:l}=t,a=Pt(s),d=Ct(s),u="content-box"===e(c,"boxSizing"),h=n||u?r.b+r.t:0,p=!(b.x&&u);e(c,{height:d.h+a.h+(i.x&&p?l.x:0)-h})}},D=(t,n)=>{const r=g||t?0:nn,o=(t,o,i)=>{const s=e(c,t),l="scroll"===(n?n[t]:s);return[s,l,l&&!g?o?r:i:0,o&&!!r]},[i,s,l,a]=o("overflowX",b.x,f.x),[d,u,h,p]=o("overflowY",b.y,f.y);return{xt:{x:i,y:d},St:{x:s,y:u},D:{x:l,y:h},M:{x:a,y:p}}},A=(t,e,n,r)=>{const{D:i,M:s}=t,{x:l,y:c}=s,{x:a,y:d}=i,{P:u}=o(),h=e?"marginLeft":"marginRight",p=e?"paddingLeft":"paddingRight",f=u[h],w=u.marginBottom,g=u[p],b=u.paddingBottom;r.width=`calc(100% + ${d+-1*f}px)`,r[h]=-d+f,r.marginBottom=-a+w,n&&(r[p]=g+(c?d:0),r.paddingBottom=b+(l?a:0))},[B,H]=v?v.H(y,w,c,a,o,D,A):[()=>y,()=>[wt]];return(t,n,r)=>{const{ht:a,$t:h,gt:f,yt:v,_t:y,wt:k}=t,{ft:I,vt:Y}=o(),[X,V]=n("showNativeOverlaidScrollbars"),[F,j]=n("overflow"),_=X&&b.x&&b.y,N=!d&&!w&&(a||f||h||V||y),W=ln(F.x),Z=ln(F.y),G=W||Z;let K,q=$(r),J=S(r),U=C(r),Q=P(r);if(V&&g&&u(ee,Kt,!_),N&&(K=D(_),z(K,I)),a||v||f||k||V){G&&u(ne,Gt,!1);const[t,e]=H(_,Y,K),[n,o]=q=x(r),[i,s]=J=O(r),l=Ct(c);let a=i,d=l;t(),(s||o||V)&&e&&!_&&B(e,i,n,Y)&&(d=Ct(c),a=Et(c));const h={w:Qe(Ue(i.w,a.w)+n.w),h:Qe(Ue(i.h,a.h)+n.h)},f={w:Qe(m?p.innerWidth:d.w+Qe(l.w-i.w)+n.w),h:Qe(m?p.innerHeight:d.h+Qe(l.h-i.h)+n.h)};Q=E(f),U=L(((t,e)=>{const n=window.devicePixelRatio%1!=0?1:0,r={w:Qe(t.w-e.w),h:Qe(t.h-e.h)};return{w:r.w>n?r.w:0,h:r.h>n?r.h:0}})(h,f),r)}const[tt,et]=Q,[nt,rt]=U,[ot,it]=J,[st,lt]=q,ct={x:nt.w>0,y:nt.h>0},at=W&&Z&&(ct.x||ct.y)||W&&ct.x&&!ct.y||Z&&ct.y&&!ct.x;if(v||k||lt||it||et||rt||j||V||N){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},n=((t,e,n,r)=>{const o=(t,e)=>{const n=ln(t),r=e&&n&&t.replace(`${tn}-`,"")||"";return[e&&!n?t:"",ln(r)?"hidden":r]},[i,s]=o(n.x,e.x),[l,c]=o(n.y,e.y);return r.overflowX=s&&l?s:i,r.overflowY=c&&i?c:l,D(t,r)})(_,ct,F,t),r=B(n,ot,st,Y);d||A(n,Y,r,t),N&&z(n,I),d?(T(s,Wt,t.overflowX),T(s,Zt,t.overflowY)):e(c,t)}M(s,Nt,Gt,at),sn(l,ne,at),!d&&sn(c,ne,G);const[dt,ut]=R(D(_).xt);return i({xt:dt,Ct:{x:tt.w,y:tt.h},Ot:{x:nt.w,y:nt.h},Et:ct}),{At:ut,Tt:et,zt:rt}}},an=(e,n,r)=>{const o={},i=n||{};return t(L(e).concat(L(i)),(t=>{const n=e[t],s=i[t];o[t]=!!(r||n||s)})),o},dn=3333333,un=t=>t&&(t.height||t.width),hn=(t,e,r)=>{const{It:o=!1,Lt:i=!1}=r||{},s=Pe()[ze],{B:l}=je(),c=N(`
`)[0],a=c.firstChild,d=xt.bind(0,t),[h]=n({o:void 0,_:!0,u:(t,e)=>!(!t||!un(t)&&un(e))}),w=t=>{const n=p(t)&&t.length>0&&f(t[0]),r=!n&&u(t[0]);let i=!1,s=!1,a=!0;if(n){const[e,,n]=h(t.pop().contentRect),r=un(e),o=un(n);i=!n||!r,s=!o&&r,a=!i}else r?[,a]=t:s=!0===t;if(o&&a){const e=r?t[0]:xt(c);z(c,e?l.n?-dn:l.i?0:dn:dn),D(c,dn)}i||e({ht:!r,Ht:r?t:void 0,Lt:!!s})},g=[];let b=!!i&&w;return[()=>{O(g),j(c)},()=>{if(et){const t=new et(w);t.observe(a),m(g,(()=>{t.disconnect()}))}else if(s){const[t,e]=s.O(a,w,i);b=t,m(g,e)}if(o){const[t]=n({o:!d()},d);m(g,Dt(c,"scroll",(e=>{const n=t(),[r,o]=n;o&&(ct(a,"ltr rtl"),at(a,r?"rtl":"ltr"),w(n)),At(e)})))}b&&(at(c,oe),m(g,Dt(c,"animationstart",b,{C:!!et}))),V(t,c)}]},pn=(t,e)=>{let r;const o=_(ae),i=[],[s]=n({o:!1}),l=(t,n)=>{if(t){const r=s((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=r;if(o)return!n&&e(r),[r]}},c=(t,e)=>{if(t&&t.length>0)return l(t.pop(),e)};return[()=>{O(i),j(o)},()=>{if(tt)r=new tt((t=>c(t)),{root:t}),r.observe(o),m(i,(()=>{r.disconnect()}));else{const t=()=>{const t=Lt(o);l(t)},[e,n]=hn(o,t);m(i,e),n(),t()}V(t,o)},()=>{if(r)return c(r.takeRecords(),!0)}]},fn=(e,n,r,o)=>{let i=!1;const{Pt:s,Dt:l,Mt:c,Rt:a,kt:u,Bt:h}=o||{},p=gt((()=>{i&&r(!0)}),{g:33,v:99}),[f,w]=((e,n,r)=>{let o,i=!1;const s=s=>{if(r){const l=r.reduce(((t,n)=>{if(n){const r=n[0],o=n[1],i=o&&r&&(s?s(r):B(r,e));i&&i.length&&o&&d(o)&&m(t,[i,o.trim()],!0)}return t}),[]);t(l,(e=>t(e[0],(t=>{const r=e[1],s=o.get(t);if(s){const t=s[0],e=s[1];t===r&&e()}const l=Dt(t,r,(e=>{i?(l(),o.delete(t)):n(e)}));o.set(t,[r,l])}))))}};return r&&(o=new WeakMap,s()),[()=>{i=!0},s]})(e,p,c),g=l||[],b=(s||[]).concat(g),v=(i,s)=>{const l=u||wt,c=h||wt,p=[],f=[];let b=!1,v=!1,x=!1;return t(i,(t=>{const{attributeName:r,target:i,type:s,oldValue:u,addedNodes:h}=t,w="attributes"===s,$="childList"===s,O=e===i,S=w&&d(r)?T(i,r):0,L=0!==S&&u!==S,C=y(g,r)>-1&&L;if(n&&!O){const n=!w,s=w&&C,d=s&&a&&H(i,a),p=(d?!l(i,r,u,S):n||s)&&!c(t,!!d,e,o);m(f,h),v=v||p,x=x||$}!n&&O&&L&&!l(i,r,u,S)&&(m(p,r),b=b||C)})),x&&!$(f)&&w((t=>f.reduce(((e,n)=>(m(e,B(t,n)),H(n,t)?m(e,n):e)),[]))),n?(!s&&v&&r(!1),[!1]):!$(p)||b?(!s&&r(p,b),[p,b]):void 0},x=new Q((t=>v(t)));return x.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:n,childList:n,characterData:n}),i=!0,[()=>{i&&(f(),x.disconnect(),i=!1)},()=>{if(i){p.m();const t=x.takeRecords();return!$(t)&&v(t,!0)}}]},wn=`[${Nt}]`,gn=`.${Ut}`,bn=["tabindex"],vn=["wrap","cols","rows"],yn=["id","class","style","open"],mn=(e,r,o)=>{let i,s,l;const[,c]=r,{K:u,Z:f,nt:w,it:g,X:b,ut:x,dt:$}=e,{V:O}=je(),[S]=n({u:ut,o:{w:0,h:0}},(()=>{const t=x(ne,Gt),e=x(Qt,""),n=e&&z(f),r=e&&D(f);$(ne,Gt),$(Qt,""),$("",qt,!0);const o=Et(w),i=Et(f),s=Pt(f);return $(ne,Gt,t),$(Qt,"",e),$("",qt),z(f,n),D(f,r),{w:i.w+o.w+s.w,h:i.h+o.h+s.h}})),E=g?vn:yn.concat(vn),P=gt(o,{g:()=>i,v:()=>s,p(t,e){const[n]=t,[r]=e;return[L(n).concat(L(r)).reduce(((t,e)=>(t[e]=n[e]||r[e],t)),{})]}}),M=e=>{t(e||bn,(t=>{if(y(bn,t)>-1){const e=T(u,t);d(e)?T(f,t,e):R(f,t)}}))},A=(t,e)=>{const[n,r]=t,i={_t:r};return c({ft:n}),!e&&o(i),i},B=({ht:t,Ht:e,Lt:n})=>{const r=!t||n?o:P;let i=!1;if(e){const[t,n]=e;i=n,c({vt:t})}r({ht:t,wt:i})},H=(t,e)=>{const[,n]=S(),r={gt:n};return n&&!e&&(t?o:P)(r),r},k=(t,e,n)=>{const r={$t:e};return e?!n&&P(r):b||M(t),r},[I,X,V]=w||!O?pn(u,A):[wt,wt,wt],[F,j]=b?[wt,wt]:hn(u,B,{Lt:!0,It:!0}),[_,N]=fn(u,!1,k,{Dt:yn,Pt:yn.concat(bn)}),W=b&&et&&new et(B.bind(0,{ht:!0}));return W&&W.observe(u),M(),[()=>{I(),F(),l&&l[0](),W&&W.disconnect(),_()},()=>{j(),X()},()=>{const t={},e=N(),n=V(),r=l&&l[1]();return e&&C(t,k.apply(0,m(e,!0))),n&&C(t,A.apply(0,m(n,!0))),r&&C(t,H.apply(0,m(r,!0))),t},t=>{const[e]=t("updating.ignoreMutation"),[n,r]=t("updating.attributes"),[o,c]=t("updating.elementEvents"),[d,u]=t("updating.debounce"),g=t=>h(e)&&e(t);if((c||r)&&(l&&(l[1](),l[0]()),l=fn(w||f,!0,H,{Dt:E.concat(n||[]),Pt:E.concat(n||[]),Mt:o,Rt:wn,Bt:(t,e)=>{const{target:n,attributeName:r}=t;return!(e||!r||b)&&((t,e,n)=>{const r=t&&Y(t,e),o=t&&((t,e)=>{const n=e?v(e)?e:null:document;return n?n.querySelector(t):null})(n,r),i=Y(o,e)===r;return!(!r||!o)&&(r===t||o===t||i&&Y(Y(t,n),e)!==r)})(n,wn,gn)||!!Y(n,`.${de}`)||!!g(t)}})),u)if(P.m(),p(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)}]},xn={x:0,y:0},$n={tt:{t:0,r:0,b:0,l:0},bt:!1,P:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Ct:xn,Ot:xn,xt:{x:"hidden",y:"hidden"},Et:{x:!1,y:!1},ft:!1,vt:!1},{round:On}=Math,Sn=t=>({x:t.clientX,y:t.clientY}),Ln=(t,e)=>Dt(t,"mousedown",Dt.bind(0,e,"click",At,{C:!0,$:!0}),{$:!0}),Cn=(t,e,n,r,o,i)=>{const{B:s}=je(),{qt:l,Ft:c,Gt:a}=n,d=`scroll${i?"Left":"Top"}`,u=`${i?"x":"y"}`,h=`${i?"w":"h"}`,p=(t,e,n)=>p=>{const{Ot:f}=o(),w=(Sn(p)[u]-e)*n/(Lt(c)[h]-Lt(l)[h])*f[u],g=xt(a)&&i?s.n||s.i?1:-1:1;r[d]=t+w*g};return Dt(l,"pointerdown",(n=>{if(((t,e,n)=>{const r=e.scrollbars,{button:o,isPrimary:i,pointerType:s}=t,{pointers:l}=r;return 0===o&&i&&r["dragScroll"]&&(l||[]).includes(s)})(n,t)){const t=Dt(e,"selectstart",(t=>(t=>t.preventDefault())(t)),{S:!1}),o=Dt(l,"pointermove",p(r[d]||0,Sn(n)[u],1/(t=>{const{width:e,height:n}=Tt(t),{w:r,h:o}=Lt(t);return{x:On(e)/r||1,y:On(n)/o||1}})(r)[u]));Dt(l,"pointerup",(e=>{t(),o(),l.releasePointerCapture(e.pointerId)}),{C:!0}),l.setPointerCapture(n.pointerId)}}))},{min:En,max:Pn,abs:Tn,round:Mn}=Math,Rn=(t,e,n,r)=>{if(r){const t=n?"x":"y",{Ot:e,Ct:o}=r,i=o[t],s=e[t];return Pn(0,En(1,i/(i+s)))}const o=n?"w":"h",i=Lt(t)[o],s=Lt(e)[o];return Pn(0,En(1,i/s))},zn=(n,r,o)=>{const{Y:i}=je(),{scrollbarsSlot:s}=i(),{rt:l,J:c,K:a,Z:d,lt:h,st:p}=r,{scrollbarsSlot:f}=h?{}:n,w=We([c,a,d],(()=>a),s,f),g=(e,n,r)=>{const o=r?at:ct;t(e,(t=>{o(t.Gt,n)}))},b=(n,r)=>{t(n,(t=>{const[n,o]=r(t);e(n,o)}))},v=(t,e,n)=>{b(t,(t=>{const{qt:r,Ft:o}=t;return[r,{[n?"width":"height"]:`${(100*Rn(r,o,n,e)).toFixed(3)}%`}]}))},y=(t,e,n)=>{const r=n?"X":"Y";b(t,(t=>{const{qt:o,Ft:i,Gt:s}=t,l=((t,e,n,r,o,i)=>{const{B:s}=je(),l=i?"x":"y",c=i?"Left":"Top",{Ot:a}=r,d=Mn(a[l]),u=Tn(n[`scroll${c}`]),h=i&&o,p=s.i?u:d-u,f=En(1,(h?p:u)/d),w=Rn(t,e,i);return 1/w*(1-w)*f})(o,i,p,e,xt(s),n);return[o,{transform:l==l?`translate${r}(${(100*l).toFixed(3)}%)`:""}]}))},x=[],S=[],L=[],C=(t,e,n)=>{const r=u(n),o=!r||!n;(!r||n)&&g(S,t,e),o&&g(L,t,e)},E=t=>{const e=t?he:pe,n=t?S:L,r=$(n)?ve:"",i=_(`${de} ${e} ${r}`),s=_(fe),c=_(we),a={Gt:i,Ft:s,qt:c};return V(i,s),V(s,c),m(n,a),m(x,[j.bind(0,i),o(a,C,l,p,t)]),a},P=E.bind(0,!0),T=E.bind(0,!1);return P(),T(),[{Nt:t=>{v(S,t,!0),v(L,t)},Ut:t=>{y(S,t,!0),y(L,t)},Wt:C,Xt:{Jt:S,Kt:P,Zt:b.bind(0,S)},Qt:{Jt:L,Kt:T,Zt:b.bind(0,L)}},()=>{V(w,S[0].Gt),V(w,L[0].Gt),ot((()=>{C(ve)}),300)},O.bind(0,x)]},Dn=t=>{let e;const n=t?ot:rt,r=t?it:nt;return[o=>{r(e),e=n(o,h(t)?t():t)},()=>r(e)]},An=new Set,Bn=new WeakMap,Hn=(e,n,r)=>{let o=!1;const{F:i,j:c}=je(),a=Pe(),d=b(e),u=d?e:e.target,p=(t=>Bn.get(t))(u);if(p)return p;const f=a[Te],w=t=>{const e=t||{},n=f&&f.O;return n?n(e,!0):e},g=C({},i(),w(n)),[v,y,m]=It(r),[x,$,S]=((e,n)=>{const r=Xt(n,{}),o=Vt($n),[i,s,l]=It(),[c]=o,[a,d,u]=Ke(e),h=((e,n)=>{const{Z:r,dt:o}=e,{T:i,I:s,V:l}=je(),c=!i&&(s.x||s.y),a=[qe(e,n),Je(e,n),cn(e,n)];return(e,n,i)=>{const s=an(C({ht:!1,yt:!1,wt:!1,_t:!1,Tt:!1,zt:!1,At:!1,$t:!1,gt:!1},n),{},i),d=c||!l,u=d&&z(r),h=d&&D(r);o("",qt,!0);let p=s;return t(a,(t=>{p=an(p,t(p,e,!!i)||{},i)})),z(r,u),D(r,h),o("",qt),p}})(a,o),p=(t,e,n)=>{const r=L(t).some((e=>t[e]));(r||!E(e)||n)&&l("u",[t,e,n])},[f,w,g,b]=mn(a,o,(t=>{p(h(r,t),{},!1)})),v=c.bind(0);return v.Vt=t=>{i("u",t)},v.jt=()=>{w(),d()},v.Yt=a,[(t,e)=>{const r=Xt(n,t,e);b(r),p(h(r,g(),e),t,!!e)},v,()=>{s(),f(),u()}]})(e,g),[P,T,M]=((t,e,n)=>{let r,o,i,s,l,c=0;const a=Vt({}),[d]=a,[u,h]=Dn(),[p,f]=Dn(),[w,g]=Dn(100),[b,v]=Dn(100),[y,m]=Dn((()=>c)),[x,$,S]=zn(t,n.Yt,((t,e)=>(n,r,o,i,s)=>{const{Gt:l}=n;return O.bind(0,[Dt(l,"pointerenter",(()=>{r(ye,!0)})),Dt(l,"pointerleave pointercancel",(()=>{r(ye)})),Ln(l,o),Cn(t,o,n,i,e,s)])})(e,n)),{K:L,Z:C,st:E,et:P,X:T,W:M}=n.Yt,{Xt:R,Qt:A,Wt:B,Nt:H,Ut:k}=x,{Zt:Y}=R,{Zt:X}=A,V=t=>{const{Gt:e}=t,n=T&&!M&&I(e)===C&&e;return[n,{transform:n?`translate(${z(E)}px, ${D(E)}px)`:""}]},F=(t,e)=>{if(m(),t)B(xe);else{const t=()=>B(xe,!0);c>0&&!e?y(t):t()}},j=()=>{s=o,s&&F(!0)},_=[g,m,v,f,h,S,Dt(L,"pointerover",j,{C:!0}),Dt(L,"pointerenter",j),Dt(L,"pointerleave",(()=>{s=!1,o&&F(!1)})),Dt(L,"pointermove",(()=>{r&&u((()=>{g(),F(!0),b((()=>{r&&F(!1)}))}))})),Dt(P,"scroll",(()=>{p((()=>{k(n()),i&&F(!0),w((()=>{i&&!s&&F(!1)}))})),T&&Y(V),T&&X(V)}))],N=d.bind(0);return N.Yt=x,N.jt=$,[(t,s,a)=>{const{Tt:d,zt:u,At:h,wt:p}=a,f=Xt(e,t,s),w=n(),{Ot:g,xt:b,vt:v}=w,[y,m]=f("scrollbars.theme"),[x,$]=f("scrollbars.visibility"),[O,S]=f("scrollbars.autoHide"),[L]=f("scrollbars.autoHideDelay"),[C,E]=f("scrollbars.dragScroll"),[P,T]=f("scrollbars.clickScroll"),R=d||u||p||s,z=h||$||s,D=(t,e)=>{const n="visible"===x||"auto"===x&&"scroll"===t;return B(ge,n,e),n};if(c=L,m&&(B(l),B(y,!0),l=y),S&&(r="move"===O,o="leave"===O,i="never"!==O,F(!i,!0)),E&&B(Oe,C),T&&B($e,P),z){const t=D(b.x,!0),e=D(b.y,!1);B(be,!(t&&e))}R&&(H(w),k(w),B(me,!g.x,!0),B(me,!g.y,!1),B(ue,v&&!M))},N,O.bind(0,_)]})(e,g,$),R=(t,e)=>{x(t,!!e)},A=c(R.bind(0,{},!0)),B=t=>{(t=>{Bn.delete(t),An.delete(t)})(u),A(),M(),S(),o=!0,m("destroyed",[H,!!t]),y()},H={options(t){if(t){const e=Ce(g,w(t));E(e)||(C(g,e),R(e))}return C({},g)},on:v,off:(t,e)=>{t&&e&&y(t,e)},state(){const{Ct:t,Ot:e,xt:n,Et:r,tt:i,bt:s,vt:l}=$();return C({},{overflowEdge:t,overflowAmount:e,overflowStyle:n,hasOverflow:r,padding:i,paddingAbsolute:s,directionRTL:l,destroyed:o})},elements(){const{J:t,K:e,tt:n,Z:r,nt:o,st:i,et:s}=$.Yt,{Xt:l,Qt:c}=T.Yt,a=t=>{const{qt:e,Ft:n,Gt:r}=t;return{scrollbar:r,track:n,handle:e}},d=t=>{const{Jt:e,Kt:n}=t,r=a(e[0]);return C({},r,{clone:()=>{const t=a(n());return P({},!0,{}),t}})};return C({},{target:t,host:e,padding:n||r,viewport:r,content:o||r,scrollOffsetElement:i,scrollEventElement:s,scrollbarHorizontal:d(l),scrollbarVertical:d(c)})},update:t=>(R({},t),H),destroy:B.bind(0)};return $.Vt(((t,e,n)=>{P(e,n,t)})),t(L(a),(t=>{const e=a[t];h(e)&&e(Hn,H)})),((t,e)=>{const{nativeScrollbarsOverlaid:n,body:r}=t||{},{W:o,X:i}=e,{Y:c,I:a}=je(),{nativeScrollbarsOverlaid:d,body:u}=c().cancel,h=null!=n?n:d,p=s(r)?u:r,f=(a.x||a.y)&&h,w=o&&(l(p)?!i:p);return!!f||!!w})(!d&&e.cancel,$.Yt)?(B(!0),H):($.jt(),T.jt(),((t,e)=>{Bn.set(t,e),An.add(t)})(u,H),m("initialized",[H]),$.Vt(((t,e,n)=>{const{ht:r,wt:o,_t:i,Tt:s,zt:l,At:c,gt:a,$t:d}=t;m("updated",[H,{updateHints:{sizeChanged:r,directionChanged:o,heightIntrinsicChanged:i,overflowEdgeChanged:s,overflowAmountChanged:l,overflowStyleChanged:c,contentMutation:a,hostMutation:d},changedOptions:e,force:n}])})),H.update(!0))};Hn.plugin=e=>{t(p(e)?e:[e],(t=>{const e=L(t)[0];Ee[e]=t[e]}))},Hn.env=()=>{const{k:t,I:e,T:n,B:r,V:o,L:i,N:s,U:l,Y:c,q:a,F:d,G:u}=je();return C({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,rtlScrollBehavior:r,flexboxGlue:o,cssCustomProperties:i,staticDefaultInitialization:s,staticDefaultOptions:l,getDefaultInitialization:c,setDefaultInitialization:a,getDefaultOptions:d,setDefaultOptions:u})};export{Hn as OverlayScrollbars,Ie as scrollbarsHidingPlugin,De as sizeObserverPlugin}; \ No newline at end of file +function t(e,n){if(g(e))for(let t=0;tn(e[t],t,e)));return e}function e(e,n){const r=d(n);if(p(n)||r){let t=r?"":{};if(e){const o=window.getComputedStyle(e,null);t=r?yt(e,o,n):n.reduce(((t,n)=>(t[n]=yt(e,o,n),t)),t)}return t}e&&t(L(n),(t=>mt(e,t,n[t])))}const n=(t,e)=>{const{o:n,u:r,_:o}=t;let i,s=n;const l=(t,e)=>{const n=s,l=t,c=e||(r?!r(n,l):n!==l);return(c||o)&&(s=l,i=n),[s,c,i]};return[e?t=>l(e(s,i),t):l,t=>[s,!!t,i]]},r=Node.ELEMENT_NODE,{toString:o,hasOwnProperty:i}=Object.prototype,s=t=>void 0===t,l=t=>null===t,c=t=>s(t)||l(t)?`${t}`:o.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),a=t=>"number"==typeof t,d=t=>"string"==typeof t,u=t=>"boolean"==typeof t,h=t=>"function"==typeof t,p=t=>Array.isArray(t),f=t=>"object"==typeof t&&!p(t)&&!l(t),g=t=>{const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!(!(p(t)||!h(t)&&n)||e>0&&f(t)&&!(e-1 in t))},w=t=>{if(!t||!f(t)||"object"!==c(t))return!1;let e;const n="constructor",r=t[n],o=r&&r.prototype,l=i.call(t,n),a=o&&i.call(o,"isPrototypeOf");if(r&&!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===r)},v=t=>{const e=Element;return!!t&&(e?t instanceof e:t.nodeType===r)},y=(t,e,n)=>t.indexOf(e,n),m=(t,e,n)=>(n||d(e)||!g(e)?t.push(e):Array.prototype.push.apply(t,e),t),x=e=>{const n=Array.from,r=[];return n&&e?n(e):(e instanceof Set?e.forEach((t=>{m(r,t)})):t(e,(t=>{m(r,t)})),r)},$=t=>!!t&&0===t.length,O=(e,n,r)=>{t(e,(t=>t&&t.apply(void 0,n||[]))),!r&&(e.length=0)},S=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),L=t=>t?Object.keys(t):[],C=(e,n,r,o,i,s,c)=>{const a=[n,r,o,i,s,c];return"object"==typeof e&&!l(e)||h(e)||(e={}),t(a,(n=>{t(L(n),(t=>{const r=n[t];if(e===r)return!0;const o=p(r);if(r&&(w(r)||o)){const n=e[t];let i=n;o&&!p(n)?i=[]:o||w(n)||(i={}),e[t]=C(i,r)}else e[t]=r}))})),e},E=t=>{for(const e in t)return!1;return!0},P=(t,e,n,r)=>{if(s(r))return n?n[t]:e;n&&!l(r)&&!1!==r&&(n[t]=r)},T=(t,e,n)=>{if(s(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)},M=(t,e,n,r)=>{if(n){const o=T(t,e)||"",i=new Set(o.split(" "));i[r?"add":"delete"](n),T(t,e,x(i).join(" ").trim())}},R=(t,e)=>{t&&t.removeAttribute(e)},z=(t,e)=>P("scrollLeft",0,t,e),D=(t,e)=>P("scrollTop",0,t,e),A=Element.prototype,B=(t,e)=>{const n=[],r=e?v(e)?e:null:document;return r?m(n,r.querySelectorAll(t)):n},H=(t,e)=>!!v(t)&&(A.matches||A.msMatchesSelector).call(t,e),k=t=>t?x(t.childNodes):[],I=t=>t?t.parentElement:null,Y=(t,e)=>{if(v(t)){const n=A.closest;if(n)return n.call(t,e);do{if(H(t,e))return t;t=I(t)}while(t)}return null},X=(e,n,r)=>{if(r&&e){let o,i=n;g(r)?(o=document.createDocumentFragment(),t(r,(t=>{t===i&&(i=t.previousSibling),o.appendChild(t)}))):o=r,n&&(i?i!==n&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(o,i||null)}},V=(t,e)=>{X(t,null,e)},F=(t,e)=>{X(I(t),t&&t.nextSibling,e)},j=e=>{if(g(e))t(x(e),(t=>j(t)));else if(e){const t=I(e);t&&t.removeChild(e)}},_=t=>{const e=document.createElement("div");return t&&T(e,"class",t),e},N=e=>{const n=_();return n.innerHTML=e.trim(),t(k(n),(t=>j(t)))},W=t=>t.charAt(0).toUpperCase()+t.slice(1),Z=["-webkit-","-moz-","-o-","-ms-"],G=["WebKit","Moz","O","MS","webkit","moz","o","ms"],K={},q={},J=e=>{let n=q[e];if(S(q,e))return n;const r=W(e),o=_().style;return t(Z,(t=>{const i=t.replace(/-/g,""),s=[e,t+e,i+r,W(i)+r];return!(n=s.find((t=>void 0!==o[t])))})),q[e]=n||""},U=e=>{let n=K[e]||window[e];return S(K,e)||(t(G,(t=>(n=n||window[t+W(e)],!n))),K[e]=n),n},Q=U("MutationObserver"),tt=U("IntersectionObserver"),et=U("ResizeObserver"),nt=U("cancelAnimationFrame"),rt=U("requestAnimationFrame"),ot=window.setTimeout,it=window.clearTimeout,st=/[^\x20\t\r\n\f]+/g,lt=(t,e,n)=>{const r=t&&t.classList;let o,i=0,s=!1;if(r&&e&&d(e)){const t=e.match(st)||[];for(s=t.length>0;o=t[i++];)s=!!n(r,o)&&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,r,o)=>{if(e&&n){let i=!0;return t(r,(t=>{(o?o(e[t]):e[t])!==(o?o(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,r,o,i=gt;const{g:s,v:l,p:c}=e||{},d=function(e){i(),it(n),n=r=void 0,i=gt,t.apply(this,e)},u=t=>c&&r?c(r,t):t,p=()=>{i!==gt&&d(u(o)||o)},f=function(){const t=x(arguments),e=h(s)?s():s,c=a(e)&&e>=0;if(c){const s=h(l)?l():l,c=a(s)&&s>=0,f=e>0?ot:rt,g=e>0?it:nt,w=u(t)||t,b=d.bind(0,w);i();const v=f(b,e);i=()=>g(v),c&&!n&&(n=ot(p,s)),r=o=w}else d(t)};return f.m=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{const{style:r}=t;s(r[e])?r.setProperty(e,n):r[e]=((t,e)=>!bt[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}catch(A){}},xt=t=>"rtl"===e(t,"direction"),$t=(t,n,r)=>{const o=n?`${n}-`:"",i=r?`-${r}`:"",s=`${o}top${i}`,l=`${o}right${i}`,c=`${o}bottom${i}`,a=`${o}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])}},{round:Ot}=Math,St={w:0,h:0},Lt=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:St,Ct=t=>t?{w:t.clientWidth,h:t.clientHeight}:St,Et=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:St,Pt=t=>{const n=parseFloat(e(t,"height"))||0,r=parseFloat(e(t,"width"))||0;return{w:r-Ot(r),h:n-Ot(n)}},Tt=t=>t.getBoundingClientRect();let Mt;const Rt=t=>t.split(" "),zt=(e,n,r,o)=>{t(Rt(n),(t=>{e.removeEventListener(t,r,o)}))},Dt=(e,n,r,o)=>{var i;const l=(()=>{if(s(Mt)){Mt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){Mt=!0}}))}catch(e){}}return Mt})(),c=null!=(i=l&&o&&o.S)?i:l,a=o&&o.$||!1,d=o&&o.C||!1,u=[],h=l?{passive:c,capture:a}:a;return t(Rt(n),(t=>{const n=d?o=>{e.removeEventListener(t,n,a),r&&r(o)}:r;m(u,zt.bind(null,e,t,n,a)),e.addEventListener(t,n,h)})),O.bind(0,u)},At=t=>t.stopPropagation(),Bt={x:0,y:0},Ht=t=>{const e=t?Tt(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Bt},kt=(e,n)=>{t(p(n)?n:[n],e)},It=e=>{const n=new Map,r=(t,e)=>{if(t){const r=n.get(t);kt((t=>{r&&r[t?"delete":"clear"](t)}),e)}else n.forEach((t=>{t.clear()})),n.clear()},o=(t,e)=>{const o=n.get(t)||new Set;return n.set(t,o),kt((t=>{t&&o.add(t)}),e),r.bind(0,t,e)};return t(L(e),(t=>{o(t,e[t])})),[o,r,(e,r)=>{const o=n.get(e);t(x(o),(t=>{r&&!$(r)?t.apply(0,r):t()}))}]},Yt=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&S(t,e)?t[e]:void 0),t):void 0,Xt=(t,e,n)=>r=>[Yt(t,r),n||void 0!==Yt(e,r)],Vt=t=>{let e=t;return[()=>e,t=>{e=C({},e,t)}]},Ft="os-environment",jt=`${Ft}-flexbox-glue`,_t=`${jt}-max`,Nt="data-overlayscrollbars",Wt=`${Nt}-overflow-x`,Zt=`${Nt}-overflow-y`,Gt="overflowVisible",Kt="scrollbarHidden",qt="updating",Jt="os-padding",Ut="os-viewport",Qt=`${Ut}-arrange`,te="os-content",ee=`${Ut}-scrollbar-hidden`,ne=`os-overflow-visible`,re="os-size-observer",oe=`${re}-appear`,ie=`${re}-listener`,se=`${ie}-scroll`,le=`${ie}-item`,ce=`${le}-final`,ae="os-trinsic-observer",de="os-scrollbar",ue=`${de}-rtl`,he=`${de}-horizontal`,pe=`${de}-vertical`,fe=`${de}-track`,ge=`${de}-handle`,we=`${de}-visible`,be=`${de}-cornerless`,ve=`${de}-transitionless`,ye=`${de}-interaction`,me=`${de}-unusable`,xe=`${de}-auto-hidden`,$e=`${fe}-interactive`,Oe=`${ge}-interactive`,Se=t=>JSON.stringify(t,((t,e)=>{if(h(e))throw new Error;return e})),Le={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},Ce=(e,n)=>{const r={};return t(L(n).concat(L(e)),(t=>{const o=e[t],i=n[t];if(f(o)&&f(i))C(r[t]={},Ce(o,i));else if(S(n,t)&&i!==o){let e=!0;if(p(o)||p(i))try{Se(o)===Se(i)&&(e=!1)}catch(K){}e&&(r[t]=i)}})),r},Ee={},Pe=()=>Ee,Te="__osOptionsValidationPlugin",Me=3333333,Re="scroll",ze="__osSizeObserverPlugin",De={[ze]:{O:(t,n,r)=>{const o=N(`
`);V(t,o),at(t,se);const i=o[0],s=i.lastChild,l=i.firstChild,c=null==l?void 0:l.firstChild;let a,d=Lt(i),u=d,h=!1;const p=()=>{z(l,Me),D(l,Me),z(s,Me),D(s,Me)},f=t=>{a=0,h&&(d=u,n(!0===t))},g=t=>{u=Lt(i),h=!t||!ut(u,d),t?(At(t),h&&!a&&(nt(a),a=rt(f))):f(!1===t),p()},w=m([],[Dt(l,Re,g),Dt(s,Re,g)]);return e(c,{width:Me,height:Me}),rt(p),[r?g.bind(0,!1):p,w]}}};let Ae=0;const{round:Be,abs:He}=Math,ke="__osScrollbarsHidingPlugin",Ie={[ke]:{A:t=>{const{T:e,I:n,L:r}=t,o=!(r||e||!n.x&&!n.y)&&document.createElement("style");return o&&(T(o,"id",`${Qt}-${Ae}`),Ae++),o},H:(n,r,o,i,s,l,c)=>[(t,r,l,c)=>{if(n){const{P:n}=s(),{D:a,M:d}=t,{x:u,y:h}=d,{x:p,y:f}=a,g=n[c?"paddingRight":"paddingLeft"],w=n.paddingTop,b=r.w+l.w,v=r.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(`#${T(i,"id")} + .${Qt}::before {}`,0);const n=e[0].style;n.width=y.w,n.height=y.h}}}else e(o,{"--os-vaw":y.w,"--os-vah":y.h})}return n},(i,a,d)=>{if(n){const u=d||l(i),{P:h}=s(),{M: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(o,L(w));return ct(o,Qt),r||(w.height=""),e(o,w),[()=>{c(u,a,n,v),e(o,v),at(o,Qt)},u]}return[gt]}],R:()=>{let t={w:0,h:0},e=0;return(n,r,o)=>{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(Be(i.w/(t.w/100))),h:He(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=He(t),r=He(e);return!(n===r||n+1===r||n-1===r)})(a.w,a.h);if(u&&h&&d!==e&&d>0){const[t,e]=r();C(n.k,t),e&&o()}t=i,e=d}}}};let Ye;const Xe=(t,e,n,r)=>{V(t,e);const o=Ct(e),i=Lt(e),s=Pt(n);return r&&j(e),{x:i.h-o.h+s.h,y:i.w-o.w+s.w}},Ve=(t,n)=>{const r="hidden";e(t,{overflowX:r,overflowY:r,direction:"rtl"}),z(t,0);const o=Ht(t),i=Ht(n);z(t,-999);const s=Ht(n);return{i:o.x===i.x,n:i.x!==s.x}},Fe=(t,e)=>{const n=at(t,jt),r=Tt(t),o=Tt(e),i=ft(o,r,!0),s=at(t,_t),l=Tt(t),c=Tt(e),a=ft(c,l,!0);return n(),s(),i&&a},je=()=>(Ye||(Ye=(()=>{const{body:t}=document,r=N(`
`)[0],o=r.firstChild,[i,,s]=It(),[l,c]=n({o:Xe(t,r,o),u:ht},Xe.bind(0,t,r,o,!0)),[a]=c(),d=(t=>{let n=!1;const r=at(t,ee);try{n="none"===e(t,J("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(o){}return r(),n})(r),u={x:0===a.x,y:0===a.y},h={host:null,padding:!d,viewport:t=>d&&t===t.ownerDocument.body&&t,content:!1,scrollbarsSlot:!0,cancel:{nativeScrollbarsOverlaid:!0,body:null}},p=C({},Le),f={k:a,I:u,T:d,L:"-1"===e(r,"zIndex"),B:Ve(r,o),V:Fe(r,o),j:t=>i("_",t),Y:C.bind(0,{},h),q(t){C(h,t)},F:C.bind(0,{},p),G(t){C(p,t)},N:C({},h),U:C({},p)};if(R(r,"style"),j(r),!(d||u.x&&u.y)){let t;window.addEventListener("resize",(()=>{const e=Pe()[ke];t=t||e&&e.R(),t&&t(f,l,s.bind(0,"_"))}))}return f})()),Ye),_e=(t,e)=>h(t)?t.apply(0,e):t,Ne=(t,e,n,r)=>{const o=s(r)?n:r;return _e(o,t)||e()},We=(t,e,n,r)=>{const o=s(r)?n:r,i=_e(o,t);return!!i&&(b(i)?i:e())},Ze=_.bind(0,""),Ge=t=>{V(I(t),k(t)),j(t)},Ke=t=>{const e=je(),{Y:n,T:r}=e,o=Pe()[ke],i=o&&o.A,{host:s,viewport:l,padding:c,content:a}=n(),d=b(t),u=d?{}:t,{host:h,padding:p,viewport:f,content:g}=u,w=d?t:u.target,v=H(w,"textarea"),x=w.ownerDocument,$=w===x.body,S=x.defaultView,C=Ne.bind(0,[w]),E=We.bind(0,[w]),P=C(Ze,l,f),z=P===w,D=z&&$,A={J:w,K:v?C(Ze,s,h):w,Z:P,tt:!z&&E(Ze,c,p),nt:!z&&E(Ze,a,g),ot:!z&&!r&&i&&i(e),st:D?x.documentElement:P,et:D?x:P,ct:S,rt:x,lt:v,W:$,it:d,X:z,ut:(t,e)=>z?((t,e,n)=>{const r=T(t,Nt)||"";return new Set(r.split(" ")).has(n)})(P,0,e):((t,e)=>lt(t,e,((t,e)=>t.contains(e))))(P,t),dt:(t,e,n)=>z?M(P,Nt,e,n):(n?at:ct)(P,t)},B=L(A).reduce(((t,e)=>{const n=A[e];return m(t,!(!n||I(n))&&n)}),[]),Y=t=>t?y(B,t)>-1:null,{J:_,K:N,tt:W,Z,nt:G,ot:K}=A,q=[],J=v&&Y(N);let U=v?_:k([G,Z,W,N,_].find((t=>!1===Y(t))));const Q=G||Z;return[A,()=>{const t=((t,e)=>(T(t,Nt,e),R.bind(0,t,Nt)))(N,z?"viewport":"host"),e=at(W,Jt),n=at(Z,!z&&Ut),o=at(G,te),i=D?at(I(w),ee):gt;J&&(F(_,N),m(q,(()=>{F(N,_),j(N)}))),V(Q,U),V(N,W),V(W||N,!z&&Z),V(Z,G),m(q,(()=>{i(),t(),R(Z,Wt),R(Z,Zt),Y(G)&&Ge(G),Y(Z)&&Ge(Z),Y(W)&&Ge(W),e(),n(),o()})),r&&!z&&m(q,ct.bind(0,Z,ee)),K&&(((t,e)=>{X(I(t),t,e)})(Z,K),m(q,j.bind(0,K))),U=0},O.bind(0,q)]},qe=(t,n)=>{const{nt:r}=t,[o]=n;return t=>{const{V:n}=je(),{ft:i}=o(),{_t:s}=t,l=(r||!n)&&s;return l&&e(r,{height:i?"":"100%"}),{ht:l,gt:l}}},Je=(t,r)=>{const[o,i]=r,{K:s,tt:l,Z:c,X:a}=t,[d,u]=n({u:pt,o:$t()},$t.bind(0,s,"padding",""));return(t,n,r)=>{let[s,h]=u(r);const{T:p,V:f}=je(),{vt:g}=o(),{ht:w,gt:b,wt:v}=t,[y,m]=n("paddingAbsolute");(w||h||!f&&b)&&([s,h]=d(r));const x=!a&&(m||v||h);if(x){const t=!y||!l&&!p,n=s.r+s.l,r=s.t+s.b,o={marginRight:t&&!g?-n:0,marginBottom:t?-r: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,o),e(c,a),i({tt:s,bt:!t,P:l?a:C({},o,a)})}return{yt:x}}},{max:Ue}=Math,Qe=Ue.bind(0,0),tn="visible",en="hidden",nn=42,rn={u:ut,o:{w:0,h:0}},on={u:ht,o:{x:en,y:en}},sn=(t,e,n)=>n?at(t,e):ct(t,e),ln=t=>0===t.indexOf(tn),cn=(t,r)=>{const[o,i]=r,{K:s,tt:l,Z:c,ot:a,X:d,dt:u,W:h,ct:p}=t,{k:f,V:g,T:w,I:b}=je(),v=Pe()[ke],y=!d&&!w&&(b.x||b.y),m=h&&d,[x,$]=n(rn,Pt.bind(0,c)),[O,S]=n(rn,Et.bind(0,c)),[L,C]=n(rn),[E,P]=n(rn),[R]=n(on),z=(t,n)=>{if(e(c,{height:""}),n){const{bt:n,tt:r}=o(),{St:i,D:l}=t,a=Pt(s),d=Ct(s),u="content-box"===e(c,"boxSizing"),h=n||u?r.b+r.t:0,p=!(b.x&&u);e(c,{height:d.h+a.h+(i.x&&p?l.x:0)-h})}},D=(t,n)=>{const r=w||t?0:nn,o=(t,o,i)=>{const s=e(c,t),l="scroll"===(n?n[t]:s);return[s,l,l&&!w?o?r:i:0,o&&!!r]},[i,s,l,a]=o("overflowX",b.x,f.x),[d,u,h,p]=o("overflowY",b.y,f.y);return{xt:{x:i,y:d},St:{x:s,y:u},D:{x:l,y:h},M:{x:a,y:p}}},A=(t,e,n,r)=>{const{D:i,M:s}=t,{x:l,y:c}=s,{x:a,y:d}=i,{P:u}=o(),h=e?"marginLeft":"marginRight",p=e?"paddingLeft":"paddingRight",f=u[h],g=u.marginBottom,w=u[p],b=u.paddingBottom;r.width=`calc(100% + ${d+-1*f}px)`,r[h]=-d+f,r.marginBottom=-a+g,n&&(r[p]=w+(c?d:0),r.paddingBottom=b+(l?a:0))},[B,H]=v?v.H(y,g,c,a,o,D,A):[()=>y,()=>[gt]];return(t,n,r)=>{const{ht:a,$t:h,gt:f,yt:v,_t:y,wt:k}=t,{ft:I,vt:Y}=o(),[X,V]=n("showNativeOverlaidScrollbars"),[F,j]=n("overflow"),_=X&&b.x&&b.y,N=!d&&!g&&(a||f||h||V||y),W=ln(F.x),Z=ln(F.y),G=W||Z;let K,q=$(r),J=S(r),U=C(r),Q=P(r);if(V&&w&&u(ee,Kt,!_),N&&(K=D(_),z(K,I)),a||v||f||k||V){G&&u(ne,Gt,!1);const[t,e]=H(_,Y,K),[n,o]=q=x(r),[i,s]=J=O(r),l=Ct(c);let a=i,d=l;t(),(s||o||V)&&e&&!_&&B(e,i,n,Y)&&(d=Ct(c),a=Et(c));const h={w:Qe(Ue(i.w,a.w)+n.w),h:Qe(Ue(i.h,a.h)+n.h)},f={w:Qe(m?p.innerWidth:d.w+Qe(l.w-i.w)+n.w),h:Qe(m?p.innerHeight:d.h+Qe(l.h-i.h)+n.h)};Q=E(f),U=L(((t,e)=>{const n=window.devicePixelRatio%1!=0?1:0,r={w:Qe(t.w-e.w),h:Qe(t.h-e.h)};return{w:r.w>n?r.w:0,h:r.h>n?r.h:0}})(h,f),r)}const[tt,et]=Q,[nt,rt]=U,[ot,it]=J,[st,lt]=q,ct={x:nt.w>0,y:nt.h>0},at=W&&Z&&(ct.x||ct.y)||W&&ct.x&&!ct.y||Z&&ct.y&&!ct.x;if(v||k||lt||it||et||rt||j||V||N){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},n=((t,e,n,r)=>{const o=(t,e)=>{const n=ln(t),r=e&&n&&t.replace(`${tn}-`,"")||"";return[e&&!n?t:"",ln(r)?"hidden":r]},[i,s]=o(n.x,e.x),[l,c]=o(n.y,e.y);return r.overflowX=s&&l?s:i,r.overflowY=c&&i?c:l,D(t,r)})(_,ct,F,t),r=B(n,ot,st,Y);d||A(n,Y,r,t),N&&z(n,I),d?(T(s,Wt,t.overflowX),T(s,Zt,t.overflowY)):e(c,t)}M(s,Nt,Gt,at),sn(l,ne,at),!d&&sn(c,ne,G);const[dt,ut]=R(D(_).xt);return i({xt:dt,Ct:{x:tt.w,y:tt.h},Ot:{x:nt.w,y:nt.h},Et:ct}),{At:ut,Tt:et,zt:rt}}},an=(e,n,r)=>{const o={},i=n||{};return t(L(e).concat(L(i)),(t=>{const n=e[t],s=i[t];o[t]=!!(r||n||s)})),o},dn=3333333,un=t=>t&&(t.height||t.width),hn=(t,e,r)=>{const{It:o=!1,Lt:i=!1}=r||{},s=Pe()[ze],{B:l}=je(),c=N(`
`)[0],a=c.firstChild,d=xt.bind(0,t),[h]=n({o:void 0,_:!0,u:(t,e)=>!(!t||!un(t)&&un(e))}),g=t=>{const n=p(t)&&t.length>0&&f(t[0]),r=!n&&u(t[0]);let i=!1,s=!1,a=!0;if(n){const[e,,n]=h(t.pop().contentRect),r=un(e),o=un(n);i=!n||!r,s=!o&&r,a=!i}else r?[,a]=t:s=!0===t;if(o&&a){const e=r?t[0]:xt(c);z(c,e?l.n?-dn:l.i?0:dn:dn),D(c,dn)}i||e({ht:!r,Ht:r?t:void 0,Lt:!!s})},w=[];let b=!!i&&g;return[()=>{O(w),j(c)},()=>{if(et){const t=new et(g);t.observe(a),m(w,(()=>{t.disconnect()}))}else if(s){const[t,e]=s.O(a,g,i);b=t,m(w,e)}if(o){const[t]=n({o:!d()},d);m(w,Dt(c,"scroll",(e=>{const n=t(),[r,o]=n;o&&(ct(a,"ltr rtl"),at(a,r?"rtl":"ltr"),g(n)),At(e)})))}b&&(at(c,oe),m(w,Dt(c,"animationstart",b,{C:!!et}))),V(t,c)}]},pn=(t,e)=>{let r;const o=_(ae),i=[],[s]=n({o:!1}),l=(t,n)=>{if(t){const r=s((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=r;if(o)return!n&&e(r),[r]}},c=(t,e)=>{if(t&&t.length>0)return l(t.pop(),e)};return[()=>{O(i),j(o)},()=>{if(tt)r=new tt((t=>c(t)),{root:t}),r.observe(o),m(i,(()=>{r.disconnect()}));else{const t=()=>{const t=Lt(o);l(t)},[e,n]=hn(o,t);m(i,e),n(),t()}V(t,o)},()=>{if(r)return c(r.takeRecords(),!0)}]},fn=(e,n,r,o)=>{let i=!1;const{Pt:s,Dt:l,Mt:c,Rt:a,kt:u,Bt:h}=o||{},p=wt((()=>{i&&r(!0)}),{g:33,v:99}),[f,g]=((e,n,r)=>{let o,i=!1;const s=s=>{if(r){const l=r.reduce(((t,n)=>{if(n){const r=n[0],o=n[1],i=o&&r&&(s?s(r):B(r,e));i&&i.length&&o&&d(o)&&m(t,[i,o.trim()],!0)}return t}),[]);t(l,(e=>t(e[0],(t=>{const r=e[1],s=o.get(t);if(s){const t=s[0],e=s[1];t===r&&e()}const l=Dt(t,r,(e=>{i?(l(),o.delete(t)):n(e)}));o.set(t,[r,l])}))))}};return r&&(o=new WeakMap,s()),[()=>{i=!0},s]})(e,p,c),w=l||[],b=(s||[]).concat(w),v=(i,s)=>{const l=u||gt,c=h||gt,p=[],f=[];let b=!1,v=!1,x=!1;return t(i,(t=>{const{attributeName:r,target:i,type:s,oldValue:u,addedNodes:h}=t,g="attributes"===s,$="childList"===s,O=e===i,S=g&&d(r)?T(i,r):0,L=0!==S&&u!==S,C=y(w,r)>-1&&L;if(n&&!O){const n=!g,s=g&&C,d=s&&a&&H(i,a),p=(d?!l(i,r,u,S):n||s)&&!c(t,!!d,e,o);m(f,h),v=v||p,x=x||$}!n&&O&&L&&!l(i,r,u,S)&&(m(p,r),b=b||C)})),x&&!$(f)&&g((t=>f.reduce(((e,n)=>(m(e,B(t,n)),H(n,t)?m(e,n):e)),[]))),n?(!s&&v&&r(!1),[!1]):!$(p)||b?(!s&&r(p,b),[p,b]):void 0},x=new Q((t=>v(t)));return x.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:n,childList:n,characterData:n}),i=!0,[()=>{i&&(f(),x.disconnect(),i=!1)},()=>{if(i){p.m();const t=x.takeRecords();return!$(t)&&v(t,!0)}}]},gn=`[${Nt}]`,wn=`.${Ut}`,bn=["tabindex"],vn=["wrap","cols","rows"],yn=["id","class","style","open"],mn=(e,r,o)=>{let i,s,l;const[,c]=r,{K:u,Z:f,nt:g,lt:w,X:b,ut:x,dt:$}=e,{V:O}=je(),[S]=n({u:ut,o:{w:0,h:0}},(()=>{const t=x(ne,Gt),e=x(Qt,""),n=e&&z(f),r=e&&D(f);$(ne,Gt),$(Qt,""),$("",qt,!0);const o=Et(g),i=Et(f),s=Pt(f);return $(ne,Gt,t),$(Qt,"",e),$("",qt),z(f,n),D(f,r),{w:i.w+o.w+s.w,h:i.h+o.h+s.h}})),E=w?vn:yn.concat(vn),P=wt(o,{g:()=>i,v:()=>s,p(t,e){const[n]=t,[r]=e;return[L(n).concat(L(r)).reduce(((t,e)=>(t[e]=n[e]||r[e],t)),{})]}}),M=e=>{t(e||bn,(t=>{if(y(bn,t)>-1){const e=T(u,t);d(e)?T(f,t,e):R(f,t)}}))},A=(t,e)=>{const[n,r]=t,i={_t:r};return c({ft:n}),!e&&o(i),i},B=({ht:t,Ht:e,Lt:n})=>{const r=!t||n?o:P;let i=!1;if(e){const[t,n]=e;i=n,c({vt:t})}r({ht:t,wt:i})},H=(t,e)=>{const[,n]=S(),r={gt:n};return n&&!e&&(t?o:P)(r),r},k=(t,e,n)=>{const r={$t:e};return e?!n&&P(r):b||M(t),r},[I,X,V]=g||!O?pn(u,A):[gt,gt,gt],[F,j]=b?[gt,gt]:hn(u,B,{Lt:!0,It:!0}),[_,N]=fn(u,!1,k,{Dt:yn,Pt:yn.concat(bn)}),W=b&&et&&new et(B.bind(0,{ht:!0}));return W&&W.observe(u),M(),[()=>{I(),F(),l&&l[0](),W&&W.disconnect(),_()},()=>{j(),X()},()=>{const t={},e=N(),n=V(),r=l&&l[1]();return e&&C(t,k.apply(0,m(e,!0))),n&&C(t,A.apply(0,m(n,!0))),r&&C(t,H.apply(0,m(r,!0))),t},t=>{const[e]=t("updating.ignoreMutation"),[n,r]=t("updating.attributes"),[o,c]=t("updating.elementEvents"),[d,u]=t("updating.debounce"),w=t=>h(e)&&e(t);if((c||r)&&(l&&(l[1](),l[0]()),l=fn(g||f,!0,H,{Dt:E.concat(n||[]),Pt:E.concat(n||[]),Mt:o,Rt:gn,Bt:(t,e)=>{const{target:n,attributeName:r}=t;return!(e||!r||b)&&((t,e,n)=>{const r=t&&Y(t,e),o=t&&((t,e)=>{const n=e?v(e)?e:null:document;return n?n.querySelector(t):null})(n,r),i=Y(o,e)===r;return!(!r||!o)&&(r===t||o===t||i&&Y(Y(t,n),e)!==r)})(n,gn,wn)||!!Y(n,`.${de}`)||!!w(t)}})),u)if(P.m(),p(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)}]},xn={x:0,y:0},$n={tt:{t:0,r:0,b:0,l:0},bt:!1,P:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Ct:xn,Ot:xn,xt:{x:"hidden",y:"hidden"},Et:{x:!1,y:!1},ft:!1,vt:!1},{round:On}=Math,Sn=t=>({x:t.clientX,y:t.clientY}),Ln=(t,e)=>Dt(t,"mousedown",Dt.bind(0,e,"click",At,{C:!0,$:!0}),{$:!0}),Cn=(t,e,n,r,o,i)=>{const{B:s}=je(),{qt:l,Ft:c,Gt:a}=n,d=`scroll${i?"Left":"Top"}`,u=`${i?"x":"y"}`,h=`${i?"w":"h"}`,p=(t,e,n)=>p=>{const{Ot:f}=o(),g=(Sn(p)[u]-e)*n/(Lt(c)[h]-Lt(l)[h])*f[u],w=xt(a)&&i?s.n||s.i?1:-1:1;r[d]=t+g*w};return Dt(l,"pointerdown",(n=>{if(((t,e,n)=>{const r=e.scrollbars,{button:o,isPrimary:i,pointerType:s}=t,{pointers:l}=r;return 0===o&&i&&r["dragScroll"]&&(l||[]).includes(s)})(n,t)){const t=Dt(e,"selectstart",(t=>(t=>t.preventDefault())(t)),{S:!1}),o=Dt(l,"pointermove",p(r[d]||0,Sn(n)[u],1/(t=>{const{width:e,height:n}=Tt(t),{w:r,h:o}=Lt(t);return{x:On(e)/r||1,y:On(n)/o||1}})(r)[u]));Dt(l,"pointerup",(e=>{t(),o(),l.releasePointerCapture(e.pointerId)}),{C:!0}),l.setPointerCapture(n.pointerId)}}))},{min:En,max:Pn,abs:Tn,round:Mn}=Math,Rn=(t,e,n,r)=>{if(r){const t=n?"x":"y",{Ot:e,Ct:o}=r,i=o[t],s=e[t];return Pn(0,En(1,i/(i+s)))}const o=n?"w":"h",i=Lt(t)[o],s=Lt(e)[o];return Pn(0,En(1,i/s))},zn=(n,r,o)=>{const{Y:i}=je(),{scrollbarsSlot:s}=i(),{rt:l,J:c,K:a,Z:d,it:h,st:p}=r,{scrollbarsSlot:f}=h?{}:n,g=We([c,a,d],(()=>a),s,f),w=(e,n,r)=>{const o=r?at:ct;t(e,(t=>{o(t.Gt,n)}))},b=(n,r)=>{t(n,(t=>{const[n,o]=r(t);e(n,o)}))},v=(t,e,n)=>{b(t,(t=>{const{qt:r,Ft:o}=t;return[r,{[n?"width":"height"]:`${(100*Rn(r,o,n,e)).toFixed(3)}%`}]}))},y=(t,e,n)=>{const r=n?"X":"Y";b(t,(t=>{const{qt:o,Ft:i,Gt:s}=t,l=((t,e,n,r,o,i)=>{const{B:s}=je(),l=i?"x":"y",c=i?"Left":"Top",{Ot:a}=r,d=Mn(a[l]),u=Tn(n[`scroll${c}`]),h=i&&o,p=s.i?u:d-u,f=En(1,(h?p:u)/d),g=Rn(t,e,i);return 1/g*(1-g)*f})(o,i,p,e,xt(s),n);return[o,{transform:l==l?`translate${r}(${(100*l).toFixed(3)}%)`:""}]}))},x=[],S=[],L=[],C=(t,e,n)=>{const r=u(n),o=!r||!n;(!r||n)&&w(S,t,e),o&&w(L,t,e)},E=t=>{const e=t?he:pe,n=t?S:L,r=$(n)?ve:"",i=_(`${de} ${e} ${r}`),s=_(fe),c=_(ge),a={Gt:i,Ft:s,qt:c};return V(i,s),V(s,c),m(n,a),m(x,[j.bind(0,i),o(a,C,l,p,t)]),a},P=E.bind(0,!0),T=E.bind(0,!1);return P(),T(),[{Nt:t=>{v(S,t,!0),v(L,t)},Ut:t=>{y(S,t,!0),y(L,t)},Wt:C,Xt:{Jt:S,Kt:P,Zt:b.bind(0,S)},Qt:{Jt:L,Kt:T,Zt:b.bind(0,L)}},()=>{V(g,S[0].Gt),V(g,L[0].Gt),ot((()=>{C(ve)}),300)},O.bind(0,x)]},Dn=t=>{let e;const n=t?ot:rt,r=t?it:nt;return[o=>{r(e),e=n(o,h(t)?t():t)},()=>r(e)]},An=new WeakMap,Bn=t=>An.get(t),Hn=(e,n,r)=>{const{F:o,j:i}=je(),c=Pe(),a=b(e),d=a?e:e.target,u=Bn(d);if(n&&!u){let u=!1;const p=c[Te],f=t=>{const e=t||{},n=p&&p.O;return n?n(e,!0):e},g=C({},o(),f(n)),[w,b,v]=It(r),[y,m,x]=((e,n)=>{const r=Xt(n,{}),o=Vt($n),[i,s,l]=It(),[c]=o,[a,d,u]=Ke(e),h=((e,n)=>{const{Z:r,dt:o}=e,{T:i,I:s,V:l}=je(),c=!i&&(s.x||s.y),a=[qe(e,n),Je(e,n),cn(e,n)];return(e,n,i)=>{const s=an(C({ht:!1,yt:!1,wt:!1,_t:!1,Tt:!1,zt:!1,At:!1,$t:!1,gt:!1},n),{},i),d=c||!l,u=d&&z(r),h=d&&D(r);o("",qt,!0);let p=s;return t(a,(t=>{p=an(p,t(p,e,!!i)||{},i)})),z(r,u),D(r,h),o("",qt),p}})(a,o),p=(t,e,n)=>{const r=L(t).some((e=>t[e]));(r||!E(e)||n)&&l("u",[t,e,n])},[f,g,w,b]=mn(a,o,(t=>{p(h(r,t),{},!1)})),v=c.bind(0);return v.Vt=t=>{i("u",t)},v.jt=()=>{g(),d()},v.Yt=a,[(t,e)=>{const r=Xt(n,t,e);b(r),p(h(r,w(),e),t,!!e)},v,()=>{s(),f(),u()}]})(e,g),[$,S,P]=((t,e,n)=>{let r,o,i,s,l,c=0;const a=Vt({}),[d]=a,[u,h]=Dn(),[p,f]=Dn(),[g,w]=Dn(100),[b,v]=Dn(100),[y,m]=Dn((()=>c)),[x,$,S]=zn(t,n.Yt,((t,e)=>(n,r,o,i,s)=>{const{Gt:l}=n;return O.bind(0,[Dt(l,"pointerenter",(()=>{r(ye,!0)})),Dt(l,"pointerleave pointercancel",(()=>{r(ye)})),Ln(l,o),Cn(t,o,n,i,e,s)])})(e,n)),{K:L,Z:C,st:E,et:P,X:T,W:M}=n.Yt,{Xt:R,Qt:A,Wt:B,Nt:H,Ut:k}=x,{Zt:Y}=R,{Zt:X}=A,V=t=>{const{Gt:e}=t,n=T&&!M&&I(e)===C&&e;return[n,{transform:n?`translate(${z(E)}px, ${D(E)}px)`:""}]},F=(t,e)=>{if(m(),t)B(xe);else{const t=()=>B(xe,!0);c>0&&!e?y(t):t()}},j=()=>{s=o,s&&F(!0)},_=[w,m,v,f,h,S,Dt(L,"pointerover",j,{C:!0}),Dt(L,"pointerenter",j),Dt(L,"pointerleave",(()=>{s=!1,o&&F(!1)})),Dt(L,"pointermove",(()=>{r&&u((()=>{w(),F(!0),b((()=>{r&&F(!1)}))}))})),Dt(P,"scroll",(()=>{p((()=>{k(n()),i&&F(!0),g((()=>{i&&!s&&F(!1)}))})),T&&Y(V),T&&X(V)}))],N=d.bind(0);return N.Yt=x,N.jt=$,[(t,s,a)=>{const{Tt:d,zt:u,At:h,wt:p}=a,f=Xt(e,t,s),g=n(),{Ot:w,xt:b,vt:v}=g,[y,m]=f("scrollbars.theme"),[x,$]=f("scrollbars.visibility"),[O,S]=f("scrollbars.autoHide"),[L]=f("scrollbars.autoHideDelay"),[C,E]=f("scrollbars.dragScroll"),[P,T]=f("scrollbars.clickScroll"),R=d||u||p||s,z=h||$||s,D=(t,e)=>{const n="visible"===x||"auto"===x&&"scroll"===t;return B(we,n,e),n};if(c=L,m&&(B(l),B(y,!0),l=y),S&&(r="move"===O,o="leave"===O,i="never"!==O,F(!i,!0)),E&&B(Oe,C),T&&B($e,P),z){const t=D(b.x,!0),e=D(b.y,!1);B(be,!(t&&e))}R&&(H(g),k(g),B(me,!w.x,!0),B(me,!w.y,!1),B(ue,v&&!M))},N,O.bind(0,_)]})(e,g,m),T=(t,e)=>{y(t,!!e)},M=i(T.bind(0,{},!0)),R=t=>{(t=>{An.delete(t)})(d),M(),P(),x(),u=!0,v("destroyed",[A,!!t]),b()},A={options(t){if(t){const e=Ce(g,f(t));E(e)||(C(g,e),T(e))}return C({},g)},on:w,off:(t,e)=>{t&&e&&b(t,e)},state(){const{Ct:t,Ot:e,xt:n,Et:r,tt:o,bt:i,vt:s}=m();return C({},{overflowEdge:t,overflowAmount:e,overflowStyle:n,hasOverflow:r,padding:o,paddingAbsolute:i,directionRTL:s,destroyed:u})},elements(){const{J:t,K:e,tt:n,Z:r,nt:o,st:i,et:s}=m.Yt,{Xt:l,Qt:c}=S.Yt,a=t=>{const{qt:e,Ft:n,Gt:r}=t;return{scrollbar:r,track:n,handle:e}},d=t=>{const{Jt:e,Kt:n}=t,r=a(e[0]);return C({},r,{clone:()=>{const t=a(n());return $({},!0,{}),t}})};return C({},{target:t,host:e,padding:n||r,viewport:r,content:o||r,scrollOffsetElement:i,scrollEventElement:s,scrollbarHorizontal:d(l),scrollbarVertical:d(c)})},update:t=>(T({},t),A),destroy:R.bind(0)};return m.Vt(((t,e,n)=>{$(e,n,t)})),t(L(c),(t=>{const e=c[t];h(e)&&e(Hn,A)})),((t,e)=>{const{nativeScrollbarsOverlaid:n,body:r}=t||{},{W:o,X:i}=e,{Y:c,I:a}=je(),{nativeScrollbarsOverlaid:d,body:u}=c().cancel,h=null!=n?n:d,p=s(r)?u:r,f=(a.x||a.y)&&h,g=o&&(l(p)?!i:p);return!!f||!!g})(!a&&e.cancel,m.Yt)?(R(!0),A):(m.jt(),S.jt(),((t,e)=>{An.set(t,e)})(d,A),v("initialized",[A]),m.Vt(((t,e,n)=>{const{ht:r,wt:o,_t:i,Tt:s,zt:l,At:c,gt:a,$t:d}=t;v("updated",[A,{updateHints:{sizeChanged:r,directionChanged:o,heightIntrinsicChanged:i,overflowEdgeChanged:s,overflowAmountChanged:l,overflowStyleChanged:c,contentMutation:a,hostMutation:d},changedOptions:e,force:n}])})),A.update(!0))}return u};Hn.plugin=e=>{t(p(e)?e:[e],(t=>{const e=L(t)[0];Ee[e]=t[e]}))},Hn.valid=t=>{const e=t&&t.elements,n=h(e)&&e();return w(n)&&!!Bn(n.target)},Hn.env=()=>{const{k:t,I:e,T:n,B:r,V:o,L:i,N:s,U:l,Y:c,q:a,F:d,G:u}=je();return C({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,rtlScrollBehavior:r,flexboxGlue:o,cssCustomProperties:i,staticDefaultInitialization:s,staticDefaultOptions:l,getDefaultInitialization:c,setDefaultInitialization:a,getDefaultOptions:d,setDefaultOptions:u})};export{Hn as OverlayScrollbars,Ie as scrollbarsHidingPlugin,De as sizeObserverPlugin}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index e504e99..dfa890d 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -1355,6 +1355,7 @@ W(Z, J); y(K, X.bind(0, J)); } + rr = 0; }; return [ I, er, O.bind(0, K) ]; }; @@ -2608,158 +2609,160 @@ } }, Q, O.bind(0, K) ]; }; - var On = new Set; - var xn = new WeakMap; - var En = function addInstance(r, a) { - xn.set(r, a); - On.add(r); + var On = new WeakMap; + var xn = function addInstance(r, a) { + On.set(r, a); }; - var An = function removeInstance(r) { - xn.delete(r); + var En = function removeInstance(r) { On.delete(r); }; - var Pn = function getInstance(r) { - return xn.get(r); + var An = function getInstance(r) { + return On.get(r); }; - var zn = function OverlayScrollbars(r, a, e) { - var n = false; - var t = me(), i = t.Y, v = t.q; - var o = ka(); - var u = b(r); - var f = u ? r : r.target; - var l = Pn(f); - if (l) { - return l; - } - var c = o[re]; - var d = function validateOptions(r) { - var a = r || {}; - var e = c && c.P; - return e ? e(a, true) : a; - }; - var g = A({}, i(), d(a)); - var h = Zr(e), p = h[0], w = h[1], m = h[2]; - var y = vn(r, g), S = y[0], C = y[1], O = y[2]; - var x = Cn(r, g, C), z = x[0], T = x[1], L = x[2]; - var H = function update(r, a) { - S(r, !!a); - }; - var D = v(H.bind(0, {}, true)); - var M = function destroy(r) { - An(f); - D(); - L(); - O(); - n = true; - m("destroyed", [ R, !!r ]); - w(); - }; - var R = { - options: function options(r) { - if (r) { - var a = Va(g, d(r)); - if (!P(a)) { - A(g, a); - H(a); - } - } - return A({}, g); - }, - on: p, - off: function off(r, a) { - r && a && w(r, a); - }, - state: function state() { - var r = C(), a = r.Er, e = r.Ar, t = r.Cr, i = r.Pr, v = r.ar, o = r.mr, u = r.br; - return A({}, { - overflowEdge: a, - overflowAmount: e, - overflowStyle: t, - hasOverflow: i, - padding: v, - paddingAbsolute: o, - directionRTL: u, - destroyed: n - }); - }, - elements: function elements() { - var r = C.Ur, a = r.J, e = r.K, n = r.ar, t = r.rr, i = r.er, v = r.tr, o = r.ir; - var u = T.Ur, f = u.$r, l = u.ra; - var c = function translateScrollbarStructure(r) { - var a = r.Nr, e = r.Yr, n = r.Wr; - return { - scrollbar: n, - track: e, - handle: a - }; - }; - var s = function translateScrollbarsSetupElement(r) { - var a = r.Jr, e = r.Kr; - var n = c(a[0]); - return A({}, n, { - clone: function clone() { - var r = c(e()); - z({}, true, {}); - return r; + var Pn = function OverlayScrollbars(r, a, e) { + var n = me(), t = n.Y, i = n.q; + var v = ka(); + var o = b(r); + var u = o ? r : r.target; + var f = An(u); + if (a && !f) { + var l = false; + var c = v[re]; + var d = function validateOptions(r) { + var a = r || {}; + var e = c && c.P; + return e ? e(a, true) : a; + }; + var g = A({}, t(), d(a)); + var h = Zr(e), p = h[0], w = h[1], m = h[2]; + var y = vn(r, g), S = y[0], C = y[1], O = y[2]; + var x = Cn(r, g, C), z = x[0], T = x[1], L = x[2]; + var H = function update(r, a) { + S(r, !!a); + }; + var D = i(H.bind(0, {}, true)); + var M = function destroy(r) { + En(u); + D(); + L(); + O(); + l = true; + m("destroyed", [ R, !!r ]); + w(); + }; + var R = { + options: function options(r) { + if (r) { + var a = Va(g, d(r)); + if (!P(a)) { + A(g, a); + H(a); } - }); - }; - return A({}, { - target: a, - host: e, - padding: n || t, - viewport: t, - content: i || t, - scrollOffsetElement: v, - scrollEventElement: o, - scrollbarHorizontal: s(f), - scrollbarVertical: s(l) - }); - }, - update: function update(r) { - H({}, r); - return R; - }, - destroy: M.bind(0) - }; - C.Fr((function(r, a, e) { - z(a, e, r); - })); - each(E(o), (function(r) { - var a = o[r]; - if (s(a)) { - a(OverlayScrollbars, R); - } - })); - if (Oe(!u && r.cancel, C.Ur)) { - M(true); - return R; - } - C.qr(); - T.qr(); - En(f, R); - m("initialized", [ R ]); - C.Fr((function(r, a, e) { - var n = r.pr, t = r.wr, i = r.hr, v = r.Tr, o = r.Lr, u = r.zr, f = r._r, l = r.Or; - m("updated", [ R, { - updateHints: { - sizeChanged: n, - directionChanged: t, - heightIntrinsicChanged: i, - overflowEdgeChanged: v, - overflowAmountChanged: o, - overflowStyleChanged: u, - contentMutation: f, - hostMutation: l + } + return A({}, g); }, - changedOptions: a, - force: e - } ]); - })); - return R.update(true); + on: p, + off: function off(r, a) { + r && a && w(r, a); + }, + state: function state() { + var r = C(), a = r.Er, e = r.Ar, n = r.Cr, t = r.Pr, i = r.ar, v = r.mr, o = r.br; + return A({}, { + overflowEdge: a, + overflowAmount: e, + overflowStyle: n, + hasOverflow: t, + padding: i, + paddingAbsolute: v, + directionRTL: o, + destroyed: l + }); + }, + elements: function elements() { + var r = C.Ur, a = r.J, e = r.K, n = r.ar, t = r.rr, i = r.er, v = r.tr, o = r.ir; + var u = T.Ur, f = u.$r, l = u.ra; + var c = function translateScrollbarStructure(r) { + var a = r.Nr, e = r.Yr, n = r.Wr; + return { + scrollbar: n, + track: e, + handle: a + }; + }; + var s = function translateScrollbarsSetupElement(r) { + var a = r.Jr, e = r.Kr; + var n = c(a[0]); + return A({}, n, { + clone: function clone() { + var r = c(e()); + z({}, true, {}); + return r; + } + }); + }; + return A({}, { + target: a, + host: e, + padding: n || t, + viewport: t, + content: i || t, + scrollOffsetElement: v, + scrollEventElement: o, + scrollbarHorizontal: s(f), + scrollbarVertical: s(l) + }); + }, + update: function update(r) { + H({}, r); + return R; + }, + destroy: M.bind(0) + }; + C.Fr((function(r, a, e) { + z(a, e, r); + })); + each(E(v), (function(r) { + var a = v[r]; + if (s(a)) { + a(OverlayScrollbars, R); + } + })); + if (Oe(!o && r.cancel, C.Ur)) { + M(true); + return R; + } + C.qr(); + T.qr(); + xn(u, R); + m("initialized", [ R ]); + C.Fr((function(r, a, e) { + var n = r.pr, t = r.wr, i = r.hr, v = r.Tr, o = r.Lr, u = r.zr, f = r._r, l = r.Or; + m("updated", [ R, { + updateHints: { + sizeChanged: n, + directionChanged: t, + heightIntrinsicChanged: i, + overflowEdgeChanged: v, + overflowAmountChanged: o, + overflowStyleChanged: u, + contentMutation: f, + hostMutation: l + }, + changedOptions: a, + force: e + } ]); + })); + return R.update(true); + } + return f; }; - zn.plugin = Ba; - zn.env = function() { + Pn.plugin = Ba; + Pn.valid = function(r) { + var a = r && r.elements; + var e = s(a) && a(); + return p(e) && !!An(e.target); + }; + Pn.env = function() { var r = me(), a = r.k, e = r.H, n = r.L, t = r.B, i = r.F, v = r.D, o = r.G, u = r.X, f = r.U, l = r.N, c = r.Y, s = r.W; return A({}, { scrollbarsSize: a, @@ -2776,7 +2779,7 @@ setDefaultOptions: s }); }; - r.OverlayScrollbars = zn; + r.OverlayScrollbars = Pn; r.scrollbarsHidingPlugin = de; r.sizeObserverPlugin = ie; Object.defineProperty(r, "v", { diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 97bcf3e..4f1eae1 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.events.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.calculations.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 = (elm: HTMLElement, prop: string, val: string | number): void => {\r\n try {\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 } 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 elm && 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\nexport const directionIsRTL = (elm: HTMLElement | false | null | undefined): boolean =>\r\n style(elm, 'direction') === 'rtl';\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 const deepBoundaryIsValid =\r\n closest(closestDeepBoundaryElm, highBoundarySelector) === closestHighBoundaryElm;\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n (deepBoundaryIsValid &&\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !==\r\n 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 && parentElm) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\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 * 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 { round } = Math;\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, 'width')) || 0;\r\n return {\r\n w: cssWidth - round(cssWidth),\r\n h: cssHeight - 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, ReadonlyOptions } from 'options';\r\nimport type { DeepPartial } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: DeepPartial,\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: ReadonlyOptions,\r\n changedOptions: DeepPartial,\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 dataValueHostScrollbarHidden = 'scrollbarHidden';\r\nexport const dataValueHostUpdating = 'updating';\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 classNameViewportScrollbarHidden = `${classNameViewport}-scrollbar-hidden`;\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 classNameScrollbarRtl = `${classNameScrollbar}-rtl`;\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = `${classNameScrollbar}-track`;\r\nexport const classNameScrollbarHandle = `${classNameScrollbar}-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 classNamesScrollbarUnusable = `${classNameScrollbar}-unusable`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\r\nexport const classNamesScrollbarTrackInteractive = `${classNameScrollbarTrack}-interactive`;\r\nexport const classNamesScrollbarHandleInteractive = `${classNameScrollbarHandle}-interactive`;\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { DeepPartial, DeepReadonly } 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 showNativeOverlaidScrollbars: 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 pointers: string[] | null;\r\n };\r\n}\r\n\r\nexport type ReadonlyOptions = DeepReadonly;\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 showNativeOverlaidScrollbars: 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 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: 1300, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n pointers: ['mouse', 'touch', 'pen'], // null || array of supported pointers: https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\r\n },\r\n};\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\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 { 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 = () => pluginRegistry;\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n const pluginName = keys(plugin)[0];\r\n pluginRegistry[pluginName] = plugin[pluginName];\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, DeepPartial } 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 DeepPartial, // 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: DeepPartial,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: DeepPartial = {};\r\n const optionsCopy: DeepPartial = { ...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: DeepPartial,\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 { DeepPartial } 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 showNativeOverlaidScrollbars: 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 pointers: [oTypes.array, oTypes.null], // string array\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};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => DeepPartial;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: DeepPartial, 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 rAF!(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 { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { DeepPartial } from 'typings';\r\nimport { Initialization } 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 _staticDefaultInitialization: Initialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): Initialization;\r\n _setDefaultInitialization(newInitialization: DeepPartial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: DeepPartial): 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, classNameViewportScrollbarHidden);\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 staticDefaultInitialization: Initialization = {\r\n host: null,\r\n padding: !nativeScrollbarsHiding,\r\n viewport: (target) => nativeScrollbarsHiding && target === target.ownerDocument.body && target,\r\n content: false,\r\n scrollbarsSlot: true,\r\n cancel: {\r\n nativeScrollbarsOverlaid: true,\r\n body: null,\r\n },\r\n };\r\n const staticDefaultOptions = 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 _getDefaultInitialization: assignDeep.bind(\r\n 0,\r\n {} as Initialization,\r\n staticDefaultInitialization\r\n ),\r\n _setDefaultInitialization(newInitializationStrategy) {\r\n assignDeep(staticDefaultInitialization, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, staticDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(staticDefaultOptions, newDefaultOptions);\r\n },\r\n _staticDefaultInitialization: assignDeep({}, staticDefaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, staticDefaultOptions),\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, isHTMLElement, isNull, isUndefined } from 'support';\r\nimport type { StructureInitialization } from 'setups/structureSetup';\r\nimport type { ScrollbarsInitialization } from 'setups/scrollbarsSetup';\r\nimport { getEnvironment } from 'environment';\r\nimport { DeepPartial } from 'typings';\r\nimport { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\ntype StaticInitialization = HTMLElement | false | null;\r\ntype DynamicInitialization = HTMLElement | boolean | null;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type Initialization = Omit &\r\n ScrollbarsInitialization & {\r\n cancel: {\r\n nativeScrollbarsOverlaid: boolean;\r\n body: boolean | null;\r\n };\r\n };\r\n\r\nexport type InitializationTargetObject = DeepPartial &\r\n Pick;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * With false, null or undefined the element will be generated, otherwise the specified element is taken.\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 taken as the repsective element.\r\n * With true the element will be generated.\r\n * With false, null or undefined the element won't be generated.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type FallbackInitializtationElement<\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 fallbackStaticInitializationElement: FallbackInitializtationElement,\r\n defaultStaticInitializationElementStrategy: T,\r\n staticInitializationElementValue?: T\r\n): HTMLElement => {\r\n const staticInitialization = isUndefined(staticInitializationElementValue)\r\n ? defaultStaticInitializationElementStrategy\r\n : staticInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n staticInitialization,\r\n args\r\n );\r\n return resolvedInitialization || fallbackStaticInitializationElement();\r\n};\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackDynamicInitializationElement: FallbackInitializtationElement,\r\n defaultDynamicInitializationElementStrategy: T,\r\n dynamicInitializationElementValue?: T\r\n): HTMLElement | false => {\r\n const dynamicInitialization = isUndefined(dynamicInitializationElementValue)\r\n ? defaultDynamicInitializationElementStrategy\r\n : dynamicInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n dynamicInitialization,\r\n args\r\n );\r\n return (\r\n !!resolvedInitialization &&\r\n (isHTMLElement(resolvedInitialization)\r\n ? resolvedInitialization\r\n : fallbackDynamicInitializationElement())\r\n );\r\n};\r\n\r\nconst cancelInitialization = (\r\n cancelInitializationValue: DeepPartial | false | null | undefined,\r\n structureSetupElements: StructureSetupElementsObj\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _isBody, _viewportIsTarget } = structureSetupElements;\r\n const { _getDefaultInitialization, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isUndefined(body) ? defaultbody : body;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n _isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_viewportIsTarget\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement, cancelInitialization };\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 noop,\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 classNameViewportScrollbarHidden,\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 {\r\n InitializationTarget,\r\n InitializationTargetElement,\r\n InitializationTargetObject,\r\n} from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\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 _scrollOffsetElement: HTMLElement;\r\n _scrollEventElement: HTMLElement | Document;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\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 { _getDefaultInitialization, _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: defaultHostInitialization,\r\n viewport: defaultViewportInitialization,\r\n padding: defaultPaddingInitialization,\r\n content: defaultContentInitialization,\r\n } = _getDefaultInitialization();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const {\r\n host: hostInitialization,\r\n padding: paddingInitialization,\r\n viewport: viewportInitialization,\r\n content: contentInitialization,\r\n } = targetStructureInitialization;\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const isBody = targetElement === ownerDocument.body;\r\n const wnd = ownerDocument.defaultView as Window;\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 = staticInitializationElement(\r\n createNewDiv,\r\n defaultViewportInitialization,\r\n viewportInitialization\r\n );\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const viewportIsTargetBody = viewportIsTarget && isBody;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(createNewDiv, defaultHostInitialization, hostInitialization)\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultPaddingInitialization,\r\n paddingInitialization\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultContentInitialization,\r\n contentInitialization\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\r\n _scrollOffsetElement: viewportIsTargetBody ? ownerDocument.documentElement : viewportElement,\r\n _scrollEventElement: viewportIsTargetBody ? ownerDocument : viewportElement,\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\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 const removeHtmlClass = viewportIsTargetBody\r\n ? addClass(parent(targetElement), classNameViewportScrollbarHidden)\r\n : noop;\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 removeHtmlClass();\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, classNameViewportScrollbarHidden));\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 classNameViewportScrollbarHidden,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostScrollbarHidden,\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 _isBody,\r\n _windowElm,\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 const viewportIsTargetBody = _isBody && _viewportIsTarget;\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('showNativeOverlaidScrollbars');\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 classNameViewportScrollbarHidden,\r\n dataValueHostScrollbarHidden,\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 viewportIsTargetBody\r\n ? _windowElm.innerWidth\r\n : arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n viewportIsTargetBody\r\n ? _windowElm.innerHeight\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 { dataValueHostUpdating } from 'classnames';\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, _viewportAddRemoveClass } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 _viewportAddRemoveClass('', dataValueHostUpdating, true);\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 _viewportAddRemoveClass('', dataValueHostUpdating);\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\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 appendChildren,\r\n directionIsRTL,\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 SizeObserver = [destroy: () => void, append: () => void];\r\n\r\nconst scrollAmount = 3333333;\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): SizeObserver => {\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 = directionIsRTL.bind(0, target);\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 : directionIsRTL(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\r\n return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n },\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 const [updateDirectionIsRTLCache] = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'scroll', (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTLCache, directionIsRTLCacheChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLCacheChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTLCache) {\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 appendChildren(target, sizeObserver);\r\n },\r\n ];\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n appendChildren,\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 append: () => 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 return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\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 const [destroySizeObserver, appendSizeObserver] = createSizeObserver(\r\n trinsicObserver,\r\n onSizeChanged\r\n );\r\n push(offListeners, destroySizeObserver);\r\n appendSizeObserver();\r\n onSizeChanged();\r\n }\r\n\r\n appendChildren(target, 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 noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n dataValueHostUpdating,\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 appendElements: () => 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 { _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 _viewportAddRemoveClass('', dataValueHostUpdating, true);\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 _viewportAddRemoveClass('', dataValueHostUpdating);\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\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\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 [destroyTrinsicObserver, appendTrinsicObserver, updateTrinsicObserver] =\r\n _content || !_flexboxGlue ? createTrinsicObserver(_host, onTrinsicChanged) : [noop, noop, noop];\r\n const [destroySizeObserver, appendSizeObserver] = !_viewportIsTarget\r\n ? createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: true,\r\n })\r\n : [noop, noop];\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 ResizeObserverConstructor &&\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 destroyTrinsicObserver();\r\n destroySizeObserver();\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n // order is matter!\r\n appendSizeObserver();\r\n appendTrinsicObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const trinsicUpdateResult = updateTrinsicObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[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 (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 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\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 && !_viewportIsTarget\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, ReadonlyOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { DeepPartial, 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: [updateHints: StructureSetupUpdateHints, changedOptions: DeepPartial, force: boolean];\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: ReadonlyOptions\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, appendStructureElements, 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, appendObserverElements, updateObservers, updateObserversOptions] =\r\n createStructureSetupObservers(elements, state, (updateHints) => {\r\n triggerUpdateEvent(updateStructure(checkOptionsFallback, updateHints), {}, false);\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 = () => {\r\n appendObserverElements();\r\n appendStructureElements();\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n 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 directionIsRTL,\r\n getBoundingClientRect,\r\n offsetSize,\r\n on,\r\n preventDefault,\r\n runEachAndClear,\r\n stopPropagation,\r\n XY,\r\n} from 'support';\r\nimport { classNamesScrollbarInteraction } from 'classnames';\r\nimport type { ReadonlyOptions } from 'options';\r\nimport type { StructureSetupState } from 'setups';\r\nimport type {\r\n ScrollbarsSetupElementsObj,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport type ScrollbarsSetupEvents = (\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollbarsAddRemoveClass: ScrollbarsSetupElementsObj['_scrollbarsAddRemoveClass'],\r\n documentElm: Document,\r\n scrollOffsetElm: HTMLElement,\r\n isHorizontal?: boolean\r\n) => () => void;\r\n\r\nconst { round } = Math;\r\nconst getClientOffset = (event: PointerEvent): XY => ({\r\n x: event.clientX,\r\n y: event.clientY,\r\n});\r\nconst getScale = (element: HTMLElement): XY => {\r\n const { width, height } = getBoundingClientRect(element);\r\n const { w, h } = offsetSize(element);\r\n return {\r\n x: round(width) / w || 1,\r\n y: round(height) / h || 1,\r\n };\r\n};\r\nconst continuePointerDown = (\r\n event: PointerEvent,\r\n options: ReadonlyOptions,\r\n scrollType: 'dragScroll' | 'clickScroll'\r\n) => {\r\n const scrollbarOptions = options.scrollbars;\r\n const { button, isPrimary, pointerType } = event;\r\n const { pointers } = scrollbarOptions;\r\n return (\r\n button === 0 &&\r\n isPrimary &&\r\n scrollbarOptions[scrollType] &&\r\n (pointers || []).includes(pointerType)\r\n );\r\n};\r\nconst createRootClickStopPropagationEvents = (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\nconst createDragScrollingEvents = (\r\n options: ReadonlyOptions,\r\n doc: Document,\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollOffsetElement: HTMLElement,\r\n structureSetupState: () => StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _rtlScrollBehavior } = getEnvironment();\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n const scrollOffsetKey = `scroll${isHorizontal ? 'Left' : 'Top'}`;\r\n const xyKey = `${isHorizontal ? 'x' : 'y'}`;\r\n const whKey = `${isHorizontal ? 'w' : 'h'}`;\r\n const createOnPointerMoveHandler =\r\n (mouseDownScroll: number, mouseDownClientOffset: number, mouseDownInvertedScale: number) =>\r\n (event: PointerEvent) => {\r\n const { _overflowAmount } = structureSetupState();\r\n const movement =\r\n (getClientOffset(event)[xyKey] - mouseDownClientOffset) * mouseDownInvertedScale;\r\n const handleTrackDiff = offsetSize(_track)[whKey] - offsetSize(_handle)[whKey];\r\n const scrollDeltaPercent = movement / handleTrackDiff;\r\n const scrollDelta = scrollDeltaPercent * _overflowAmount[xyKey];\r\n const isRTL = directionIsRTL(_scrollbar);\r\n const negateMultiplactor =\r\n isRTL && isHorizontal ? (_rtlScrollBehavior.n || _rtlScrollBehavior.i ? 1 : -1) : 1;\r\n\r\n scrollOffsetElement[scrollOffsetKey] = mouseDownScroll + scrollDelta * negateMultiplactor;\r\n };\r\n\r\n return on(_handle, 'pointerdown', (pointerDownEvent: PointerEvent) => {\r\n if (continuePointerDown(pointerDownEvent, options, 'dragScroll')) {\r\n const offSelectStart = on(doc, 'selectstart', (event: Event) => preventDefault(event), {\r\n _passive: false,\r\n });\r\n const offPointerMove = on(\r\n _handle,\r\n 'pointermove',\r\n createOnPointerMoveHandler(\r\n scrollOffsetElement[scrollOffsetKey] || 0,\r\n getClientOffset(pointerDownEvent)[xyKey],\r\n 1 / getScale(scrollOffsetElement)[xyKey]\r\n )\r\n );\r\n\r\n on(\r\n _handle,\r\n 'pointerup',\r\n (pointerUpEvent: PointerEvent) => {\r\n offSelectStart();\r\n offPointerMove();\r\n _handle.releasePointerCapture(pointerUpEvent.pointerId);\r\n },\r\n { _once: true }\r\n );\r\n _handle.setPointerCapture(pointerDownEvent.pointerId);\r\n }\r\n });\r\n};\r\n\r\nexport const createScrollbarsSetupEvents =\r\n (\r\n options: ReadonlyOptions,\r\n structureSetupState: () => StructureSetupState\r\n ): ScrollbarsSetupEvents =>\r\n (scrollbarStructure, scrollbarsAddRemoveClass, documentElm, scrollOffsetElm, isHorizontal) => {\r\n const { _scrollbar } = scrollbarStructure;\r\n\r\n return runEachAndClear.bind(0, [\r\n on(_scrollbar, 'pointerenter', () => {\r\n scrollbarsAddRemoveClass(classNamesScrollbarInteraction, true);\r\n }),\r\n on(_scrollbar, 'pointerleave pointercancel', () => {\r\n scrollbarsAddRemoveClass(classNamesScrollbarInteraction);\r\n }),\r\n createRootClickStopPropagationEvents(_scrollbar, documentElm),\r\n createDragScrollingEvents(\r\n options,\r\n documentElm,\r\n scrollbarStructure,\r\n scrollOffsetElm,\r\n structureSetupState,\r\n isHorizontal\r\n ),\r\n ]);\r\n };\r\n","import { offsetSize } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { StructureSetupState } from 'setups';\r\n\r\nconst { min, max, abs, round } = Math;\r\n\r\nexport const getScrollbarHandleLengthRatio = (\r\n scrollbarHandle: HTMLElement,\r\n scrollbarTrack: HTMLElement,\r\n isHorizontal?: boolean,\r\n structureSetupState?: StructureSetupState\r\n) => {\r\n if (structureSetupState) {\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n return max(0, min(1, viewportSize / (viewportSize + overflowAmount)));\r\n }\r\n const axis = isHorizontal ? 'w' : 'h';\r\n const handleSize = offsetSize(scrollbarHandle)[axis];\r\n const trackSize = offsetSize(scrollbarTrack)[axis];\r\n return max(0, min(1, handleSize / trackSize));\r\n};\r\n\r\nexport const getScrollbarHandleOffsetRatio = (\r\n scrollbarHandle: HTMLElement,\r\n scrollbarTrack: HTMLElement,\r\n scrollOffsetElement: HTMLElement,\r\n structureSetupState: StructureSetupState,\r\n isRTL: boolean,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _rtlScrollBehavior } = getEnvironment();\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const scrollLeftTop = isHorizontal ? 'Left' : 'Top';\r\n const { _overflowAmount } = structureSetupState;\r\n const scrollPositionMax = round(_overflowAmount[axis]);\r\n const scrollPosition = abs(scrollOffsetElement[`scroll${scrollLeftTop}`]);\r\n const handleRTL = isHorizontal && isRTL;\r\n const rtlNormalizedScrollPosition = _rtlScrollBehavior.i\r\n ? scrollPosition\r\n : scrollPositionMax - scrollPosition;\r\n const finalScrollPosition = handleRTL ? rtlNormalizedScrollPosition : scrollPosition;\r\n const scrollPercent = min(1, finalScrollPosition / scrollPositionMax);\r\n const lengthRatio = getScrollbarHandleLengthRatio(scrollbarHandle, scrollbarTrack, isHorizontal);\r\n\r\n return (1 / lengthRatio) * (1 - lengthRatio) * scrollPercent;\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n directionIsRTL,\r\n each,\r\n isBoolean,\r\n isEmptyArray,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\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 classNamesScrollbarTransitionless,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport {\r\n getScrollbarHandleLengthRatio,\r\n getScrollbarHandleOffsetRatio,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.calculations';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ScrollbarsSetupEvents } from 'setups/scrollbarsSetup/scrollbarsSetup.events';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\nimport type { StyleObject } from 'typings';\r\nimport { StructureSetupState } from 'setups';\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 _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _scrollbarsAddRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n isHorizontal?: boolean\r\n ) => void;\r\n _refreshScrollbarsHandleLength: (structureSetupState: StructureSetupState) => void;\r\n _refreshScrollbarsHandleOffset: (structureSetupState: StructureSetupState) => void;\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\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj,\r\n scrollbarsSetupEvents: ScrollbarsSetupEvents\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization } = getEnvironment();\r\n const { scrollbarsSlot: defaultScrollbarsSlot } = _getDefaultInitialization();\r\n const { _documentElm, _target, _host, _viewport, _targetIsElm, _scrollOffsetElement } =\r\n structureSetupElements;\r\n const { scrollbarsSlot } = (_targetIsElm ? {} : target) as ScrollbarsInitialization;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n defaultScrollbarsSlot,\r\n scrollbarsSlot\r\n );\r\n const scrollbarStructureAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\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 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 scrollbarStructureRefreshHandleLength = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n ) => {\r\n scrollbarsHandleStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _track } = structure;\r\n return [\r\n _handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(\r\n getScrollbarHandleLengthRatio(_handle, _track, isHorizontal, structureSetupState) * 100\r\n ).toFixed(3)}%`,\r\n },\r\n ];\r\n });\r\n };\r\n const scrollbarStructureRefreshHandleOffset = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n ) => {\r\n const translateAxis = isHorizontal ? 'X' : 'Y';\r\n scrollbarsHandleStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _track, _scrollbar } = structure;\r\n const offsetRatio = getScrollbarHandleOffsetRatio(\r\n _handle,\r\n _track,\r\n _scrollOffsetElement,\r\n structureSetupState,\r\n directionIsRTL(_scrollbar),\r\n isHorizontal\r\n );\r\n // eslint-disable-next-line no-self-compare\r\n const validOffsetRatio = offsetRatio === offsetRatio; // is false when offset is NaN\r\n return [\r\n _handle,\r\n {\r\n transform: validOffsetRatio\r\n ? `translate${translateAxis}(${(offsetRatio * 100).toFixed(3)}%)`\r\n : '',\r\n },\r\n ];\r\n });\r\n };\r\n\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const scrollbarsAddRemoveClass = (\r\n className: string | false | null | undefined,\r\n add?: boolean,\r\n onlyHorizontal?: boolean\r\n ) => {\r\n const singleAxis = isBoolean(onlyHorizontal);\r\n const runHorizontal = singleAxis ? onlyHorizontal : true;\r\n const runVertical = singleAxis ? !onlyHorizontal : true;\r\n runHorizontal && scrollbarStructureAddRemoveClass(horizontalScrollbars, className, add);\r\n runVertical && scrollbarStructureAddRemoveClass(verticalScrollbars, className, add);\r\n };\r\n const refreshScrollbarsHandleLength = (structureSetupState: StructureSetupState) => {\r\n scrollbarStructureRefreshHandleLength(horizontalScrollbars, structureSetupState, true);\r\n scrollbarStructureRefreshHandleLength(verticalScrollbars, structureSetupState);\r\n };\r\n const refreshScrollbarsHandleOffset = (structureSetupState: StructureSetupState) => {\r\n scrollbarStructureRefreshHandleOffset(horizontalScrollbars, structureSetupState, true);\r\n scrollbarStructureRefreshHandleOffset(verticalScrollbars, structureSetupState);\r\n };\r\n const generateScrollbarDOM = (isHorizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = isHorizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = isHorizontal ? 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 scrollbarsSetupEvents(\r\n result,\r\n scrollbarsAddRemoveClass,\r\n _documentElm,\r\n _scrollOffsetElement,\r\n isHorizontal\r\n ),\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 scrollbarsAddRemoveClass(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _refreshScrollbarsHandleLength: refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset: refreshScrollbarsHandleOffset,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\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 {\r\n rAF,\r\n cAF,\r\n isFunction,\r\n on,\r\n runEachAndClear,\r\n setT,\r\n clearT,\r\n parent,\r\n scrollLeft,\r\n scrollTop,\r\n} from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createScrollbarsSetupEvents } from 'setups/scrollbarsSetup/scrollbarsSetup.events';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarUnusable,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n classNamesScrollbarHandleInteractive,\r\n classNamesScrollbarTrackInteractive,\r\n classNameScrollbarRtl,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOptions,\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 { DeepPartial, 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 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: ReadonlyOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup<\r\n ScrollbarsSetupState,\r\n ScrollbarsSetupStaticState,\r\n [DeepPartial]\r\n> => {\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 createScrollbarsSetupEvents(options, structureSetupState)\r\n );\r\n const {\r\n _host,\r\n _viewport,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n _viewportIsTarget,\r\n _isBody,\r\n } = structureSetupState._elements;\r\n const {\r\n _horizontal,\r\n _vertical,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset,\r\n } = elements;\r\n const { _handleStyle: styleHorizontal } = _horizontal;\r\n const { _handleStyle: styleVertical } = _vertical;\r\n const styleScrollbarPosition = (structure: ScrollbarStructure) => {\r\n const { _scrollbar } = structure;\r\n const elm = _viewportIsTarget && !_isBody && parent(_scrollbar) === _viewport && _scrollbar;\r\n return [\r\n elm,\r\n {\r\n transform: elm\r\n ? `translate(${scrollLeft(_scrollOffsetElement)}px, ${scrollTop(_scrollOffsetElement)}px)`\r\n : '',\r\n },\r\n ] as [HTMLElement | false, StyleObject];\r\n };\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => scrollbarsAddRemoveClass(classNamesScrollbarAutoHidden, true);\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\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, 'pointerover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'pointerenter', onHostMouseEnter),\r\n on(_host, 'pointerleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'pointermove', () => {\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(_scrollEventElement, 'scroll', () => {\r\n requestScrollAnimationFrame(() => {\r\n _refreshScrollbarsHandleOffset(structureSetupState());\r\n\r\n autoHideNotNever && manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n\r\n _viewportIsTarget && styleHorizontal(styleScrollbarPosition);\r\n _viewportIsTarget && styleVertical(styleScrollbarPosition);\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 {\r\n _overflowEdgeChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _directionChanged,\r\n } = structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n const { _overflowAmount, _overflowStyle, _directionIsRTL } = currStructureSetupState;\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 [dragScroll, dragScrollChanged] = checkOption('scrollbars.dragScroll');\r\n const [clickScroll, clickScrollChanged] = checkOption('scrollbars.clickScroll');\r\n\r\n const updateHandle =\r\n _overflowEdgeChanged || _overflowAmountChanged || _directionChanged || force;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged || force;\r\n\r\n const setScrollbarVisibility = (overflowStyle: OverflowStyle, isHorizontal: boolean) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n scrollbarsAddRemoveClass(classNamesScrollbarVisible, isVisible, isHorizontal);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (themeChanged) {\r\n scrollbarsAddRemoveClass(prevTheme);\r\n scrollbarsAddRemoveClass(theme, true);\r\n\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 (dragScrollChanged) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarHandleInteractive, dragScroll);\r\n }\r\n if (clickScrollChanged) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarTrackInteractive, clickScroll);\r\n }\r\n if (updateVisibility) {\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, true);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, false);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n scrollbarsAddRemoveClass(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (updateHandle) {\r\n _refreshScrollbarsHandleLength(currStructureSetupState);\r\n _refreshScrollbarsHandleOffset(currStructureSetupState);\r\n\r\n scrollbarsAddRemoveClass(classNamesScrollbarUnusable, !_overflowAmount.x, true);\r\n scrollbarsAddRemoveClass(classNamesScrollbarUnusable, !_overflowAmount.y, false);\r\n scrollbarsAddRemoveClass(classNameScrollbarRtl, _directionIsRTL && !_isBody);\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, ReadonlyOptions } 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 { DeepPartial, OverflowStyle } from 'typings';\r\nimport { InitializationTarget, Initialization, cancelInitialization } from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\nimport {\r\n ScrollbarsSetupElement,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget,\r\n options?: DeepPartial,\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 staticDefaultInitialization: Initialization;\r\n staticDefaultOptions: Options;\r\n\r\n getDefaultInitialization(): Initialization;\r\n setDefaultInitialization(newDefaultInitialization: DeepPartial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: DeepPartial): 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 directionRTL: boolean;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface ScrollbarElements {\r\n scrollbar: HTMLElement;\r\n track: HTMLElement;\r\n handle: HTMLElement;\r\n}\r\n\r\nexport interface CloneableScrollbarElements extends ScrollbarElements {\r\n clone(): ScrollbarElements;\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 scrollOffsetElement: HTMLElement;\r\n scrollEventElement: HTMLElement | Document;\r\n scrollbarHorizontal: CloneableScrollbarElements;\r\n scrollbarVertical: CloneableScrollbarElements;\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: DeepPartial;\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, canceled: 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?: DeepPartial): 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 { _getDefaultOptions, _addListener: addEnvListener } = getEnvironment();\r\n const plugins = getPlugins();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? 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?: DeepPartial) => {\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: ReadonlyOptions = 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: DeepPartial, force?: boolean) => {\r\n updateStructure(changedOptions, !!force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (canceled?: 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, !!canceled]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: DeepPartial) {\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 _directionIsRTL,\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 directionRTL: _directionIsRTL,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const {\r\n _target,\r\n _host,\r\n _padding,\r\n _viewport,\r\n _content,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n } = structureState._elements;\r\n const { _horizontal, _vertical } = scrollbarsState._elements;\r\n const translateScrollbarStructure = (\r\n scrollbarStructure: ScrollbarStructure\r\n ): ScrollbarElements => {\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n return {\r\n scrollbar: _scrollbar,\r\n track: _track,\r\n handle: _handle,\r\n };\r\n };\r\n const translateScrollbarsSetupElement = (\r\n scrollbarsSetupElement: ScrollbarsSetupElement\r\n ): CloneableScrollbarElements => {\r\n const { _scrollbarStructures, _clone } = scrollbarsSetupElement;\r\n const translatedStructure = translateScrollbarStructure(_scrollbarStructures[0]);\r\n\r\n return assignDeep({}, translatedStructure, {\r\n clone: () => {\r\n const result = translateScrollbarStructure(_clone());\r\n updateScrollbars({}, true, {});\r\n return result;\r\n },\r\n });\r\n };\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 scrollOffsetElement: _scrollOffsetElement,\r\n scrollEventElement: _scrollEventElement,\r\n scrollbarHorizontal: translateScrollbarsSetupElement(_horizontal),\r\n scrollbarVertical: translateScrollbarsSetupElement(_vertical),\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 (cancelInitialization(!targetIsElement && target.cancel, structureState._elements)) {\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 _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\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 staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\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","deepBoundaryIsValid","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","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","directionIsRTL","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","preventDefault","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","dataValueHostScrollbarHidden","dataValueHostUpdating","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarHidden","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarRtl","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarUnusable","classNamesScrollbarAutoHidden","classNamesScrollbarTrackInteractive","classNamesScrollbarHandleInteractive","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","showNativeOverlaidScrollbars","updating","elementEvents","attributes","ignoreMutation","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","pointers","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","_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","_nativeScrollbarsHiding","_nativeScrollbarsOverlaid","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","_getState","_viewportPaddingStyle","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","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","nativeScrollbarsOverlaid","staticDefaultInitialization","host","padding","ownerDocument","content","scrollbarsSlot","cancel","staticDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElementStrategy","staticInitializationElementValue","staticInitialization","resolvedInitialization","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElementStrategy","dynamicInitializationElementValue","dynamicInitialization","cancelInitialization","cancelInitializationValue","structureSetupElements","_isBody","_viewportIsTarget","_getEnvironment","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getDefaultInitializa","defaultHostInitialization","defaultViewportInitialization","defaultPaddingInitialization","defaultContentInitialization","targetIsElm","targetStructureInitialization","hostInitialization","paddingInitialization","viewportInitialization","contentInitialization","targetElement","isTextarea","isBody","wnd","defaultView","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","viewportIsTarget","viewportIsTargetBody","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_scrollOffsetElement","documentElement","_scrollEventElement","_windowElm","_documentElm","_isTextarea","_targetIsElm","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","removeHtmlClass","createTrinsicUpdateSegment","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_nativeScrollbarStyling","_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","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","resizeObserverInstance","observe","disconnect","pluginAppearCallback","_sizeObserverPlugin$_","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLCache","directionIsRTLCacheChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","_createSizeObserver","destroySizeObserver","appendSizeObserver","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","directionIsRTLChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","_ref2","destroyTrinsicObserver","appendTrinsicObserver","updateTrinsicObserver","_ref3","_createDOMObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","trinsicUpdateResult","contentUpdateResult","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","appendStructureElements","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","_createStructureSetup2","appendObserverElements","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","getClientOffset","clientX","clientY","getScale","element","continuePointerDown","scrollType","scrollbarOptions","button","isPrimary","pointerType","includes","createRootClickStopPropagationEvents","scrollbar","documentElm","createDragScrollingEvents","doc","scrollbarStructure","scrollOffsetElement","isHorizontal","_handle","_track","_scrollbar","scrollOffsetKey","xyKey","whKey","createOnPointerMoveHandler","mouseDownScroll","mouseDownClientOffset","mouseDownInvertedScale","_structureSetupState","movement","handleTrackDiff","scrollDeltaPercent","scrollDelta","isRTL","negateMultiplactor","pointerDownEvent","offSelectStart","offPointerMove","pointerUpEvent","releasePointerCapture","pointerId","setPointerCapture","createScrollbarsSetupEvents","scrollbarsAddRemoveClass","scrollOffsetElm","min","getScrollbarHandleLengthRatio","scrollbarHandle","scrollbarTrack","axis","viewportSize","handleSize","trackSize","getScrollbarHandleOffsetRatio","scrollLeftTop","scrollPositionMax","scrollPosition","handleRTL","rtlNormalizedScrollPosition","finalScrollPosition","scrollPercent","lengthRatio","createScrollbarsSetupElements","scrollbarsSetupEvents","defaultScrollbarsSlot","evaluatedScrollbarSlot","scrollbarStructureAddRemoveClass","scrollbarStructures","scrollbarsHandleStyle","_elmStyle","scrollbarStructureRefreshHandleLength","structure","toFixed","scrollbarStructureRefreshHandleOffset","translateAxis","offsetRatio","validOffsetRatio","transform","horizontalScrollbars","verticalScrollbars","onlyHorizontal","singleAxis","runHorizontal","runVertical","refreshScrollbarsHandleLength","refreshScrollbarsHandleOffset","generateScrollbarDOM","scrollbarClassName","arrToPush","transitionlessClass","track","handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_refreshScrollbarsHandleLength","_refreshScrollbarsHandleOffset","_scrollbarsAddRemoveClass","_horizontal","_scrollbarStructures","_clone","_handleStyle","_vertical","createSelfCancelTimeout","id","setTFn","clearTFn","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","styleScrollbarPosition","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","currStructureSetupState","themeChanged","visibilityChanged","autoHideChanged","_checkOption5","dragScrollChanged","_checkOption6","clickScrollChanged","updateHandle","updateVisibility","setScrollbarVisibility","isVisible","xVisible","yVisible","hasCorner","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","targetIsElement","instanceTarget","potentialInstance","optionsValidationPlugin","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","canceled","instance","_structureState","directionRTL","translateScrollbarStructure","translateScrollbarsSetupElement","scrollbarsSetupElement","translatedStructure","scrollEventElement","scrollbarHorizontal","scrollbarVertical","pluginInstance","sizeChanged","hostMutation","_getEnvironment2","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","getDefaultInitialization","setDefaultInitialization","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"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.events.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.calculations.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 = (elm: HTMLElement, prop: string, val: string | number): void => {\r\n try {\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 } 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(elm: HTMLElement | false | null | undefined, styles: string): 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 elm && 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\nexport const directionIsRTL = (elm: HTMLElement | false | null | undefined): boolean =>\r\n style(elm, 'direction') === 'rtl';\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-next-line no-restricted-syntax, no-unreachable-loop, 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 const deepBoundaryIsValid =\r\n closest(closestDeepBoundaryElm, highBoundarySelector) === closestHighBoundaryElm;\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n (deepBoundaryIsValid &&\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !==\r\n 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 && parentElm) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\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 * 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 { round } = Math;\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, 'width')) || 0;\r\n return {\r\n w: cssWidth - round(cssWidth),\r\n h: cssHeight - 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 // eslint-disable-next-line @typescript-eslint/no-shadow\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 (...eventArgs: 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, ReadonlyOptions } from 'options';\r\nimport type { DeepPartial } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (\r\n changedOptions: DeepPartial,\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: ReadonlyOptions,\r\n changedOptions: DeepPartial,\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 dataValueHostScrollbarHidden = 'scrollbarHidden';\r\nexport const dataValueHostUpdating = 'updating';\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 classNameViewportScrollbarHidden = `${classNameViewport}-scrollbar-hidden`;\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 classNameScrollbarRtl = `${classNameScrollbar}-rtl`;\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = `${classNameScrollbar}-track`;\r\nexport const classNameScrollbarHandle = `${classNameScrollbar}-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 classNamesScrollbarUnusable = `${classNameScrollbar}-unusable`;\r\nexport const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;\r\nexport const classNamesScrollbarTrackInteractive = `${classNameScrollbarTrack}-interactive`;\r\nexport const classNamesScrollbarHandleInteractive = `${classNameScrollbarHandle}-interactive`;\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { DeepPartial, DeepReadonly } 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 showNativeOverlaidScrollbars: 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 pointers: string[] | null;\r\n };\r\n}\r\n\r\nexport type ReadonlyOptions = DeepReadonly;\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 showNativeOverlaidScrollbars: 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 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: 1300, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n pointers: ['mouse', 'touch', 'pen'], // null || array of supported pointers: https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\r\n },\r\n};\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\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 { 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 = () => pluginRegistry;\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]): void => {\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n const pluginName = keys(plugin)[0];\r\n pluginRegistry[pluginName] = plugin[pluginName];\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, DeepPartial } 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 DeepPartial, // 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: DeepPartial,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: DeepPartial = {};\r\n const optionsCopy: DeepPartial = { ...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: DeepPartial,\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 { DeepPartial } 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 showNativeOverlaidScrollbars: 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 pointers: [oTypes.array, oTypes.null], // string array\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};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: DeepPartial, doWriteErrors?: boolean) => DeepPartial;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: DeepPartial, 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 rAF!(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 { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 classNameViewportScrollbarHidden,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { DeepPartial } from 'typings';\r\nimport { Initialization } 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 _staticDefaultInitialization: Initialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): Initialization;\r\n _setDefaultInitialization(newInitialization: DeepPartial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: DeepPartial): 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, classNameViewportScrollbarHidden);\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 staticDefaultInitialization: Initialization = {\r\n host: null,\r\n padding: !nativeScrollbarsHiding,\r\n viewport: (target) => nativeScrollbarsHiding && target === target.ownerDocument.body && target,\r\n content: false,\r\n scrollbarsSlot: true,\r\n cancel: {\r\n nativeScrollbarsOverlaid: true,\r\n body: null,\r\n },\r\n };\r\n const staticDefaultOptions = 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 _getDefaultInitialization: assignDeep.bind(\r\n 0,\r\n {} as Initialization,\r\n staticDefaultInitialization\r\n ),\r\n _setDefaultInitialization(newInitializationStrategy) {\r\n assignDeep(staticDefaultInitialization, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, staticDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(staticDefaultOptions, newDefaultOptions);\r\n },\r\n _staticDefaultInitialization: assignDeep({}, staticDefaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, staticDefaultOptions),\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, isHTMLElement, isNull, isUndefined } from 'support';\r\nimport type { StructureInitialization } from 'setups/structureSetup';\r\nimport type { ScrollbarsInitialization } from 'setups/scrollbarsSetup';\r\nimport { getEnvironment } from 'environment';\r\nimport { DeepPartial } from 'typings';\r\nimport { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\ntype StaticInitialization = HTMLElement | false | null;\r\ntype DynamicInitialization = HTMLElement | boolean | null;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type Initialization = Omit &\r\n ScrollbarsInitialization & {\r\n cancel: {\r\n nativeScrollbarsOverlaid: boolean;\r\n body: boolean | null;\r\n };\r\n };\r\n\r\nexport type InitializationTargetObject = DeepPartial &\r\n Pick;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * With false, null or undefined the element will be generated, otherwise the specified element is taken.\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 taken as the repsective element.\r\n * With true the element will be generated.\r\n * With false, null or undefined the element won't be generated.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type FallbackInitializtationElement<\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 fallbackStaticInitializationElement: FallbackInitializtationElement,\r\n defaultStaticInitializationElementStrategy: T,\r\n staticInitializationElementValue?: T\r\n): HTMLElement => {\r\n const staticInitialization = isUndefined(staticInitializationElementValue)\r\n ? defaultStaticInitializationElementStrategy\r\n : staticInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n staticInitialization,\r\n args\r\n );\r\n return resolvedInitialization || fallbackStaticInitializationElement();\r\n};\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n fallbackDynamicInitializationElement: FallbackInitializtationElement,\r\n defaultDynamicInitializationElementStrategy: T,\r\n dynamicInitializationElementValue?: T\r\n): HTMLElement | false => {\r\n const dynamicInitialization = isUndefined(dynamicInitializationElementValue)\r\n ? defaultDynamicInitializationElementStrategy\r\n : dynamicInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n dynamicInitialization,\r\n args\r\n );\r\n return (\r\n !!resolvedInitialization &&\r\n (isHTMLElement(resolvedInitialization)\r\n ? resolvedInitialization\r\n : fallbackDynamicInitializationElement())\r\n );\r\n};\r\n\r\nconst cancelInitialization = (\r\n cancelInitializationValue: DeepPartial | false | null | undefined,\r\n structureSetupElements: StructureSetupElementsObj\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _isBody, _viewportIsTarget } = structureSetupElements;\r\n const { _getDefaultInitialization, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isUndefined(body) ? defaultbody : body;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n _isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_viewportIsTarget\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement, cancelInitialization };\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 noop,\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 classNameViewportScrollbarHidden,\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 {\r\n InitializationTarget,\r\n InitializationTargetElement,\r\n InitializationTargetObject,\r\n} from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\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 _scrollOffsetElement: HTMLElement;\r\n _scrollEventElement: HTMLElement | Document;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\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 { _getDefaultInitialization, _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: defaultHostInitialization,\r\n viewport: defaultViewportInitialization,\r\n padding: defaultPaddingInitialization,\r\n content: defaultContentInitialization,\r\n } = _getDefaultInitialization();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const {\r\n host: hostInitialization,\r\n padding: paddingInitialization,\r\n viewport: viewportInitialization,\r\n content: contentInitialization,\r\n } = targetStructureInitialization;\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const isBody = targetElement === ownerDocument.body;\r\n const wnd = ownerDocument.defaultView as Window;\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 = staticInitializationElement(\r\n createNewDiv,\r\n defaultViewportInitialization,\r\n viewportInitialization\r\n );\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const viewportIsTargetBody = viewportIsTarget && isBody;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(createNewDiv, defaultHostInitialization, hostInitialization)\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultPaddingInitialization,\r\n paddingInitialization\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n defaultContentInitialization,\r\n contentInitialization\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(env),\r\n _scrollOffsetElement: viewportIsTargetBody ? ownerDocument.documentElement : viewportElement,\r\n _scrollEventElement: viewportIsTargetBody ? ownerDocument : viewportElement,\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\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 let 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 const removeHtmlClass = viewportIsTargetBody\r\n ? addClass(parent(targetElement), classNameViewportScrollbarHidden)\r\n : noop;\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 removeHtmlClass();\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, classNameViewportScrollbarHidden));\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 // @ts-ignore\r\n targetContents = 0;\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 classNameViewportScrollbarHidden,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostScrollbarHidden,\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 _isBody,\r\n _windowElm,\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 const viewportIsTargetBody = _isBody && _viewportIsTarget;\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('showNativeOverlaidScrollbars');\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 classNameViewportScrollbarHidden,\r\n dataValueHostScrollbarHidden,\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 viewportIsTargetBody\r\n ? _windowElm.innerWidth\r\n : arrangedViewportClientSize.w +\r\n max0(viewportclientSize.w - viewportScrollSize.w) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n viewportIsTargetBody\r\n ? _windowElm.innerHeight\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 { dataValueHostUpdating } from 'classnames';\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, _viewportAddRemoveClass } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _flexboxGlue } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.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 _viewportAddRemoveClass('', dataValueHostUpdating, true);\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 _viewportAddRemoveClass('', dataValueHostUpdating);\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\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 appendChildren,\r\n directionIsRTL,\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 SizeObserver = [destroy: () => void, append: () => void];\r\n\r\nconst scrollAmount = 3333333;\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): SizeObserver => {\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 = directionIsRTL.bind(0, target);\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 : directionIsRTL(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\r\n return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n },\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 const [updateDirectionIsRTLCache] = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, 'scroll', (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTLCache, directionIsRTLCacheChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLCacheChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTLCache) {\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 appendChildren(target, sizeObserver);\r\n },\r\n ];\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n appendChildren,\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 append: () => 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 return [\r\n () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\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 const [destroySizeObserver, appendSizeObserver] = createSizeObserver(\r\n trinsicObserver,\r\n onSizeChanged\r\n );\r\n push(offListeners, destroySizeObserver);\r\n appendSizeObserver();\r\n onSizeChanged();\r\n }\r\n\r\n appendChildren(target, 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 noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n dataValueHostUpdating,\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 appendElements: () => 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 { _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 _viewportAddRemoveClass('', dataValueHostUpdating, true);\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 _viewportAddRemoveClass('', dataValueHostUpdating);\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\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\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 [destroyTrinsicObserver, appendTrinsicObserver, updateTrinsicObserver] =\r\n _content || !_flexboxGlue ? createTrinsicObserver(_host, onTrinsicChanged) : [noop, noop, noop];\r\n const [destroySizeObserver, appendSizeObserver] = !_viewportIsTarget\r\n ? createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: true,\r\n })\r\n : [noop, noop];\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 ResizeObserverConstructor &&\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 destroyTrinsicObserver();\r\n destroySizeObserver();\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n () => {\r\n // order is matter!\r\n appendSizeObserver();\r\n appendTrinsicObserver();\r\n },\r\n () => {\r\n const updateHints: Partial = {};\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const trinsicUpdateResult = updateTrinsicObserver();\r\n const contentUpdateResult = contentMutationObserver && contentMutationObserver[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 (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 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\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 && !_viewportIsTarget\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, ReadonlyOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { DeepPartial, 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: [updateHints: StructureSetupUpdateHints, changedOptions: DeepPartial, force: boolean];\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: ReadonlyOptions\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, appendStructureElements, 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, appendObserverElements, updateObservers, updateObserversOptions] =\r\n createStructureSetupObservers(elements, state, (updateHints) => {\r\n triggerUpdateEvent(updateStructure(checkOptionsFallback, updateHints), {}, false);\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 = () => {\r\n appendObserverElements();\r\n appendStructureElements();\r\n };\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n 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 directionIsRTL,\r\n getBoundingClientRect,\r\n offsetSize,\r\n on,\r\n preventDefault,\r\n runEachAndClear,\r\n stopPropagation,\r\n XY,\r\n} from 'support';\r\nimport { classNamesScrollbarInteraction } from 'classnames';\r\nimport type { ReadonlyOptions } from 'options';\r\nimport type { StructureSetupState } from 'setups';\r\nimport type {\r\n ScrollbarsSetupElementsObj,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport { getEnvironment } from 'environment';\r\n\r\nexport type ScrollbarsSetupEvents = (\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollbarsAddRemoveClass: ScrollbarsSetupElementsObj['_scrollbarsAddRemoveClass'],\r\n documentElm: Document,\r\n scrollOffsetElm: HTMLElement,\r\n isHorizontal?: boolean\r\n) => () => void;\r\n\r\nconst { round } = Math;\r\nconst getClientOffset = (event: PointerEvent): XY => ({\r\n x: event.clientX,\r\n y: event.clientY,\r\n});\r\nconst getScale = (element: HTMLElement): XY => {\r\n const { width, height } = getBoundingClientRect(element);\r\n const { w, h } = offsetSize(element);\r\n return {\r\n x: round(width) / w || 1,\r\n y: round(height) / h || 1,\r\n };\r\n};\r\nconst continuePointerDown = (\r\n event: PointerEvent,\r\n options: ReadonlyOptions,\r\n scrollType: 'dragScroll' | 'clickScroll'\r\n) => {\r\n const scrollbarOptions = options.scrollbars;\r\n const { button, isPrimary, pointerType } = event;\r\n const { pointers } = scrollbarOptions;\r\n return (\r\n button === 0 &&\r\n isPrimary &&\r\n scrollbarOptions[scrollType] &&\r\n (pointers || []).includes(pointerType)\r\n );\r\n};\r\nconst createRootClickStopPropagationEvents = (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\nconst createDragScrollingEvents = (\r\n options: ReadonlyOptions,\r\n doc: Document,\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollOffsetElement: HTMLElement,\r\n structureSetupState: () => StructureSetupState,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _rtlScrollBehavior } = getEnvironment();\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n const scrollOffsetKey = `scroll${isHorizontal ? 'Left' : 'Top'}`;\r\n const xyKey = `${isHorizontal ? 'x' : 'y'}`;\r\n const whKey = `${isHorizontal ? 'w' : 'h'}`;\r\n const createOnPointerMoveHandler =\r\n (mouseDownScroll: number, mouseDownClientOffset: number, mouseDownInvertedScale: number) =>\r\n (event: PointerEvent) => {\r\n const { _overflowAmount } = structureSetupState();\r\n const movement =\r\n (getClientOffset(event)[xyKey] - mouseDownClientOffset) * mouseDownInvertedScale;\r\n const handleTrackDiff = offsetSize(_track)[whKey] - offsetSize(_handle)[whKey];\r\n const scrollDeltaPercent = movement / handleTrackDiff;\r\n const scrollDelta = scrollDeltaPercent * _overflowAmount[xyKey];\r\n const isRTL = directionIsRTL(_scrollbar);\r\n const negateMultiplactor =\r\n isRTL && isHorizontal ? (_rtlScrollBehavior.n || _rtlScrollBehavior.i ? 1 : -1) : 1;\r\n\r\n scrollOffsetElement[scrollOffsetKey] = mouseDownScroll + scrollDelta * negateMultiplactor;\r\n };\r\n\r\n return on(_handle, 'pointerdown', (pointerDownEvent: PointerEvent) => {\r\n if (continuePointerDown(pointerDownEvent, options, 'dragScroll')) {\r\n const offSelectStart = on(doc, 'selectstart', (event: Event) => preventDefault(event), {\r\n _passive: false,\r\n });\r\n const offPointerMove = on(\r\n _handle,\r\n 'pointermove',\r\n createOnPointerMoveHandler(\r\n scrollOffsetElement[scrollOffsetKey] || 0,\r\n getClientOffset(pointerDownEvent)[xyKey],\r\n 1 / getScale(scrollOffsetElement)[xyKey]\r\n )\r\n );\r\n\r\n on(\r\n _handle,\r\n 'pointerup',\r\n (pointerUpEvent: PointerEvent) => {\r\n offSelectStart();\r\n offPointerMove();\r\n _handle.releasePointerCapture(pointerUpEvent.pointerId);\r\n },\r\n { _once: true }\r\n );\r\n _handle.setPointerCapture(pointerDownEvent.pointerId);\r\n }\r\n });\r\n};\r\n\r\nexport const createScrollbarsSetupEvents =\r\n (\r\n options: ReadonlyOptions,\r\n structureSetupState: () => StructureSetupState\r\n ): ScrollbarsSetupEvents =>\r\n (scrollbarStructure, scrollbarsAddRemoveClass, documentElm, scrollOffsetElm, isHorizontal) => {\r\n const { _scrollbar } = scrollbarStructure;\r\n\r\n return runEachAndClear.bind(0, [\r\n on(_scrollbar, 'pointerenter', () => {\r\n scrollbarsAddRemoveClass(classNamesScrollbarInteraction, true);\r\n }),\r\n on(_scrollbar, 'pointerleave pointercancel', () => {\r\n scrollbarsAddRemoveClass(classNamesScrollbarInteraction);\r\n }),\r\n createRootClickStopPropagationEvents(_scrollbar, documentElm),\r\n createDragScrollingEvents(\r\n options,\r\n documentElm,\r\n scrollbarStructure,\r\n scrollOffsetElm,\r\n structureSetupState,\r\n isHorizontal\r\n ),\r\n ]);\r\n };\r\n","import { offsetSize } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { StructureSetupState } from 'setups';\r\n\r\nconst { min, max, abs, round } = Math;\r\n\r\nexport const getScrollbarHandleLengthRatio = (\r\n scrollbarHandle: HTMLElement,\r\n scrollbarTrack: HTMLElement,\r\n isHorizontal?: boolean,\r\n structureSetupState?: StructureSetupState\r\n) => {\r\n if (structureSetupState) {\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n return max(0, min(1, viewportSize / (viewportSize + overflowAmount)));\r\n }\r\n const axis = isHorizontal ? 'w' : 'h';\r\n const handleSize = offsetSize(scrollbarHandle)[axis];\r\n const trackSize = offsetSize(scrollbarTrack)[axis];\r\n return max(0, min(1, handleSize / trackSize));\r\n};\r\n\r\nexport const getScrollbarHandleOffsetRatio = (\r\n scrollbarHandle: HTMLElement,\r\n scrollbarTrack: HTMLElement,\r\n scrollOffsetElement: HTMLElement,\r\n structureSetupState: StructureSetupState,\r\n isRTL: boolean,\r\n isHorizontal?: boolean\r\n) => {\r\n const { _rtlScrollBehavior } = getEnvironment();\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const scrollLeftTop = isHorizontal ? 'Left' : 'Top';\r\n const { _overflowAmount } = structureSetupState;\r\n const scrollPositionMax = round(_overflowAmount[axis]);\r\n const scrollPosition = abs(scrollOffsetElement[`scroll${scrollLeftTop}`]);\r\n const handleRTL = isHorizontal && isRTL;\r\n const rtlNormalizedScrollPosition = _rtlScrollBehavior.i\r\n ? scrollPosition\r\n : scrollPositionMax - scrollPosition;\r\n const finalScrollPosition = handleRTL ? rtlNormalizedScrollPosition : scrollPosition;\r\n const scrollPercent = min(1, finalScrollPosition / scrollPositionMax);\r\n const lengthRatio = getScrollbarHandleLengthRatio(scrollbarHandle, scrollbarTrack, isHorizontal);\r\n\r\n return (1 / lengthRatio) * (1 - lengthRatio) * scrollPercent;\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n directionIsRTL,\r\n each,\r\n isBoolean,\r\n isEmptyArray,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n setT,\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 classNamesScrollbarTransitionless,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport {\r\n getScrollbarHandleLengthRatio,\r\n getScrollbarHandleOffsetRatio,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.calculations';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ScrollbarsSetupEvents } from 'setups/scrollbarsSetup/scrollbarsSetup.events';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\nimport type { StyleObject } from 'typings';\r\nimport { StructureSetupState } from 'setups';\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 _handleStyle: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _scrollbarsAddRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n isHorizontal?: boolean\r\n ) => void;\r\n _refreshScrollbarsHandleLength: (structureSetupState: StructureSetupState) => void;\r\n _refreshScrollbarsHandleOffset: (structureSetupState: StructureSetupState) => void;\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\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj,\r\n scrollbarsSetupEvents: ScrollbarsSetupEvents\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization } = getEnvironment();\r\n const { scrollbarsSlot: defaultScrollbarsSlot } = _getDefaultInitialization();\r\n const { _documentElm, _target, _host, _viewport, _targetIsElm, _scrollOffsetElement } =\r\n structureSetupElements;\r\n const { scrollbarsSlot } = (_targetIsElm ? {} : target) as ScrollbarsInitialization;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n defaultScrollbarsSlot,\r\n scrollbarsSlot\r\n );\r\n const scrollbarStructureAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\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 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 scrollbarStructureRefreshHandleLength = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n ) => {\r\n scrollbarsHandleStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _track } = structure;\r\n return [\r\n _handle,\r\n {\r\n [isHorizontal ? 'width' : 'height']: `${(\r\n getScrollbarHandleLengthRatio(_handle, _track, isHorizontal, structureSetupState) * 100\r\n ).toFixed(3)}%`,\r\n },\r\n ];\r\n });\r\n };\r\n const scrollbarStructureRefreshHandleOffset = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n structureSetupState: StructureSetupState,\r\n isHorizontal?: boolean\r\n ) => {\r\n const translateAxis = isHorizontal ? 'X' : 'Y';\r\n scrollbarsHandleStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _track, _scrollbar } = structure;\r\n const offsetRatio = getScrollbarHandleOffsetRatio(\r\n _handle,\r\n _track,\r\n _scrollOffsetElement,\r\n structureSetupState,\r\n directionIsRTL(_scrollbar),\r\n isHorizontal\r\n );\r\n // eslint-disable-next-line no-self-compare\r\n const validOffsetRatio = offsetRatio === offsetRatio; // is false when offset is NaN\r\n return [\r\n _handle,\r\n {\r\n transform: validOffsetRatio\r\n ? `translate${translateAxis}(${(offsetRatio * 100).toFixed(3)}%)`\r\n : '',\r\n },\r\n ];\r\n });\r\n };\r\n\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const scrollbarsAddRemoveClass = (\r\n className: string | false | null | undefined,\r\n add?: boolean,\r\n onlyHorizontal?: boolean\r\n ) => {\r\n const singleAxis = isBoolean(onlyHorizontal);\r\n const runHorizontal = singleAxis ? onlyHorizontal : true;\r\n const runVertical = singleAxis ? !onlyHorizontal : true;\r\n runHorizontal && scrollbarStructureAddRemoveClass(horizontalScrollbars, className, add);\r\n runVertical && scrollbarStructureAddRemoveClass(verticalScrollbars, className, add);\r\n };\r\n const refreshScrollbarsHandleLength = (structureSetupState: StructureSetupState) => {\r\n scrollbarStructureRefreshHandleLength(horizontalScrollbars, structureSetupState, true);\r\n scrollbarStructureRefreshHandleLength(verticalScrollbars, structureSetupState);\r\n };\r\n const refreshScrollbarsHandleOffset = (structureSetupState: StructureSetupState) => {\r\n scrollbarStructureRefreshHandleOffset(horizontalScrollbars, structureSetupState, true);\r\n scrollbarStructureRefreshHandleOffset(verticalScrollbars, structureSetupState);\r\n };\r\n const generateScrollbarDOM = (isHorizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = isHorizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const arrToPush = isHorizontal ? 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 scrollbarsSetupEvents(\r\n result,\r\n scrollbarsAddRemoveClass,\r\n _documentElm,\r\n _scrollOffsetElement,\r\n isHorizontal\r\n ),\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 scrollbarsAddRemoveClass(classNamesScrollbarTransitionless);\r\n }, 300);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _refreshScrollbarsHandleLength: refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset: refreshScrollbarsHandleOffset,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _horizontal: {\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _handleStyle: scrollbarsHandleStyle.bind(0, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\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 {\r\n rAF,\r\n cAF,\r\n isFunction,\r\n on,\r\n runEachAndClear,\r\n setT,\r\n clearT,\r\n parent,\r\n scrollLeft,\r\n scrollTop,\r\n} from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createScrollbarsSetupEvents } from 'setups/scrollbarsSetup/scrollbarsSetup.events';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport {\r\n classNamesScrollbarVisible,\r\n classNamesScrollbarUnusable,\r\n classNamesScrollbarCornerless,\r\n classNamesScrollbarAutoHidden,\r\n classNamesScrollbarHandleInteractive,\r\n classNamesScrollbarTrackInteractive,\r\n classNameScrollbarRtl,\r\n} from 'classnames';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type {\r\n ReadonlyOptions,\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 { DeepPartial, 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 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: ReadonlyOptions,\r\n structureSetupState: (() => StructureSetupState) & StructureSetupStaticState\r\n): Setup<\r\n ScrollbarsSetupState,\r\n ScrollbarsSetupStaticState,\r\n [DeepPartial]\r\n> => {\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 createScrollbarsSetupEvents(options, structureSetupState)\r\n );\r\n const {\r\n _host,\r\n _viewport,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n _viewportIsTarget,\r\n _isBody,\r\n } = structureSetupState._elements;\r\n const {\r\n _horizontal,\r\n _vertical,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset,\r\n } = elements;\r\n const { _handleStyle: styleHorizontal } = _horizontal;\r\n const { _handleStyle: styleVertical } = _vertical;\r\n const styleScrollbarPosition = (structure: ScrollbarStructure) => {\r\n const { _scrollbar } = structure;\r\n const elm = _viewportIsTarget && !_isBody && parent(_scrollbar) === _viewport && _scrollbar;\r\n return [\r\n elm,\r\n {\r\n transform: elm\r\n ? `translate(${scrollLeft(_scrollOffsetElement)}px, ${scrollTop(_scrollOffsetElement)}px)`\r\n : '',\r\n },\r\n ] as [HTMLElement | false, StyleObject];\r\n };\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoTimeout();\r\n if (removeAutoHide) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarAutoHidden);\r\n } else {\r\n const hide = () => scrollbarsAddRemoveClass(classNamesScrollbarAutoHidden, true);\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\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, 'pointerover', onHostMouseEnter, { _once: true }),\r\n on(_host, 'pointerenter', onHostMouseEnter),\r\n on(_host, 'pointerleave', () => {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }),\r\n on(_host, 'pointermove', () => {\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(_scrollEventElement, 'scroll', () => {\r\n requestScrollAnimationFrame(() => {\r\n _refreshScrollbarsHandleOffset(structureSetupState());\r\n\r\n autoHideNotNever && manageScrollbarsAutoHide(true);\r\n scrollTimeout(() => {\r\n autoHideNotNever && !mouseInHost && manageScrollbarsAutoHide(false);\r\n });\r\n });\r\n\r\n _viewportIsTarget && styleHorizontal(styleScrollbarPosition);\r\n _viewportIsTarget && styleVertical(styleScrollbarPosition);\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 {\r\n _overflowEdgeChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _directionChanged,\r\n } = structureUpdateHints;\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n const currStructureSetupState = structureSetupState();\r\n const { _overflowAmount, _overflowStyle, _directionIsRTL } = currStructureSetupState;\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 [dragScroll, dragScrollChanged] = checkOption('scrollbars.dragScroll');\r\n const [clickScroll, clickScrollChanged] = checkOption('scrollbars.clickScroll');\r\n\r\n const updateHandle =\r\n _overflowEdgeChanged || _overflowAmountChanged || _directionChanged || force;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged || force;\r\n\r\n const setScrollbarVisibility = (overflowStyle: OverflowStyle, isHorizontal: boolean) => {\r\n const isVisible =\r\n visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll');\r\n scrollbarsAddRemoveClass(classNamesScrollbarVisible, isVisible, isHorizontal);\r\n return isVisible;\r\n };\r\n\r\n globalAutoHideDelay = autoHideDelay;\r\n\r\n if (themeChanged) {\r\n scrollbarsAddRemoveClass(prevTheme);\r\n scrollbarsAddRemoveClass(theme, true);\r\n\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 (dragScrollChanged) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarHandleInteractive, dragScroll);\r\n }\r\n if (clickScrollChanged) {\r\n scrollbarsAddRemoveClass(classNamesScrollbarTrackInteractive, clickScroll);\r\n }\r\n if (updateVisibility) {\r\n const xVisible = setScrollbarVisibility(_overflowStyle.x, true);\r\n const yVisible = setScrollbarVisibility(_overflowStyle.y, false);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n scrollbarsAddRemoveClass(classNamesScrollbarCornerless, !hasCorner);\r\n }\r\n if (updateHandle) {\r\n _refreshScrollbarsHandleLength(currStructureSetupState);\r\n _refreshScrollbarsHandleOffset(currStructureSetupState);\r\n\r\n scrollbarsAddRemoveClass(classNamesScrollbarUnusable, !_overflowAmount.x, true);\r\n scrollbarsAddRemoveClass(classNamesScrollbarUnusable, !_overflowAmount.y, false);\r\n scrollbarsAddRemoveClass(classNameScrollbarRtl, _directionIsRTL && !_isBody);\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 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};\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};\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","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 isPlainObject,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOptions } 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 { DeepPartial, OverflowStyle } from 'typings';\r\nimport { InitializationTarget, Initialization, cancelInitialization } from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\nimport {\r\n ScrollbarsSetupElement,\r\n ScrollbarStructure,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\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\nexport interface OverlayScrollbarsStatic {\r\n (target: InitializationTarget): OverlayScrollbars | undefined;\r\n (\r\n target: InitializationTarget,\r\n options: DeepPartial,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(plugin: Plugin | Plugin[]): void;\r\n valid(osInstance: any): boolean;\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 staticDefaultInitialization: Initialization;\r\n staticDefaultOptions: Options;\r\n\r\n getDefaultInitialization(): Initialization;\r\n setDefaultInitialization(newDefaultInitialization: DeepPartial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: DeepPartial): 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 directionRTL: boolean;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface ScrollbarElements {\r\n scrollbar: HTMLElement;\r\n track: HTMLElement;\r\n handle: HTMLElement;\r\n}\r\n\r\nexport interface CloneableScrollbarElements extends ScrollbarElements {\r\n clone(): ScrollbarElements;\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 scrollOffsetElement: HTMLElement;\r\n scrollEventElement: HTMLElement | Document;\r\n scrollbarHorizontal: CloneableScrollbarElements;\r\n scrollbarVertical: CloneableScrollbarElements;\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: DeepPartial;\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, canceled: 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?: DeepPartial): 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// eslint-disable-next-line @typescript-eslint/no-redeclare\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: InitializationTarget,\r\n options?: DeepPartial,\r\n eventListeners?: GeneralInitialEventListeners\r\n) => {\r\n const { _getDefaultOptions, _addListener: addEnvListener } = getEnvironment();\r\n const plugins = getPlugins();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (options && !potentialInstance) {\r\n let destroyed = false;\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: DeepPartial) => {\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: ReadonlyOptions = 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: DeepPartial, force?: boolean) => {\r\n updateStructure(changedOptions, !!force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (canceled?: 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 @typescript-eslint/no-use-before-define\r\n triggerEvent('destroyed', [instance, !!canceled]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: DeepPartial) {\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 _directionIsRTL,\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 directionRTL: _directionIsRTL,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const {\r\n _target,\r\n _host,\r\n _padding,\r\n _viewport,\r\n _content,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n } = structureState._elements;\r\n const { _horizontal, _vertical } = scrollbarsState._elements;\r\n const translateScrollbarStructure = (\r\n scrollbarStructure: ScrollbarStructure\r\n ): ScrollbarElements => {\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n return {\r\n scrollbar: _scrollbar,\r\n track: _track,\r\n handle: _handle,\r\n };\r\n };\r\n const translateScrollbarsSetupElement = (\r\n scrollbarsSetupElement: ScrollbarsSetupElement\r\n ): CloneableScrollbarElements => {\r\n const { _scrollbarStructures, _clone } = scrollbarsSetupElement;\r\n const translatedStructure = translateScrollbarStructure(_scrollbarStructures[0]);\r\n\r\n return assignDeep({}, translatedStructure, {\r\n clone: () => {\r\n const result = translateScrollbarStructure(_clone());\r\n updateScrollbars({}, true, {});\r\n return result;\r\n },\r\n });\r\n };\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 scrollOffsetElement: _scrollOffsetElement,\r\n scrollEventElement: _scrollEventElement,\r\n scrollbarHorizontal: translateScrollbarsSetupElement(_horizontal),\r\n scrollbarVertical: translateScrollbarsSetupElement(_vertical),\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 (cancelInitialization(!targetIsElement && target.cancel, structureState._elements)) {\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 return potentialInstance!;\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.valid = (osInstance: any) => {\r\n const hasElmsFn = osInstance && (osInstance as OverlayScrollbars).elements;\r\n const elements = isFunction(hasElmsFn) && hasElmsFn();\r\n return isPlainObject(elements) && !!getInstance(elements.target);\r\n};\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 _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\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 staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\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","deepBoundaryIsValid","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","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","directionIsRTL","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","preventDefault","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","dataValueHostScrollbarHidden","dataValueHostUpdating","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarHidden","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarRtl","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","classNamesScrollbarVisible","classNamesScrollbarCornerless","classNamesScrollbarTransitionless","classNamesScrollbarInteraction","classNamesScrollbarUnusable","classNamesScrollbarAutoHidden","classNamesScrollbarTrackInteractive","classNamesScrollbarHandleInteractive","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","showNativeOverlaidScrollbars","updating","elementEvents","attributes","ignoreMutation","overflow","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","pointers","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","_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","_nativeScrollbarsHiding","_nativeScrollbarsOverlaid","_cssCustomProperties","create","_overflowUpdateSegment","doViewportArrange","flexboxGlue","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","_getState","_viewportPaddingStyle","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","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","nativeScrollbarsOverlaid","staticDefaultInitialization","host","padding","ownerDocument","content","scrollbarsSlot","cancel","staticDefaultOptions","_rtlScrollBehavior","_flexboxGlue","_addListener","_getDefaultInitialization","_setDefaultInitialization","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_staticDefaultInitialization","_staticDefaultOptions","resizeFn","getEnvironment","resolveInitialization","staticInitializationElement","fallbackStaticInitializationElement","defaultStaticInitializationElementStrategy","staticInitializationElementValue","staticInitialization","resolvedInitialization","dynamicInitializationElement","fallbackDynamicInitializationElement","defaultDynamicInitializationElementStrategy","dynamicInitializationElementValue","dynamicInitialization","cancelInitialization","cancelInitializationValue","structureSetupElements","_isBody","_viewportIsTarget","_getEnvironment","defaultNativeScrollbarsOverlaid","defaultbody","resolvedNativeScrollbarsOverlaid","resolvedDocumentScrollingElement","finalNativeScrollbarsOverlaid","finalDocumentScrollingElement","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getDefaultInitializa","defaultHostInitialization","defaultViewportInitialization","defaultPaddingInitialization","defaultContentInitialization","targetIsElm","targetStructureInitialization","hostInitialization","paddingInitialization","viewportInitialization","contentInitialization","targetElement","isTextarea","isBody","wnd","defaultView","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","viewportIsTarget","viewportIsTargetBody","evaluatedTargetObj","_target","_host","_viewport","_padding","_content","_viewportArrange","_scrollOffsetElement","documentElement","_scrollEventElement","_windowElm","_documentElm","_isTextarea","_targetIsElm","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","removeHtmlClass","createTrinsicUpdateSegment","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdateSegment","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_nativeScrollbarStyling","_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","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","resizeObserverInstance","observe","disconnect","pluginAppearCallback","_sizeObserverPlugin$_","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLCache","directionIsRTLCacheChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","intersectionObserverInstance","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","fromRecords","intersectionObserverCallback","entries","root","onSizeChanged","newSize","_createSizeObserver","destroySizeObserver","appendSizeObserver","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","directionIsRTLChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","_ref2","destroyTrinsicObserver","appendTrinsicObserver","updateTrinsicObserver","_ref3","_createDOMObserver","destroyHostMutationObserver","updateHostMutationObserver","viewportIsTargetResizeObserver","hostUpdateResult","trinsicUpdateResult","contentUpdateResult","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialXYNumber","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","appendStructureElements","destroyElements","updateStructure","triggerUpdateEvent","truthyUpdateHints","some","destroyObservers","_createStructureSetup2","appendObserverElements","updateObservers","updateObserversOptions","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","getClientOffset","clientX","clientY","getScale","element","continuePointerDown","scrollType","scrollbarOptions","button","isPrimary","pointerType","includes","createRootClickStopPropagationEvents","scrollbar","documentElm","createDragScrollingEvents","doc","scrollbarStructure","scrollOffsetElement","isHorizontal","_handle","_track","_scrollbar","scrollOffsetKey","xyKey","whKey","createOnPointerMoveHandler","mouseDownScroll","mouseDownClientOffset","mouseDownInvertedScale","_structureSetupState","movement","handleTrackDiff","scrollDeltaPercent","scrollDelta","isRTL","negateMultiplactor","pointerDownEvent","offSelectStart","offPointerMove","pointerUpEvent","releasePointerCapture","pointerId","setPointerCapture","createScrollbarsSetupEvents","scrollbarsAddRemoveClass","scrollOffsetElm","min","getScrollbarHandleLengthRatio","scrollbarHandle","scrollbarTrack","axis","viewportSize","handleSize","trackSize","getScrollbarHandleOffsetRatio","scrollLeftTop","scrollPositionMax","scrollPosition","handleRTL","rtlNormalizedScrollPosition","finalScrollPosition","scrollPercent","lengthRatio","createScrollbarsSetupElements","scrollbarsSetupEvents","defaultScrollbarsSlot","evaluatedScrollbarSlot","scrollbarStructureAddRemoveClass","scrollbarStructures","scrollbarsHandleStyle","_elmStyle","scrollbarStructureRefreshHandleLength","structure","toFixed","scrollbarStructureRefreshHandleOffset","translateAxis","offsetRatio","validOffsetRatio","transform","horizontalScrollbars","verticalScrollbars","onlyHorizontal","singleAxis","runHorizontal","runVertical","refreshScrollbarsHandleLength","refreshScrollbarsHandleOffset","generateScrollbarDOM","scrollbarClassName","arrToPush","transitionlessClass","track","handle","generateHorizontalScrollbarStructure","generateVerticalScrollbarStructure","_refreshScrollbarsHandleLength","_refreshScrollbarsHandleOffset","_scrollbarsAddRemoveClass","_horizontal","_scrollbarStructures","_clone","_handleStyle","_vertical","createSelfCancelTimeout","id","setTFn","clearTFn","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","styleScrollbarPosition","manageScrollbarsAutoHide","removeAutoHide","delayless","hide","onHostMouseEnter","scrollbarsSetupState","structureUpdateHints","currStructureSetupState","themeChanged","visibilityChanged","autoHideChanged","_checkOption5","dragScrollChanged","_checkOption6","clickScrollChanged","updateHandle","updateVisibility","setScrollbarVisibility","isVisible","xVisible","yVisible","hasCorner","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","targetIsElement","instanceTarget","potentialInstance","optionsValidationPlugin","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","canceled","instance","_structureState","directionRTL","translateScrollbarStructure","translateScrollbarsSetupElement","scrollbarsSetupElement","translatedStructure","scrollEventElement","scrollbarHorizontal","scrollbarVertical","pluginInstance","sizeChanged","hostMutation","valid","hasElmsFn","_getEnvironment2","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","cssCustomProperties","getDefaultInitialization","setDefaultInitialization","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 4e5a647..457857c 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!(!(w(n)||!h(n)&&t)||r>0&&g(n)&&!(r-1 in n))},y=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)},m=function(n){var r=HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===o)},x=function(n){var r=Element;return!!n&&(r?n instanceof r:n.nodeType===o)},O=function(n,r,t){return n.indexOf(r,t)},S=function(n,r,t){return t||v(r)||!b(r)?n.push(r):Array.prototype.push.apply(n,r),n},L=function(n){var t=Array.from,e=[];return t&&n?t(n):(n instanceof Set?n.forEach((function(n){S(e,n)})):r(n,(function(n){S(e,n)})),e)},C=function(n){return!!n&&0===n.length},E=function(n,t,e){r(n,(function(n){return n&&n.apply(void 0,t||[])})),!e&&(n.length=0)},P=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},R=function(n){return n?Object.keys(n):[]},A=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(R(e),(function(r){var i=e[r];if(t===i)return!0;var o=w(i);if(i&&(y(i)||o)){var u=t[r],c=u;o&&!w(u)?c=[]:o||y(u)||(c={}),t[r]=n(c,i)}else t[r]=i}))})),t},M=function(n){for(var r in n)return!1;return!0},H=function(n,r,t,e){if(f(e))return t?t[n]:r;t&&!l(e)&&!1!==e&&(t[n]=e)},T=function(n,r,t){if(f(t))return n?n.getAttribute(r):null;n&&n.setAttribute(r,t)},z=function(n,r,t,e){if(t){var i=T(n,r)||"",o=new Set(i.split(" "));o[e?"add":"delete"](t),T(n,r,L(o).join(" ").trim())}},D=function(n,r,t){var e=T(n,r)||"";return new Set(e.split(" ")).has(t)},B=function(n,r){n&&n.removeAttribute(r)},j=function(n,r){return H("scrollLeft",0,n,r)},k=function(n,r){return H("scrollTop",0,n,r)},F=Element.prototype,I=function(n,r){var t=[],e=r?x(r)?r:null:document;return e?S(t,e.querySelectorAll(n)):t},W=function(n,r){return!!x(n)&&(F.matches||F.msMatchesSelector).call(n,r)},_=function(n){return n?L(n.childNodes):[]},N=function(n){return n?n.parentElement:null},Y=function(n,r){if(x(n)){var t=F.closest;if(t)return t.call(n,r);do{if(W(n,r))return n;n=N(n)}while(n)}return null},V=function(n,r,t){var e=n&&Y(n,r),i=n&&function(n,r){var t=r?x(r)?r:null:document;return t?t.querySelector(n):null}(t,e),o=Y(i,r)===e;return!(!e||!i)&&(e===n||i===n||o&&Y(Y(n,t),r)!==e)},X=function(n,t,e){if(e&&n){var i,o=t;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)}},U=function(n,r){X(n,null,r)},K=function(n,r){X(N(n),n,r)},$=function(n,r){X(N(n),n&&n.nextSibling,r)},q=function n(t){if(b(t))r(L(t),(function(r){return n(r)}));else if(t){var e=N(t);e&&e.removeChild(t)}},J=function(n){var r=document.createElement("div");return n&&T(r,"class",n),r},Z=function(n){var t=J();return t.innerHTML=n.trim(),r(_(t),(function(n){return q(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 P(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},pn=function(n,r){vn(n,r,(function(n,r){return n.remove(r)}))},hn=function(n,r){return vn(n,r,(function(n,r){return n.add(r)})),pn.bind(0,n,r)},wn=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},gn=function(n,r){return wn(n,r,["w","h"])},bn=function(n,r){return wn(n,r,["x","y"])},yn=function(n,r){return wn(n,r,["t","r","b","l"])},mn=function(n,r,t){return wn(n,r,["width","height"],t&&function(n){return Math.round(n)})},xn=function(){},On=function(n,r){var t,e,i,o=xn,u=r||{},c=u.p,a=u._,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=L(arguments),r=h(c)?c():c,u=s(r)&&r>=0;if(u){var f=h(a)?a():a,p=s(f)&&f>=0,w=r>0?ln:fn,g=r>0?dn:an,b=d(n),y=b||n,m=l.bind(0,y);o();var x=w(m,r);o=function(){return g(x)},p&&!t&&(t=ln(v,f)),e=i=y}else l(n)};return p.S=v,p},Sn={opacity:1,zindex:1},Ln=function(n,r){var t=r?parseFloat(n):parseInt(n,10);return t==t?t:0},Cn=function(n,r,t){return null!=r?r[t]||r.getPropertyValue(t):n.style[t]},En=function(n,r,t){try{var e=n.style;f(e[r])?e.setProperty(r,t):e[r]=function(n,r){return!Sn[n.toLowerCase()]&&s(r)?r+"px":r}(r,t)}catch(c){}},Pn=function(n){return"rtl"===t(n,"direction")},Rn=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:Ln(l[u]),r:Ln(l[c]),b:Ln(l[a]),l:Ln(l[f])}},An=Math.round,Mn={w:0,h:0},Hn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:Mn},Tn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:Mn},zn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:Mn},Dn=function(n){var r=parseFloat(t(n,"height"))||0,e=parseFloat(t(n,"width"))||0;return{w:e-An(e),h:r-An(r)}},Bn=function(n){return n.getBoundingClientRect()},jn=function(){if(f(e)){e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(n){}}return e},kn=function(n){return n.split(" ")},Fn=function(n,t,e,i){r(kn(t),(function(r){n.removeEventListener(r,e,i)}))},In=function(n,t,e,i){var o,u=jn(),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(kn(t),(function(r){var t=f?function(i){n.removeEventListener(r,t,a),e&&e(i)}:e;S(l,Fn.bind(null,n,r,t,a)),n.addEventListener(r,t,d)})),E.bind(0,l)},Wn=function(n){return n.stopPropagation()},_n={x:0,y:0},Nn=function(n){var r=n?Bn(n):0;return r?{x:r.left+window.pageYOffset,y:r.top+window.pageXOffset}:_n},Yn=function(n,t){r(w(t)?t:[t],n)},Vn=function(n){var t=new Map,e=function(n,r){if(n){var e=t.get(n);Yn((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),Yn((function(n){n&&i.add(n)}),r),e.bind(0,n,r)};return r(R(n),(function(r){i(r,n[r])})),[i,e,function(n,e){var i=t.get(n);r(L(i),(function(n){e&&!C(e)?n.apply(0,e):n()}))}]},Xn=function(n,r){return n?r.split(".").reduce((function(n,r){return n&&P(n,r)?n[r]:void 0}),n):void 0},Un=function(n,r,t){return function(e){return[Xn(n,e),t||void 0!==Xn(r,e)]}},Kn=function(n){var r=n;return[function(){return r},function(n){r=A({},r,n)}]},$n="os-environment",qn=$n+"-flexbox-glue",Jn=qn+"-max",Zn="data-overlayscrollbars",Gn=Zn+"-overflow-x",Qn=Zn+"-overflow-y",nr="overflowVisible",rr="scrollbarHidden",tr="updating",er="os-padding",ir="os-viewport",or=ir+"-arrange",ur="os-content",cr=ir+"-scrollbar-hidden",ar="os-overflow-visible",fr="os-size-observer",lr=fr+"-appear",dr=fr+"-listener",sr=dr+"-scroll",vr=dr+"-item",pr=vr+"-final",hr="os-trinsic-observer",wr="os-scrollbar",gr=wr+"-rtl",br=wr+"-horizontal",yr=wr+"-vertical",mr=wr+"-track",xr=wr+"-handle",Or=wr+"-visible",Sr=wr+"-cornerless",Lr=wr+"-transitionless",Cr=wr+"-interaction",Er=wr+"-unusable",Pr=wr+"-auto-hidden",Rr=mr+"-interactive",Ar=xr+"-interactive",Mr=function(n){return JSON.stringify(n,(function(n,r){if(h(r))throw new Error;return r}))},Hr={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},Tr=function n(t,e){var i={};return r(R(e).concat(R(t)),(function(r){var o=t[r],u=e[r];if(g(o)&&g(u))A(i[r]={},n(o,u));else if(P(e,r)&&u!==o){var c=!0;if(w(o)||w(u))try{Mr(o)===Mr(u)&&(c=!1)}catch(l){}c&&(i[r]=u)}})),i},zr={},Dr=function(){return zr},Br={exports:{}};!function(n){function r(){return n.exports=r=Object.assign?Object.assign.bind():function(n){for(var r=1;r
');U(n,i),hn(n,sr);var o,u=i[0],c=u.lastChild,a=u.firstChild,f=null==a?void 0:a.firstChild,l=Hn(u),d=l,s=!1,v=function(){j(a,Wr),k(a,Wr),j(c,Wr),k(c,Wr)},p=function(n){o=0,s&&(l=d,r(!0===n))},h=function(n){d=Hn(u),s=!n||!gn(d,l),n?(Wn(n),s&&!o&&(an(o),o=fn(p))):p(!1===n),v()},w=S([],[In(a,_r,h),In(c,_r,h)]);return t(f,{width:Wr,height:Wr}),fn(v),[e?h.bind(0,!1):v,w]}},jr),Vr=0,Xr=Math.round,Ur=Math.abs,Kr="__osScrollbarsHidingPlugin",$r=((kr={})[Kr]={T:function(n){var r=n.L,t=n.H,e=!(n.D||r||!t.x&&!t.y)&&document.createElement("style");return e&&(T(e,"id",or+"-"+Vr),Vr++),e},M:function(n,e,i,o,u,c,a){return[function(r,e,c,a){if(n){var f=u().R,l=r.I,d=r.V,s=d.x,v=d.y,p=l.x,h=l.y,w=f[a?"paddingRight":"paddingLeft"],g=f.paddingTop,b=e.w+c.w,y=e.h+c.h,m={w:h&&v?h+b-w+"px":"",h:p&&s?p+y-g+"px":""};if(o){var x=o.sheet;if(x){var O=x.cssRules;if(O){O.length||x.insertRule("#"+T(o,"id")+" + ."+or+"::before {}",0);var S=O[0].style;S.width=m.w,S.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().R,v=d.V,p=v.x,h=v.y,w={},g=function(n){return r(n.split(" "),(function(n){w[n]=s[n]}))};p&&g("marginBottom paddingTop paddingBottom"),h&&g("marginLeft marginRight paddingLeft paddingRight");var b=t(i,R(w));return pn(i,or),e||(w.height=""),t(i,w),[function(){a(d,f,n,b),t(i,b),hn(i,or)},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=Ur(u.w),a=Ur(u.h),f={w:Ur(Xr(o.w/(n.w/100))),h:Ur(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=Ur(n),e=Ur(r);return!(t===e||t+1===e||t-1===e)}(f.w,f.h);if(d&&s&&l!==r&&l>0){var v=e(),p=v[0],h=v[1];A(t.k,p),h&&i()}n=o,r=l}}}},kr),qr=function(n,r,t,e){U(n,r);var i=Tn(r),o=Hn(r),u=Dn(t);return e&&q(r),{x:o.h-i.h+u.h,y:o.w-i.w+u.w}},Jr=function(n,r){var e="hidden";t(n,{overflowX:e,overflowY:e,direction:"rtl"}),j(n,0);var i=Nn(n),o=Nn(r);j(n,-999);var u=Nn(r);return{i:i.x===o.x,n:o.x!==u.x}},Zr=function(n,r){var t=hn(n,qn),e=Bn(n),i=Bn(r),o=mn(i,e,!0),u=hn(n,Jn),c=Bn(n),a=Bn(r),f=mn(a,c,!0);return t(),u(),o&&f},Gr=function(){return Fr||(Fr=function(){var n,e=document.body,o=Z('
')[0],c=o.firstChild,a=Vn(),f=a[0],l=a[2],d=i({o:qr(e,o,c),u:bn},qr.bind(0,e,o,c,!0)),s=d[0],v=(0,d[1])()[0],p=function(n){var e=!1,i=hn(n,cr);try{e="none"===t(n,function(n){var t=tn[n];if(P(tn,n))return t;var e=G(n),i=J().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),h={x:0===v.x,y:0===v.y},w={host:null,padding:!p,viewport:function(n){return p&&n===n.ownerDocument.body&&n},content:!1,scrollbarsSlot:!0,cancel:{nativeScrollbarsOverlaid:!0,body:null}},g=A({},Hr),b={k:v,H:h,L:p,D:"-1"===t(o,"zIndex"),B:Jr(o,c),F:Zr(o,c),q:function(n){return f("_",n)},U:A.bind(0,{},w),N:function(n){A(w,n)},Y:A.bind(0,{},g),W:function(n){A(g,n)},G:A({},w),X:A({},g)};return B(o,"style"),q(o),p||h.x&&h.y||window.addEventListener("resize",(function(){var r=Dr()[Kr];(n=n||r&&r.j())&&n(b,s,l.bind(0,"_"))})),b}()),Fr},Qr=function(n,r){return h(n)?n.apply(0,r):n},nt=function(n,r,t,e){var i=f(e)?t:e;return Qr(i,n)||r()},rt=function(n,r,t,e){var i=f(e)?t:e,o=Qr(i,n);return!!o&&(m(o)?o:r())},tt=function(n,r){var t=n||{},e=t.nativeScrollbarsOverlaid,i=t.body,o=r.Z,u=r.$,c=Gr(),a=c.U,d=c.H,s=a().cancel,v=s.nativeScrollbarsOverlaid,p=s.body,h=null!=e?e:v,w=f(i)?p:i,g=(d.x||d.y)&&h,b=o&&(l(w)?!u:w);return!!g||!!b},et=J.bind(0,""),it=function(n){U(N(n),_(n)),q(n)},ot=function(n,r){return T(n,Zn,r),B.bind(0,n,Zn)},ut=function(n){var r=Gr(),t=r.U,e=r.L,i=Dr()[Kr],o=i&&i.T,u=t(),c=u.host,a=u.viewport,f=u.padding,l=u.content,d=m(n),s=d?{}:n,v=s.host,p=s.padding,h=s.viewport,w=s.content,g=d?n:s.target,b=W(g,"textarea"),y=g.ownerDocument,x=g===y.body,L=y.defaultView,C=nt.bind(0,[g]),P=rt.bind(0,[g]),A=C(et,a,h),M=A===g,H=M&&x,T={J:g,K:b?C(et,c,v):g,rr:A,ar:!M&&P(et,f,p),er:!M&&P(et,l,w),nr:!M&&!e&&o&&o(r),tr:H?y.documentElement:A,ir:H?y:A,vr:L,ur:y,lr:b,Z:x,cr:d,$:M,sr:function(n,r){return M?D(A,Zn,r):function(n,r){return vn(n,r,(function(n,r){return n.contains(r)}))}(A,n)},dr:function(n,r,t){return M?z(A,Zn,r,t):(t?hn:pn)(A,n)}},j=R(T).reduce((function(n,r){var t=T[r];return S(n,!(!t||N(t))&&t)}),[]),k=function(n){return n?O(j,n)>-1:null},F=T.J,I=T.K,Y=T.ar,V=T.rr,X=T.er,J=T.nr,Z=[],G=b&&k(I),Q=b?F:_([X,V,Y,I,F].find((function(n){return!1===k(n)}))),nn=X||V;return[T,function(){var n=ot(I,M?"viewport":"host"),r=hn(Y,er),t=hn(V,!M&&ir),i=hn(X,ur),o=H?hn(N(g),cr):xn;G&&($(F,I),S(Z,(function(){$(I,F),q(I)}))),U(nn,Q),U(I,Y),U(Y||I,!M&&V),U(V,X),S(Z,(function(){o(),n(),B(V,Gn),B(V,Qn),k(X)&&it(X),k(V)&&it(V),k(Y)&&it(Y),r(),t(),i()})),e&&!M&&S(Z,pn.bind(0,V,cr)),J&&(K(V,J),S(Z,q.bind(0,J)))},E.bind(0,Z)]},ct=function(n,r){var e=n.er,i=r[0];return function(n){var r=Gr().F,o=i().gr,u=n.hr,c=(e||!r)&&u;return c&&t(e,{height:o?"":"100%"}),{pr:c,_r:c}}},at=function(n,r){var e=r[0],o=r[1],u=n.K,c=n.ar,a=n.rr,f=n.$,l=i({u:yn,o:Rn()},Rn.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],p=Gr(),h=p.L,w=p.F,g=e().br,b=n.pr,y=n._r,m=n.wr,x=r("paddingAbsolute"),O=x[0],S=x[1];if(b||v||!w&&y){var L=d(i);l=L[0],v=L[1]}var C=!f&&(S||m||v);if(C){var E=!O||!c&&!h,P=l.r+l.l,R=l.t+l.b,M={marginRight:E&&!g?-P:0,marginBottom:E?-R:0,marginLeft:E&&g?-P:0,top:E?-l.t:0,right:E?g?-l.r:"auto":0,left:E?g?"auto":-l.l:0,width:E?"calc(100% + "+P+"px)":""},H={paddingTop:E?l.t:0,paddingRight:E?l.r:0,paddingBottom:E?l.b:0,paddingLeft:E?l.l:0};t(c||a,M),t(a,H),o({ar:l,mr:!E,R:c?H:A({},M,H)})}return{yr:C}}},ft=Math.max,lt=ft.bind(0,0),dt="visible",st="hidden",vt=42,pt={u:gn,o:{w:0,h:0}},ht={u:bn,o:{x:st,y:st}},wt=function(n,r,t){return t?hn(n,r):pn(n,r)},gt=function(n){return 0===n.indexOf(dt)},bt=function(n,r){var e=r[0],o=r[1],u=n.K,c=n.ar,a=n.rr,f=n.nr,l=n.$,d=n.dr,s=n.Z,v=n.vr,p=Gr(),h=p.k,w=p.F,g=p.L,b=p.H,y=Dr()[Kr],m=!l&&!g&&(b.x||b.y),x=s&&l,O=i(pt,Dn.bind(0,a)),S=O[0],L=O[1],C=i(pt,zn.bind(0,a)),E=C[0],P=C[1],R=i(pt),A=R[0],M=R[1],H=i(pt),D=H[0],B=H[1],j=i(ht)[0],k=function(n,r){if(t(a,{height:""}),r){var i=e(),o=i.mr,c=i.ar,f=n.Sr,l=n.I,d=Dn(u),s=Tn(u),v="content-box"===t(a,"boxSizing"),p=o||v?c.b+c.t:0,h=!(b.x&&v);t(a,{height:s.h+d.h+(f.x&&h?l.x:0)-p})}},F=function(n,r){var e=g||n?0:vt,i=function(n,i,o){var u=t(a,n),c="scroll"===(r?r[n]:u);return[u,c,c&&!g?i?e:o:0,i&&!!e]},o=i("overflowX",b.x,h.x),u=o[0],c=o[1],f=o[2],l=o[3],d=i("overflowY",b.y,h.y);return{Cr:{x:u,y:d[0]},Sr:{x:c,y:d[1]},I:{x:f,y:d[2]},V:{x:l,y:d[3]}}},I=function(n,r,t,i){var o=n.I,u=n.V,c=u.x,a=u.y,f=o.x,l=o.y,d=e().R,s=r?"marginLeft":"marginRight",v=r?"paddingLeft":"paddingRight",p=d[s],h=d.marginBottom,w=d[v],g=d.paddingBottom;i.width="calc(100% + "+(l+-1*p)+"px)",i[s]=-l+p,i.marginBottom=-f+h,t&&(i[v]=w+(a?l:0),i.paddingBottom=g+(c?f:0))},W=y?y.M(m,w,a,f,e,F,I):[function(){return m},function(){return[xn]}],_=W[0],N=W[1];return function(n,r,i){var f,s=n.pr,p=n.Or,h=n._r,y=n.yr,m=n.hr,O=n.wr,C=e(),R=C.gr,H=C.br,W=r("showNativeOverlaidScrollbars"),Y=W[0],V=W[1],X=r("overflow"),U=X[0],K=X[1],$=Y&&b.x&&b.y,q=!l&&!w&&(s||h||p||V||m),J=gt(U.x),Z=gt(U.y),G=J||Z,Q=L(i),nn=P(i),rn=M(i),tn=B(i);if(V&&g&&d(cr,rr,!$),q&&(f=F($),k(f,R)),s||y||h||O||V){G&&d(ar,nr,!1);var en=N($,H,f),on=en[0],un=en[1],cn=Q=S(i),an=cn[0],fn=cn[1],ln=nn=E(i),dn=ln[0],sn=ln[1],vn=Tn(a),pn=dn,hn=vn;on(),(sn||fn||V)&&un&&!$&&_(un,dn,an,H)&&(hn=Tn(a),pn=zn(a));var wn={w:lt(ft(dn.w,pn.w)+an.w),h:lt(ft(dn.h,pn.h)+an.h)},gn={w:lt(x?v.innerWidth:hn.w+lt(vn.w-dn.w)+an.w),h:lt(x?v.innerHeight:hn.h+lt(vn.h-dn.h)+an.h)};tn=D(gn),rn=A(function(n,r){var t=window.devicePixelRatio%1!=0?1:0,e={w:lt(n.w-r.w),h:lt(n.h-r.h)};return{w:e.w>t?e.w:0,h:e.h>t?e.h:0}}(wn,gn),i)}var bn=tn,yn=bn[0],mn=bn[1],xn=rn,On=xn[0],Sn=xn[1],Ln=nn,Cn=Ln[0],En=Ln[1],Pn=Q,Rn=Pn[0],An=Pn[1],Mn={x:On.w>0,y:On.h>0},Hn=J&&Z&&(Mn.x||Mn.y)||J&&Mn.x&&!Mn.y||Z&&Mn.y&&!Mn.x;if(y||O||An||En||mn||Sn||K||V||q){var Dn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Bn=function(n,r,t,e){var i=function(n,r){var t=gt(n),e=r&&t&&n.replace(dt+"-","")||"";return[r&&!t?n:"",gt(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,F(n,e)}($,Mn,U,Dn),jn=_(Bn,Cn,Rn,H);l||I(Bn,H,jn,Dn),q&&k(Bn,R),l?(T(u,Gn,Dn.overflowX),T(u,Qn,Dn.overflowY)):t(a,Dn)}z(u,Zn,nr,Hn),wt(c,ar,Hn),!l&&wt(a,ar,G);var kn=j(F($).Cr),Fn=kn[0],In=kn[1];return o({Cr:Fn,Er:{x:yn.w,y:yn.h},Ar:{x:On.w,y:On.h},Pr:Mn}),{zr:In,Tr:mn,Lr:Sn}}},yt=function(n,t,e){var i={},o=t||{};return r(R(n).concat(R(o)),(function(r){var t=n[r],u=o[r];i[r]=!!(e||t||u)})),i},mt=3333333,xt=function(n){return n&&(n.height||n.width)},Ot=function(n,r,t){var e=t||{},o=e.Hr,u=void 0!==o&&o,c=e.Dr,a=void 0!==c&&c,f=Dr()[Nr],l=Gr().B,d=Z('
')[0],s=d.firstChild,v=Pn.bind(0,n),h=i({o:void 0,g:!0,u:function(n,r){return!(!n||!xt(n)&&xt(r))}}),b=h[0],y=function(n){var t=w(n)&&n.length>0&&g(n[0]),e=!t&&p(n[0]),i=!1,o=!1,c=!0;if(t){var a=b(n.pop().contentRect),f=a[0],s=a[2],v=xt(f);o=!xt(s)&&v,c=!(i=!s||!v)}else e?c=n[1]:o=!0===n;if(u&&c){var h=e?n[0]:Pn(d);j(d,h?l.n?-mt:l.i?0:mt:mt),k(d,mt)}i||r({pr:!e,Mr:e?n:void 0,Dr:!!o})},m=[],x=!!a&&y;return[function(){E(m),q(d)},function(){if(cn){var r=new cn(y);r.observe(s),S(m,(function(){r.disconnect()}))}else if(f){var t=f.P(s,y,a),e=t[0],o=t[1];x=e,S(m,o)}if(u){var c=i({o:!v()},v)[0];S(m,In(d,"scroll",(function(n){var r=c(),t=r[0];r[1]&&(pn(s,"ltr rtl"),hn(s,t?"rtl":"ltr"),y(r)),Wn(n)})))}x&&(hn(d,lr),S(m,In(d,"animationstart",x,{A:!!cn}))),U(n,d)}]},St=function(n,r){var t,e=J(hr),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)};return[function(){E(o),q(e)},function(){if(un)(t=new un((function(n){return a(n)}),{root:n})).observe(e),S(o,(function(){t.disconnect()}));else{var r=function(){var n=Hn(e);c(n)},i=Ot(e,r),u=i[0],f=i[1];S(o,u),f(),r()}U(n,e)},function(){if(t)return a(t.takeRecords(),!0)}]},Lt=function(n,t,e,i){var o=!1,u=i||{},c=u.Rr,a=u.Ir,f=u.Vr,l=u.jr,d=u.kr,s=u.Br,p=On((function(){o&&e(!0)}),{p:33,_:99}),h=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):I(e,n));o&&o.length&&i&&v(i)&&S(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=In(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,p,f),w=h[0],g=h[1],b=a||[],y=(c||[]).concat(b),m=function(o,u){var c=d||xn,a=s||xn,f=[],p=[],h=!1,w=!1,y=!1;return r(o,(function(r){var e=r.attributeName,o=r.target,u=r.type,d=r.oldValue,s=r.addedNodes,g="attributes"===u,m="childList"===u,x=n===o,L=g&&v(e)?T(o,e):0,C=0!==L&&d!==L,E=O(b,e)>-1&&C;if(t&&!x){var P=!g,R=g&&E,A=R&&l&&W(o,l),M=(A?!c(o,e,d,L):P||R)&&!a(r,!!A,n,i);S(p,s),w=w||M,y=y||m}!t&&x&&C&&!c(o,e,d,L)&&(S(f,e),h=h||E)})),y&&!C(p)&&g((function(n){return p.reduce((function(r,t){return S(r,I(n,t)),W(t,n)?S(r,t):r}),[])})),t?(!u&&w&&e(!1),[!1]):!C(f)||h?(!u&&e(f,h),[f,h]):void 0},x=new on((function(n){return m(n)}));return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(w(),x.disconnect(),o=!1)},function(){if(o){p.S();var n=x.takeRecords();return!C(n)&&m(n,!0)}}]},Ct="["+Zn+"]",Et="."+ir,Pt=["tabindex"],Rt=["wrap","cols","rows"],At=["id","class","style","open"],Mt=function(n,t,e){var o,u,c,a=t[1],f=n.K,l=n.rr,d=n.er,p=n.lr,g=n.$,b=n.sr,y=n.dr,m=Gr().F,x=i({u:gn,o:{w:0,h:0}},(function(){var n=b(ar,nr),r=b(or,""),t=r&&j(l),e=r&&k(l);y(ar,nr),y(or,""),y("",tr,!0);var i=zn(d),o=zn(l),u=Dn(l);return y(ar,nr,n),y(or,"",r),y("",tr),j(l,t),k(l,e),{w:o.w+i.w+u.w,h:o.h+i.h+u.h}})),L=x[0],C=p?Rt:At.concat(Rt),E=On(e,{p:function(){return o},_:function(){return u},m:function(n,r){var t=n[0],e=r[0];return[R(t).concat(R(e)).reduce((function(n,r){return n[r]=t[r]||e[r],n}),{})]}}),P=function(n){r(n||Pt,(function(n){if(O(Pt,n)>-1){var r=T(f,n);v(r)?T(l,n,r):B(l,n)}}))},M=function(n,r){var t=n[0],i={hr:n[1]};return a({gr:t}),!r&&e(i),i},H=function(n){var r=n.pr,t=n.Mr,i=n.Dr,o=!r||i?e:E,u=!1;if(t){var c=t[0];u=t[1],a({br:c})}o({pr:r,wr:u})},z=function(n,r){var t=L()[1],i={_r:t};return t&&!r&&(n?e:E)(i),i},D=function(n,r,t){var e={Or:r};return r?!t&&E(e):g||P(n),e},F=d||!m?St(f,M):[xn,xn,xn],I=F[0],W=F[1],_=F[2],N=g?[xn,xn]:Ot(f,H,{Dr:!0,Hr:!0}),X=N[0],U=N[1],K=Lt(f,!1,D,{Ir:At,Rr:At.concat(Pt)}),$=K[0],q=K[1],J=g&&cn&&new cn(H.bind(0,{pr:!0}));return J&&J.observe(f),P(),[function(){I(),X(),c&&c[0](),J&&J.disconnect(),$()},function(){U(),W()},function(){var n={},r=q(),t=_(),e=c&&c[1]();return r&&A(n,D.apply(0,S(r,!0))),t&&A(n,M.apply(0,S(t,!0))),e&&A(n,z.apply(0,S(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],p=n("updating.debounce"),b=p[0],y=p[1],m=function(n){return h(r)&&r(n)};if((v||i)&&(c&&(c[1](),c[0]()),c=Lt(d||l,!0,z,{Ir:C.concat(e||[]),Rr:C.concat(e||[]),Vr:f,jr:Ct,Br:function(n,r){var t=n.target,e=n.attributeName;return!(r||!e||g)&&V(t,Ct,Et)||!!Y(t,"."+wr)||!!m(n)}})),y)if(E.S(),w(b)){var x=b[0],O=b[1];o=!!s(x)&&x,u=!!s(O)&&O}else s(b)?(o=b,u=!1):(o=!1,u=!1)}]},Ht={x:0,y:0},Tt={ar:{t:0,r:0,b:0,l:0},mr:!1,R:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Er:Ht,Ar:Ht,Cr:{x:"hidden",y:"hidden"},Pr:{x:!1,y:!1},gr:!1,br:!1},zt=function(n,t){var e=Un(t,{}),i=Kn(Tt),o=Vn(),u=o[0],c=o[1],a=o[2],f=i[0],l=ut(n),d=l[0],s=l[1],v=l[2],p=function(n,t){var e=n.rr,i=n.dr,o=Gr(),u=o.L,c=o.H,a=o.F,f=!u&&(c.x||c.y),l=[ct(n,t),at(n,t),bt(n,t)];return function(n,t,o){var u=yt(A({pr:!1,yr:!1,wr:!1,hr:!1,Tr:!1,Lr:!1,zr:!1,Or:!1,_r:!1},t),{},o),c=f||!a,d=c&&j(e),s=c&&k(e);i("",tr,!0);var v=u;return r(l,(function(r){v=yt(v,r(v,n,!!o)||{},o)})),j(e,d),k(e,s),i("",tr),v}}(d,i),h=function(n,r,t){var e=R(n).some((function(r){return n[r]}));(e||!M(r)||t)&&a("u",[n,r,t])},w=Mt(d,i,(function(n){h(p(e,n),{},!1)})),g=w[0],b=w[1],y=w[2],m=w[3],x=f.bind(0);return x.Fr=function(n){u("u",n)},x.qr=function(){b(),s()},x.Ur=d,[function(n,r){var e=Un(t,n,r);m(e),h(p(e,y(),r),n,!!r)},x,function(){c(),g(),v()}]},Dt=Math.round,Bt=function(n){return{x:n.clientX,y:n.clientY}},jt=function(n,r){return In(n,"mousedown",In.bind(0,r,"click",Wn,{A:!0,O:!0}),{O:!0})},kt=function(n,r,t,e,i,o){var u=Gr().B,c=t.Nr,a=t.Yr,f=t.Wr,l="scroll"+(o?"Left":"Top"),d=o?"x":"y",s=o?"w":"h",v=function(n,r,t){return function(v){var p=i().Ar,h=(Bt(v)[d]-r)*t/(Hn(a)[s]-Hn(c)[s])*p[d],w=Pn(f)&&o?u.n||u.i?1:-1:1;e[l]=n+h*w}};return In(c,"pointerdown",(function(t){if(function(n,r,t){var e=r.scrollbars,i=n.button,o=n.isPrimary,u=n.pointerType,c=e.pointers;return 0===i&&o&&e["dragScroll"]&&(c||[]).includes(u)}(t,n)){var i=In(r,"selectstart",(function(n){return function(n){return n.preventDefault()}(n)}),{C:!1}),o=In(c,"pointermove",v(e[l]||0,Bt(t)[d],1/function(n){var r=Bn(n),t=r.width,e=r.height,i=Hn(n),o=i.w,u=i.h;return{x:Dt(t)/o||1,y:Dt(e)/u||1}}(e)[d]));In(c,"pointerup",(function(n){i(),o(),c.releasePointerCapture(n.pointerId)}),{A:!0}),c.setPointerCapture(t.pointerId)}}))},Ft=Math.min,It=Math.max,Wt=Math.abs,_t=Math.round,Nt=function(n,r,t,e){if(e){var i=t?"x":"y",o=e.Ar,u=e.Er[i],c=o[i];return It(0,Ft(1,u/(u+c)))}var a=t?"w":"h",f=Hn(n)[a],l=Hn(r)[a];return It(0,Ft(1,f/l))},Yt=function(n,e,i){var o=(0,Gr().U)().scrollbarsSlot,u=e.ur,c=e.J,a=e.K,f=e.rr,l=e.cr,d=e.tr,s=(l?{}:n).scrollbarsSlot,v=rt([c,a,f],(function(){return a}),o,s),h=function(n,t,e){var i=e?hn:pn;r(n,(function(n){i(n.Wr,t)}))},w=function(n,e){r(n,(function(n){var r=e(n);t(r[0],r[1])}))},g=function(n,r,t){w(n,(function(n){var e,i=n.Nr,o=n.Yr;return[i,(e={},e[t?"width":"height"]=(100*Nt(i,o,t,r)).toFixed(3)+"%",e)]}))},b=function(n,r,t){var e=t?"X":"Y";w(n,(function(n){var i=n.Nr,o=n.Yr,u=n.Wr,c=function(n,r,t,e,i,o){var u=Gr().B,c=o?"x":"y",a=o?"Left":"Top",f=e.Ar,l=_t(f[c]),d=Wt(t["scroll"+a]),s=o&&i,v=u.i?d:l-d,p=Ft(1,(s?v:d)/l),h=Nt(n,r,o);return 1/h*(1-h)*p}(i,o,d,r,Pn(u),t);return[i,{transform:c==c?"translate"+e+"("+(100*c).toFixed(3)+"%)":""}]}))},y=[],m=[],x=[],O=function(n,r,t){var e=p(t),i=!e||!t;(!e||t)&&h(m,n,r),i&&h(x,n,r)},L=function(n){var r=n?br:yr,t=n?m:x,e=C(t)?Lr:"",o=J(wr+" "+r+" "+e),c=J(mr),a=J(xr),f={Wr:o,Yr:c,Nr:a};return U(o,c),U(c,a),S(t,f),S(y,[q.bind(0,o),i(f,O,u,d,n)]),f},P=L.bind(0,!0),R=L.bind(0,!1);return P(),R(),[{Gr:function(n){g(m,n,!0),g(x,n)},Xr:function(n){b(m,n,!0),b(x,n)},Zr:O,$r:{Jr:m,Kr:P,Qr:w.bind(0,m)},ra:{Jr:x,Kr:R,Qr:w.bind(0,x)}},function(){U(v,m[0].Wr),U(v,x[0].Wr),ln((function(){O(Lr)}),300)},E.bind(0,y)]},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)}]},Xt=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(),p=v[0],h=v[1],w=Vt(100),g=w[0],b=w[1],y=Vt(100),m=y[0],x=y[1],O=Vt((function(){return a})),S=O[0],L=O[1],C=Yt(n,t.Ur,function(n,r){return function(t,e,i,o,u){var c=t.Wr;return E.bind(0,[In(c,"pointerenter",(function(){e(Cr,!0)})),In(c,"pointerleave pointercancel",(function(){e(Cr)})),jt(c,i),kt(n,i,t,o,r,u)])}}(r,t)),P=C[0],R=C[1],A=C[2],M=t.Ur,H=M.K,T=M.rr,z=M.tr,D=M.ir,B=M.$,F=M.Z,I=P.$r,W=P.ra,_=P.Zr,Y=P.Gr,V=P.Xr,X=I.Qr,U=W.Qr,K=function(n){var r=n.Wr,t=B&&!F&&N(r)===T&&r;return[t,{transform:t?"translate("+j(z)+"px, "+k(z)+"px)":""}]},$=function(n,r){if(L(),n)_(Pr);else{var t=function(){return _(Pr,!0)};a>0&&!r?S(t):t()}},q=function(){(u=i)&&$(!0)},J=[b,L,x,h,s,A,In(H,"pointerover",q,{A:!0}),In(H,"pointerenter",q),In(H,"pointerleave",(function(){u=!1,i&&$(!1)})),In(H,"pointermove",(function(){e&&d((function(){b(),$(!0),m((function(){e&&$(!1)}))}))})),In(D,"scroll",(function(){p((function(){V(t()),o&&$(!0),g((function(){o&&!u&&$(!1)}))})),B&&X(K),B&&U(K)}))],Z=f.bind(0);return Z.Ur=P,Z.qr=R,[function(n,u,f){var l=f.Tr,d=f.Lr,s=f.zr,v=f.wr,p=Un(r,n,u),h=t(),w=h.Ar,g=h.Cr,b=h.br,y=p("scrollbars.theme"),m=y[0],x=y[1],O=p("scrollbars.visibility"),S=O[0],L=O[1],C=p("scrollbars.autoHide"),E=C[0],P=C[1],R=p("scrollbars.autoHideDelay")[0],A=p("scrollbars.dragScroll"),M=A[0],H=A[1],T=p("scrollbars.clickScroll"),z=T[0],D=T[1],B=l||d||v||u,j=s||L||u,k=function(n,r){var t="visible"===S||"auto"===S&&"scroll"===n;return _(Or,t,r),t};if(a=R,x&&(_(c),_(m,!0),c=m),P&&(e="move"===E,i="leave"===E,$(!(o="never"!==E),!0)),H&&_(Ar,M),D&&_(Rr,z),j){var I=k(g.x,!0),W=k(g.y,!1);_(Sr,!(I&&W))}B&&(Y(h),V(h),_(Er,!w.x,!0),_(Er,!w.y,!1),_(gr,b&&!F))},Z,E.bind(0,J)]},Ut=new Set,Kt=new WeakMap,$t=function n(t,e,i){var o=!1,u=Gr(),c=u.Y,a=u.q,f=Dr(),l=m(t),d=l?t:t.target,s=function(n){return Kt.get(n)}(d);if(s)return s;var v=f[Ir],p=function(n){var r=n||{},t=v&&v.P;return t?t(r,!0):r},w=A({},c(),p(e)),g=Vn(i),b=g[0],y=g[1],x=g[2],O=zt(t,w),S=O[0],L=O[1],C=O[2],E=Xt(t,w,L),P=E[0],H=E[1],T=E[2],z=function(n,r){S(n,!!r)},D=a(z.bind(0,{},!0)),B=function(n){!function(n){Kt.delete(n),Ut.delete(n)}(d),D(),T(),C(),o=!0,x("destroyed",[j,!!n]),y()},j={options:function(n){if(n){var r=Tr(w,p(n));M(r)||(A(w,r),z(r))}return A({},w)},on:b,off:function(n,r){n&&r&&y(n,r)},state:function(){var n=L(),r=n.Er,t=n.Ar,e=n.Cr,i=n.Pr,u=n.ar,c=n.mr,a=n.br;return A({},{overflowEdge:r,overflowAmount:t,overflowStyle:e,hasOverflow:i,padding:u,paddingAbsolute:c,directionRTL:a,destroyed:o})},elements:function(){var n=L.Ur,r=n.J,t=n.K,e=n.ar,i=n.rr,o=n.er,u=n.tr,c=n.ir,a=H.Ur,f=a.$r,l=a.ra,d=function(n){var r=n.Nr,t=n.Yr;return{scrollbar:n.Wr,track:t,handle:r}},s=function(n){var r=n.Jr,t=n.Kr,e=d(r[0]);return A({},e,{clone:function(){var n=d(t());return P({},!0,{}),n}})};return A({},{target:r,host:t,padding:e||i,viewport:i,content:o||i,scrollOffsetElement:u,scrollEventElement:c,scrollbarHorizontal:s(f),scrollbarVertical:s(l)})},update:function(n){return z({},n),j},destroy:B.bind(0)};return L.Fr((function(n,r,t){P(r,t,n)})),r(R(f),(function(r){var t=f[r];h(t)&&t(n,j)})),tt(!l&&t.cancel,L.Ur)?(B(!0),j):(L.qr(),H.qr(),function(n,r){Kt.set(n,r),Ut.add(n)}(d,j),x("initialized",[j]),L.Fr((function(n,r,t){var e=n.pr,i=n.wr,o=n.hr,u=n.Tr,c=n.Lr,a=n.zr,f=n._r,l=n.Or;x("updated",[j,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowEdgeChanged:u,overflowAmountChanged:c,overflowStyleChanged:a,contentMutation:f,hostMutation:l},changedOptions:r,force:t}])})),j.update(!0))};$t.plugin=function(n){r(w(n)?n:[n],(function(n){var r=R(n)[0];zr[r]=n[r]}))},$t.env=function(){var n=Gr(),r=n.k,t=n.H,e=n.L,i=n.B,o=n.F,u=n.D,c=n.G,a=n.X,f=n.U,l=n.N,d=n.Y,s=n.W;return A({},{scrollbarsSize:r,scrollbarsOverlaid:t,scrollbarsHiding:e,rtlScrollBehavior:i,flexboxGlue:o,cssCustomProperties:u,staticDefaultInitialization:c,staticDefaultOptions:a,getDefaultInitialization:f,setDefaultInitialization:l,getDefaultOptions:d,setDefaultOptions:s})},n.OverlayScrollbars=$t,n.scrollbarsHidingPlugin=$r,n.sizeObserverPlugin=Yr,Object.defineProperty(n,"v",{value:!0})})); \ No newline at end of file +!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!(!(g(n)||!h(n)&&t)||r>0&&w(n)&&!(r-1 in n))},y=function(n){if(!n||!w(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)},m=function(n){var r=HTMLElement;return!!n&&(r?n instanceof r:n.nodeType===o)},x=function(n){var r=Element;return!!n&&(r?n instanceof r:n.nodeType===o)},O=function(n,r,t){return n.indexOf(r,t)},S=function(n,r,t){return t||v(r)||!b(r)?n.push(r):Array.prototype.push.apply(n,r),n},L=function(n){var t=Array.from,e=[];return t&&n?t(n):(n instanceof Set?n.forEach((function(n){S(e,n)})):r(n,(function(n){S(e,n)})),e)},C=function(n){return!!n&&0===n.length},E=function(n,t,e){r(n,(function(n){return n&&n.apply(void 0,t||[])})),!e&&(n.length=0)},P=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},R=function(n){return n?Object.keys(n):[]},A=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(R(e),(function(r){var i=e[r];if(t===i)return!0;var o=g(i);if(i&&(y(i)||o)){var u=t[r],c=u;o&&!g(u)?c=[]:o||y(u)||(c={}),t[r]=n(c,i)}else t[r]=i}))})),t},M=function(n){for(var r in n)return!1;return!0},H=function(n,r,t,e){if(f(e))return t?t[n]:r;t&&!l(e)&&!1!==e&&(t[n]=e)},T=function(n,r,t){if(f(t))return n?n.getAttribute(r):null;n&&n.setAttribute(r,t)},z=function(n,r,t,e){if(t){var i=T(n,r)||"",o=new Set(i.split(" "));o[e?"add":"delete"](t),T(n,r,L(o).join(" ").trim())}},D=function(n,r,t){var e=T(n,r)||"";return new Set(e.split(" ")).has(t)},B=function(n,r){n&&n.removeAttribute(r)},j=function(n,r){return H("scrollLeft",0,n,r)},k=function(n,r){return H("scrollTop",0,n,r)},F=Element.prototype,I=function(n,r){var t=[],e=r?x(r)?r:null:document;return e?S(t,e.querySelectorAll(n)):t},W=function(n,r){return!!x(n)&&(F.matches||F.msMatchesSelector).call(n,r)},_=function(n){return n?L(n.childNodes):[]},N=function(n){return n?n.parentElement:null},Y=function(n,r){if(x(n)){var t=F.closest;if(t)return t.call(n,r);do{if(W(n,r))return n;n=N(n)}while(n)}return null},V=function(n,r,t){var e=n&&Y(n,r),i=n&&function(n,r){var t=r?x(r)?r:null:document;return t?t.querySelector(n):null}(t,e),o=Y(i,r)===e;return!(!e||!i)&&(e===n||i===n||o&&Y(Y(n,t),r)!==e)},X=function(n,t,e){if(e&&n){var i,o=t;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)}},U=function(n,r){X(n,null,r)},K=function(n,r){X(N(n),n,r)},$=function(n,r){X(N(n),n&&n.nextSibling,r)},q=function n(t){if(b(t))r(L(t),(function(r){return n(r)}));else if(t){var e=N(t);e&&e.removeChild(t)}},J=function(n){var r=document.createElement("div");return n&&T(r,"class",n),r},Z=function(n){var t=J();return t.innerHTML=n.trim(),r(_(t),(function(n){return q(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 P(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},pn=function(n,r){vn(n,r,(function(n,r){return n.remove(r)}))},hn=function(n,r){return vn(n,r,(function(n,r){return n.add(r)})),pn.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},wn=function(n,r){return gn(n,r,["w","h"])},bn=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(){},On=function(n,r){var t,e,i,o=xn,u=r||{},c=u.p,a=u._,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=L(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,w=r>0?dn:an,b=d(n),y=b||n,m=l.bind(0,y);o();var x=g(m,r);o=function(){return w(x)},p&&!t&&(t=ln(v,f)),e=i=y}else l(n)};return p.S=v,p},Sn={opacity:1,zindex:1},Ln=function(n,r){var t=r?parseFloat(n):parseInt(n,10);return t==t?t:0},Cn=function(n,r,t){return null!=r?r[t]||r.getPropertyValue(t):n.style[t]},En=function(n,r,t){try{var e=n.style;f(e[r])?e.setProperty(r,t):e[r]=function(n,r){return!Sn[n.toLowerCase()]&&s(r)?r+"px":r}(r,t)}catch(c){}},Pn=function(n){return"rtl"===t(n,"direction")},Rn=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:Ln(l[u]),r:Ln(l[c]),b:Ln(l[a]),l:Ln(l[f])}},An=Math.round,Mn={w:0,h:0},Hn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:Mn},Tn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:Mn},zn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:Mn},Dn=function(n){var r=parseFloat(t(n,"height"))||0,e=parseFloat(t(n,"width"))||0;return{w:e-An(e),h:r-An(r)}},Bn=function(n){return n.getBoundingClientRect()},jn=function(){if(f(e)){e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(n){}}return e},kn=function(n){return n.split(" ")},Fn=function(n,t,e,i){r(kn(t),(function(r){n.removeEventListener(r,e,i)}))},In=function(n,t,e,i){var o,u=jn(),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(kn(t),(function(r){var t=f?function(i){n.removeEventListener(r,t,a),e&&e(i)}:e;S(l,Fn.bind(null,n,r,t,a)),n.addEventListener(r,t,d)})),E.bind(0,l)},Wn=function(n){return n.stopPropagation()},_n={x:0,y:0},Nn=function(n){var r=n?Bn(n):0;return r?{x:r.left+window.pageYOffset,y:r.top+window.pageXOffset}:_n},Yn=function(n,t){r(g(t)?t:[t],n)},Vn=function(n){var t=new Map,e=function(n,r){if(n){var e=t.get(n);Yn((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),Yn((function(n){n&&i.add(n)}),r),e.bind(0,n,r)};return r(R(n),(function(r){i(r,n[r])})),[i,e,function(n,e){var i=t.get(n);r(L(i),(function(n){e&&!C(e)?n.apply(0,e):n()}))}]},Xn=function(n,r){return n?r.split(".").reduce((function(n,r){return n&&P(n,r)?n[r]:void 0}),n):void 0},Un=function(n,r,t){return function(e){return[Xn(n,e),t||void 0!==Xn(r,e)]}},Kn=function(n){var r=n;return[function(){return r},function(n){r=A({},r,n)}]},$n="os-environment",qn=$n+"-flexbox-glue",Jn=qn+"-max",Zn="data-overlayscrollbars",Gn=Zn+"-overflow-x",Qn=Zn+"-overflow-y",nr="overflowVisible",rr="scrollbarHidden",tr="updating",er="os-padding",ir="os-viewport",or=ir+"-arrange",ur="os-content",cr=ir+"-scrollbar-hidden",ar="os-overflow-visible",fr="os-size-observer",lr=fr+"-appear",dr=fr+"-listener",sr=dr+"-scroll",vr=dr+"-item",pr=vr+"-final",hr="os-trinsic-observer",gr="os-scrollbar",wr=gr+"-rtl",br=gr+"-horizontal",yr=gr+"-vertical",mr=gr+"-track",xr=gr+"-handle",Or=gr+"-visible",Sr=gr+"-cornerless",Lr=gr+"-transitionless",Cr=gr+"-interaction",Er=gr+"-unusable",Pr=gr+"-auto-hidden",Rr=mr+"-interactive",Ar=xr+"-interactive",Mr=function(n){return JSON.stringify(n,(function(n,r){if(h(r))throw new Error;return r}))},Hr={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},Tr=function n(t,e){var i={};return r(R(e).concat(R(t)),(function(r){var o=t[r],u=e[r];if(w(o)&&w(u))A(i[r]={},n(o,u));else if(P(e,r)&&u!==o){var c=!0;if(g(o)||g(u))try{Mr(o)===Mr(u)&&(c=!1)}catch(l){}c&&(i[r]=u)}})),i},zr={},Dr=function(){return zr},Br={exports:{}};!function(n){function r(){return n.exports=r=Object.assign?Object.assign.bind():function(n){for(var r=1;r
');U(n,i),hn(n,sr);var o,u=i[0],c=u.lastChild,a=u.firstChild,f=null==a?void 0:a.firstChild,l=Hn(u),d=l,s=!1,v=function(){j(a,Wr),k(a,Wr),j(c,Wr),k(c,Wr)},p=function(n){o=0,s&&(l=d,r(!0===n))},h=function(n){d=Hn(u),s=!n||!wn(d,l),n?(Wn(n),s&&!o&&(an(o),o=fn(p))):p(!1===n),v()},g=S([],[In(a,_r,h),In(c,_r,h)]);return t(f,{width:Wr,height:Wr}),fn(v),[e?h.bind(0,!1):v,g]}},jr),Vr=0,Xr=Math.round,Ur=Math.abs,Kr="__osScrollbarsHidingPlugin",$r=((kr={})[Kr]={T:function(n){var r=n.L,t=n.H,e=!(n.D||r||!t.x&&!t.y)&&document.createElement("style");return e&&(T(e,"id",or+"-"+Vr),Vr++),e},M:function(n,e,i,o,u,c,a){return[function(r,e,c,a){if(n){var f=u().R,l=r.I,d=r.V,s=d.x,v=d.y,p=l.x,h=l.y,g=f[a?"paddingRight":"paddingLeft"],w=f.paddingTop,b=e.w+c.w,y=e.h+c.h,m={w:h&&v?h+b-g+"px":"",h:p&&s?p+y-w+"px":""};if(o){var x=o.sheet;if(x){var O=x.cssRules;if(O){O.length||x.insertRule("#"+T(o,"id")+" + ."+or+"::before {}",0);var S=O[0].style;S.width=m.w,S.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().R,v=d.V,p=v.x,h=v.y,g={},w=function(n){return r(n.split(" "),(function(n){g[n]=s[n]}))};p&&w("marginBottom paddingTop paddingBottom"),h&&w("marginLeft marginRight paddingLeft paddingRight");var b=t(i,R(g));return pn(i,or),e||(g.height=""),t(i,g),[function(){a(d,f,n,b),t(i,b),hn(i,or)},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=Ur(u.w),a=Ur(u.h),f={w:Ur(Xr(o.w/(n.w/100))),h:Ur(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=Ur(n),e=Ur(r);return!(t===e||t+1===e||t-1===e)}(f.w,f.h);if(d&&s&&l!==r&&l>0){var v=e(),p=v[0],h=v[1];A(t.k,p),h&&i()}n=o,r=l}}}},kr),qr=function(n,r,t,e){U(n,r);var i=Tn(r),o=Hn(r),u=Dn(t);return e&&q(r),{x:o.h-i.h+u.h,y:o.w-i.w+u.w}},Jr=function(n,r){var e="hidden";t(n,{overflowX:e,overflowY:e,direction:"rtl"}),j(n,0);var i=Nn(n),o=Nn(r);j(n,-999);var u=Nn(r);return{i:i.x===o.x,n:o.x!==u.x}},Zr=function(n,r){var t=hn(n,qn),e=Bn(n),i=Bn(r),o=mn(i,e,!0),u=hn(n,Jn),c=Bn(n),a=Bn(r),f=mn(a,c,!0);return t(),u(),o&&f},Gr=function(){return Fr||(Fr=function(){var n,e=document.body,o=Z('
')[0],c=o.firstChild,a=Vn(),f=a[0],l=a[2],d=i({o:qr(e,o,c),u:bn},qr.bind(0,e,o,c,!0)),s=d[0],v=(0,d[1])()[0],p=function(n){var e=!1,i=hn(n,cr);try{e="none"===t(n,function(n){var t=tn[n];if(P(tn,n))return t;var e=G(n),i=J().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),h={x:0===v.x,y:0===v.y},g={host:null,padding:!p,viewport:function(n){return p&&n===n.ownerDocument.body&&n},content:!1,scrollbarsSlot:!0,cancel:{nativeScrollbarsOverlaid:!0,body:null}},w=A({},Hr),b={k:v,H:h,L:p,D:"-1"===t(o,"zIndex"),B:Jr(o,c),F:Zr(o,c),q:function(n){return f("_",n)},U:A.bind(0,{},g),N:function(n){A(g,n)},Y:A.bind(0,{},w),W:function(n){A(w,n)},G:A({},g),X:A({},w)};return B(o,"style"),q(o),p||h.x&&h.y||window.addEventListener("resize",(function(){var r=Dr()[Kr];(n=n||r&&r.j())&&n(b,s,l.bind(0,"_"))})),b}()),Fr},Qr=function(n,r){return h(n)?n.apply(0,r):n},nt=function(n,r,t,e){var i=f(e)?t:e;return Qr(i,n)||r()},rt=function(n,r,t,e){var i=f(e)?t:e,o=Qr(i,n);return!!o&&(m(o)?o:r())},tt=function(n,r){var t=n||{},e=t.nativeScrollbarsOverlaid,i=t.body,o=r.Z,u=r.$,c=Gr(),a=c.U,d=c.H,s=a().cancel,v=s.nativeScrollbarsOverlaid,p=s.body,h=null!=e?e:v,g=f(i)?p:i,w=(d.x||d.y)&&h,b=o&&(l(g)?!u:g);return!!w||!!b},et=J.bind(0,""),it=function(n){U(N(n),_(n)),q(n)},ot=function(n,r){return T(n,Zn,r),B.bind(0,n,Zn)},ut=function(n){var r=Gr(),t=r.U,e=r.L,i=Dr()[Kr],o=i&&i.T,u=t(),c=u.host,a=u.viewport,f=u.padding,l=u.content,d=m(n),s=d?{}:n,v=s.host,p=s.padding,h=s.viewport,g=s.content,w=d?n:s.target,b=W(w,"textarea"),y=w.ownerDocument,x=w===y.body,L=y.defaultView,C=nt.bind(0,[w]),P=rt.bind(0,[w]),A=C(et,a,h),M=A===w,H=M&&x,T={J:w,K:b?C(et,c,v):w,rr:A,ar:!M&&P(et,f,p),er:!M&&P(et,l,g),nr:!M&&!e&&o&&o(r),tr:H?y.documentElement:A,ir:H?y:A,vr:L,ur:y,lr:b,Z:x,cr:d,$:M,sr:function(n,r){return M?D(A,Zn,r):function(n,r){return vn(n,r,(function(n,r){return n.contains(r)}))}(A,n)},dr:function(n,r,t){return M?z(A,Zn,r,t):(t?hn:pn)(A,n)}},j=R(T).reduce((function(n,r){var t=T[r];return S(n,!(!t||N(t))&&t)}),[]),k=function(n){return n?O(j,n)>-1:null},F=T.J,I=T.K,Y=T.ar,V=T.rr,X=T.er,J=T.nr,Z=[],G=b&&k(I),Q=b?F:_([X,V,Y,I,F].find((function(n){return!1===k(n)}))),nn=X||V;return[T,function(){var n=ot(I,M?"viewport":"host"),r=hn(Y,er),t=hn(V,!M&&ir),i=hn(X,ur),o=H?hn(N(w),cr):xn;G&&($(F,I),S(Z,(function(){$(I,F),q(I)}))),U(nn,Q),U(I,Y),U(Y||I,!M&&V),U(V,X),S(Z,(function(){o(),n(),B(V,Gn),B(V,Qn),k(X)&&it(X),k(V)&&it(V),k(Y)&&it(Y),r(),t(),i()})),e&&!M&&S(Z,pn.bind(0,V,cr)),J&&(K(V,J),S(Z,q.bind(0,J))),Q=0},E.bind(0,Z)]},ct=function(n,r){var e=n.er,i=r[0];return function(n){var r=Gr().F,o=i().gr,u=n.hr,c=(e||!r)&&u;return c&&t(e,{height:o?"":"100%"}),{pr:c,_r:c}}},at=function(n,r){var e=r[0],o=r[1],u=n.K,c=n.ar,a=n.rr,f=n.$,l=i({u:yn,o:Rn()},Rn.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],p=Gr(),h=p.L,g=p.F,w=e().br,b=n.pr,y=n._r,m=n.wr,x=r("paddingAbsolute"),O=x[0],S=x[1];if(b||v||!g&&y){var L=d(i);l=L[0],v=L[1]}var C=!f&&(S||m||v);if(C){var E=!O||!c&&!h,P=l.r+l.l,R=l.t+l.b,M={marginRight:E&&!w?-P:0,marginBottom:E?-R:0,marginLeft:E&&w?-P:0,top:E?-l.t:0,right:E?w?-l.r:"auto":0,left:E?w?"auto":-l.l:0,width:E?"calc(100% + "+P+"px)":""},H={paddingTop:E?l.t:0,paddingRight:E?l.r:0,paddingBottom:E?l.b:0,paddingLeft:E?l.l:0};t(c||a,M),t(a,H),o({ar:l,mr:!E,R:c?H:A({},M,H)})}return{yr:C}}},ft=Math.max,lt=ft.bind(0,0),dt="visible",st="hidden",vt=42,pt={u:wn,o:{w:0,h:0}},ht={u:bn,o:{x:st,y:st}},gt=function(n,r,t){return t?hn(n,r):pn(n,r)},wt=function(n){return 0===n.indexOf(dt)},bt=function(n,r){var e=r[0],o=r[1],u=n.K,c=n.ar,a=n.rr,f=n.nr,l=n.$,d=n.dr,s=n.Z,v=n.vr,p=Gr(),h=p.k,g=p.F,w=p.L,b=p.H,y=Dr()[Kr],m=!l&&!w&&(b.x||b.y),x=s&&l,O=i(pt,Dn.bind(0,a)),S=O[0],L=O[1],C=i(pt,zn.bind(0,a)),E=C[0],P=C[1],R=i(pt),A=R[0],M=R[1],H=i(pt),D=H[0],B=H[1],j=i(ht)[0],k=function(n,r){if(t(a,{height:""}),r){var i=e(),o=i.mr,c=i.ar,f=n.Sr,l=n.I,d=Dn(u),s=Tn(u),v="content-box"===t(a,"boxSizing"),p=o||v?c.b+c.t:0,h=!(b.x&&v);t(a,{height:s.h+d.h+(f.x&&h?l.x:0)-p})}},F=function(n,r){var e=w||n?0:vt,i=function(n,i,o){var u=t(a,n),c="scroll"===(r?r[n]:u);return[u,c,c&&!w?i?e:o:0,i&&!!e]},o=i("overflowX",b.x,h.x),u=o[0],c=o[1],f=o[2],l=o[3],d=i("overflowY",b.y,h.y);return{Cr:{x:u,y:d[0]},Sr:{x:c,y:d[1]},I:{x:f,y:d[2]},V:{x:l,y:d[3]}}},I=function(n,r,t,i){var o=n.I,u=n.V,c=u.x,a=u.y,f=o.x,l=o.y,d=e().R,s=r?"marginLeft":"marginRight",v=r?"paddingLeft":"paddingRight",p=d[s],h=d.marginBottom,g=d[v],w=d.paddingBottom;i.width="calc(100% + "+(l+-1*p)+"px)",i[s]=-l+p,i.marginBottom=-f+h,t&&(i[v]=g+(a?l:0),i.paddingBottom=w+(c?f:0))},W=y?y.M(m,g,a,f,e,F,I):[function(){return m},function(){return[xn]}],_=W[0],N=W[1];return function(n,r,i){var f,s=n.pr,p=n.Or,h=n._r,y=n.yr,m=n.hr,O=n.wr,C=e(),R=C.gr,H=C.br,W=r("showNativeOverlaidScrollbars"),Y=W[0],V=W[1],X=r("overflow"),U=X[0],K=X[1],$=Y&&b.x&&b.y,q=!l&&!g&&(s||h||p||V||m),J=wt(U.x),Z=wt(U.y),G=J||Z,Q=L(i),nn=P(i),rn=M(i),tn=B(i);if(V&&w&&d(cr,rr,!$),q&&(f=F($),k(f,R)),s||y||h||O||V){G&&d(ar,nr,!1);var en=N($,H,f),on=en[0],un=en[1],cn=Q=S(i),an=cn[0],fn=cn[1],ln=nn=E(i),dn=ln[0],sn=ln[1],vn=Tn(a),pn=dn,hn=vn;on(),(sn||fn||V)&&un&&!$&&_(un,dn,an,H)&&(hn=Tn(a),pn=zn(a));var gn={w:lt(ft(dn.w,pn.w)+an.w),h:lt(ft(dn.h,pn.h)+an.h)},wn={w:lt(x?v.innerWidth:hn.w+lt(vn.w-dn.w)+an.w),h:lt(x?v.innerHeight:hn.h+lt(vn.h-dn.h)+an.h)};tn=D(wn),rn=A(function(n,r){var t=window.devicePixelRatio%1!=0?1:0,e={w:lt(n.w-r.w),h:lt(n.h-r.h)};return{w:e.w>t?e.w:0,h:e.h>t?e.h:0}}(gn,wn),i)}var bn=tn,yn=bn[0],mn=bn[1],xn=rn,On=xn[0],Sn=xn[1],Ln=nn,Cn=Ln[0],En=Ln[1],Pn=Q,Rn=Pn[0],An=Pn[1],Mn={x:On.w>0,y:On.h>0},Hn=J&&Z&&(Mn.x||Mn.y)||J&&Mn.x&&!Mn.y||Z&&Mn.y&&!Mn.x;if(y||O||An||En||mn||Sn||K||V||q){var Dn={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Bn=function(n,r,t,e){var i=function(n,r){var t=wt(n),e=r&&t&&n.replace(dt+"-","")||"";return[r&&!t?n:"",wt(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,F(n,e)}($,Mn,U,Dn),jn=_(Bn,Cn,Rn,H);l||I(Bn,H,jn,Dn),q&&k(Bn,R),l?(T(u,Gn,Dn.overflowX),T(u,Qn,Dn.overflowY)):t(a,Dn)}z(u,Zn,nr,Hn),gt(c,ar,Hn),!l&>(a,ar,G);var kn=j(F($).Cr),Fn=kn[0],In=kn[1];return o({Cr:Fn,Er:{x:yn.w,y:yn.h},Ar:{x:On.w,y:On.h},Pr:Mn}),{zr:In,Tr:mn,Lr:Sn}}},yt=function(n,t,e){var i={},o=t||{};return r(R(n).concat(R(o)),(function(r){var t=n[r],u=o[r];i[r]=!!(e||t||u)})),i},mt=3333333,xt=function(n){return n&&(n.height||n.width)},Ot=function(n,r,t){var e=t||{},o=e.Hr,u=void 0!==o&&o,c=e.Dr,a=void 0!==c&&c,f=Dr()[Nr],l=Gr().B,d=Z('
')[0],s=d.firstChild,v=Pn.bind(0,n),h=i({o:void 0,g:!0,u:function(n,r){return!(!n||!xt(n)&&xt(r))}}),b=h[0],y=function(n){var t=g(n)&&n.length>0&&w(n[0]),e=!t&&p(n[0]),i=!1,o=!1,c=!0;if(t){var a=b(n.pop().contentRect),f=a[0],s=a[2],v=xt(f);o=!xt(s)&&v,c=!(i=!s||!v)}else e?c=n[1]:o=!0===n;if(u&&c){var h=e?n[0]:Pn(d);j(d,h?l.n?-mt:l.i?0:mt:mt),k(d,mt)}i||r({pr:!e,Mr:e?n:void 0,Dr:!!o})},m=[],x=!!a&&y;return[function(){E(m),q(d)},function(){if(cn){var r=new cn(y);r.observe(s),S(m,(function(){r.disconnect()}))}else if(f){var t=f.P(s,y,a),e=t[0],o=t[1];x=e,S(m,o)}if(u){var c=i({o:!v()},v)[0];S(m,In(d,"scroll",(function(n){var r=c(),t=r[0];r[1]&&(pn(s,"ltr rtl"),hn(s,t?"rtl":"ltr"),y(r)),Wn(n)})))}x&&(hn(d,lr),S(m,In(d,"animationstart",x,{A:!!cn}))),U(n,d)}]},St=function(n,r){var t,e=J(hr),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)};return[function(){E(o),q(e)},function(){if(un)(t=new un((function(n){return a(n)}),{root:n})).observe(e),S(o,(function(){t.disconnect()}));else{var r=function(){var n=Hn(e);c(n)},i=Ot(e,r),u=i[0],f=i[1];S(o,u),f(),r()}U(n,e)},function(){if(t)return a(t.takeRecords(),!0)}]},Lt=function(n,t,e,i){var o=!1,u=i||{},c=u.Rr,a=u.Ir,f=u.Vr,l=u.jr,d=u.kr,s=u.Br,p=On((function(){o&&e(!0)}),{p:33,_:99}),h=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):I(e,n));o&&o.length&&i&&v(i)&&S(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=In(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,p,f),g=h[0],w=h[1],b=a||[],y=(c||[]).concat(b),m=function(o,u){var c=d||xn,a=s||xn,f=[],p=[],h=!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,w="attributes"===u,m="childList"===u,x=n===o,L=w&&v(e)?T(o,e):0,C=0!==L&&d!==L,E=O(b,e)>-1&&C;if(t&&!x){var P=!w,R=w&&E,A=R&&l&&W(o,l),M=(A?!c(o,e,d,L):P||R)&&!a(r,!!A,n,i);S(p,s),g=g||M,y=y||m}!t&&x&&C&&!c(o,e,d,L)&&(S(f,e),h=h||E)})),y&&!C(p)&&w((function(n){return p.reduce((function(r,t){return S(r,I(n,t)),W(t,n)?S(r,t):r}),[])})),t?(!u&&g&&e(!1),[!1]):!C(f)||h?(!u&&e(f,h),[f,h]):void 0},x=new on((function(n){return m(n)}));return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:t,childList:t,characterData:t}),o=!0,[function(){o&&(g(),x.disconnect(),o=!1)},function(){if(o){p.S();var n=x.takeRecords();return!C(n)&&m(n,!0)}}]},Ct="["+Zn+"]",Et="."+ir,Pt=["tabindex"],Rt=["wrap","cols","rows"],At=["id","class","style","open"],Mt=function(n,t,e){var o,u,c,a=t[1],f=n.K,l=n.rr,d=n.er,p=n.lr,w=n.$,b=n.sr,y=n.dr,m=Gr().F,x=i({u:wn,o:{w:0,h:0}},(function(){var n=b(ar,nr),r=b(or,""),t=r&&j(l),e=r&&k(l);y(ar,nr),y(or,""),y("",tr,!0);var i=zn(d),o=zn(l),u=Dn(l);return y(ar,nr,n),y(or,"",r),y("",tr),j(l,t),k(l,e),{w:o.w+i.w+u.w,h:o.h+i.h+u.h}})),L=x[0],C=p?Rt:At.concat(Rt),E=On(e,{p:function(){return o},_:function(){return u},m:function(n,r){var t=n[0],e=r[0];return[R(t).concat(R(e)).reduce((function(n,r){return n[r]=t[r]||e[r],n}),{})]}}),P=function(n){r(n||Pt,(function(n){if(O(Pt,n)>-1){var r=T(f,n);v(r)?T(l,n,r):B(l,n)}}))},M=function(n,r){var t=n[0],i={hr:n[1]};return a({gr:t}),!r&&e(i),i},H=function(n){var r=n.pr,t=n.Mr,i=n.Dr,o=!r||i?e:E,u=!1;if(t){var c=t[0];u=t[1],a({br:c})}o({pr:r,wr:u})},z=function(n,r){var t=L()[1],i={_r:t};return t&&!r&&(n?e:E)(i),i},D=function(n,r,t){var e={Or:r};return r?!t&&E(e):w||P(n),e},F=d||!m?St(f,M):[xn,xn,xn],I=F[0],W=F[1],_=F[2],N=w?[xn,xn]:Ot(f,H,{Dr:!0,Hr:!0}),X=N[0],U=N[1],K=Lt(f,!1,D,{Ir:At,Rr:At.concat(Pt)}),$=K[0],q=K[1],J=w&&cn&&new cn(H.bind(0,{pr:!0}));return J&&J.observe(f),P(),[function(){I(),X(),c&&c[0](),J&&J.disconnect(),$()},function(){U(),W()},function(){var n={},r=q(),t=_(),e=c&&c[1]();return r&&A(n,D.apply(0,S(r,!0))),t&&A(n,M.apply(0,S(t,!0))),e&&A(n,z.apply(0,S(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],p=n("updating.debounce"),b=p[0],y=p[1],m=function(n){return h(r)&&r(n)};if((v||i)&&(c&&(c[1](),c[0]()),c=Lt(d||l,!0,z,{Ir:C.concat(e||[]),Rr:C.concat(e||[]),Vr:f,jr:Ct,Br:function(n,r){var t=n.target,e=n.attributeName;return!(r||!e||w)&&V(t,Ct,Et)||!!Y(t,"."+gr)||!!m(n)}})),y)if(E.S(),g(b)){var x=b[0],O=b[1];o=!!s(x)&&x,u=!!s(O)&&O}else s(b)?(o=b,u=!1):(o=!1,u=!1)}]},Ht={x:0,y:0},Tt={ar:{t:0,r:0,b:0,l:0},mr:!1,R:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Er:Ht,Ar:Ht,Cr:{x:"hidden",y:"hidden"},Pr:{x:!1,y:!1},gr:!1,br:!1},zt=function(n,t){var e=Un(t,{}),i=Kn(Tt),o=Vn(),u=o[0],c=o[1],a=o[2],f=i[0],l=ut(n),d=l[0],s=l[1],v=l[2],p=function(n,t){var e=n.rr,i=n.dr,o=Gr(),u=o.L,c=o.H,a=o.F,f=!u&&(c.x||c.y),l=[ct(n,t),at(n,t),bt(n,t)];return function(n,t,o){var u=yt(A({pr:!1,yr:!1,wr:!1,hr:!1,Tr:!1,Lr:!1,zr:!1,Or:!1,_r:!1},t),{},o),c=f||!a,d=c&&j(e),s=c&&k(e);i("",tr,!0);var v=u;return r(l,(function(r){v=yt(v,r(v,n,!!o)||{},o)})),j(e,d),k(e,s),i("",tr),v}}(d,i),h=function(n,r,t){var e=R(n).some((function(r){return n[r]}));(e||!M(r)||t)&&a("u",[n,r,t])},g=Mt(d,i,(function(n){h(p(e,n),{},!1)})),w=g[0],b=g[1],y=g[2],m=g[3],x=f.bind(0);return x.Fr=function(n){u("u",n)},x.qr=function(){b(),s()},x.Ur=d,[function(n,r){var e=Un(t,n,r);m(e),h(p(e,y(),r),n,!!r)},x,function(){c(),w(),v()}]},Dt=Math.round,Bt=function(n){return{x:n.clientX,y:n.clientY}},jt=function(n,r){return In(n,"mousedown",In.bind(0,r,"click",Wn,{A:!0,O:!0}),{O:!0})},kt=function(n,r,t,e,i,o){var u=Gr().B,c=t.Nr,a=t.Yr,f=t.Wr,l="scroll"+(o?"Left":"Top"),d=o?"x":"y",s=o?"w":"h",v=function(n,r,t){return function(v){var p=i().Ar,h=(Bt(v)[d]-r)*t/(Hn(a)[s]-Hn(c)[s])*p[d],g=Pn(f)&&o?u.n||u.i?1:-1:1;e[l]=n+h*g}};return In(c,"pointerdown",(function(t){if(function(n,r,t){var e=r.scrollbars,i=n.button,o=n.isPrimary,u=n.pointerType,c=e.pointers;return 0===i&&o&&e["dragScroll"]&&(c||[]).includes(u)}(t,n)){var i=In(r,"selectstart",(function(n){return function(n){return n.preventDefault()}(n)}),{C:!1}),o=In(c,"pointermove",v(e[l]||0,Bt(t)[d],1/function(n){var r=Bn(n),t=r.width,e=r.height,i=Hn(n),o=i.w,u=i.h;return{x:Dt(t)/o||1,y:Dt(e)/u||1}}(e)[d]));In(c,"pointerup",(function(n){i(),o(),c.releasePointerCapture(n.pointerId)}),{A:!0}),c.setPointerCapture(t.pointerId)}}))},Ft=Math.min,It=Math.max,Wt=Math.abs,_t=Math.round,Nt=function(n,r,t,e){if(e){var i=t?"x":"y",o=e.Ar,u=e.Er[i],c=o[i];return It(0,Ft(1,u/(u+c)))}var a=t?"w":"h",f=Hn(n)[a],l=Hn(r)[a];return It(0,Ft(1,f/l))},Yt=function(n,e,i){var o=(0,Gr().U)().scrollbarsSlot,u=e.ur,c=e.J,a=e.K,f=e.rr,l=e.cr,d=e.tr,s=(l?{}:n).scrollbarsSlot,v=rt([c,a,f],(function(){return a}),o,s),h=function(n,t,e){var i=e?hn:pn;r(n,(function(n){i(n.Wr,t)}))},g=function(n,e){r(n,(function(n){var r=e(n);t(r[0],r[1])}))},w=function(n,r,t){g(n,(function(n){var e,i=n.Nr,o=n.Yr;return[i,(e={},e[t?"width":"height"]=(100*Nt(i,o,t,r)).toFixed(3)+"%",e)]}))},b=function(n,r,t){var e=t?"X":"Y";g(n,(function(n){var i=n.Nr,o=n.Yr,u=n.Wr,c=function(n,r,t,e,i,o){var u=Gr().B,c=o?"x":"y",a=o?"Left":"Top",f=e.Ar,l=_t(f[c]),d=Wt(t["scroll"+a]),s=o&&i,v=u.i?d:l-d,p=Ft(1,(s?v:d)/l),h=Nt(n,r,o);return 1/h*(1-h)*p}(i,o,d,r,Pn(u),t);return[i,{transform:c==c?"translate"+e+"("+(100*c).toFixed(3)+"%)":""}]}))},y=[],m=[],x=[],O=function(n,r,t){var e=p(t),i=!e||!t;(!e||t)&&h(m,n,r),i&&h(x,n,r)},L=function(n){var r=n?br:yr,t=n?m:x,e=C(t)?Lr:"",o=J(gr+" "+r+" "+e),c=J(mr),a=J(xr),f={Wr:o,Yr:c,Nr:a};return U(o,c),U(c,a),S(t,f),S(y,[q.bind(0,o),i(f,O,u,d,n)]),f},P=L.bind(0,!0),R=L.bind(0,!1);return P(),R(),[{Gr:function(n){w(m,n,!0),w(x,n)},Xr:function(n){b(m,n,!0),b(x,n)},Zr:O,$r:{Jr:m,Kr:P,Qr:g.bind(0,m)},ra:{Jr:x,Kr:R,Qr:g.bind(0,x)}},function(){U(v,m[0].Wr),U(v,x[0].Wr),ln((function(){O(Lr)}),300)},E.bind(0,y)]},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)}]},Xt=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(),p=v[0],h=v[1],g=Vt(100),w=g[0],b=g[1],y=Vt(100),m=y[0],x=y[1],O=Vt((function(){return a})),S=O[0],L=O[1],C=Yt(n,t.Ur,function(n,r){return function(t,e,i,o,u){var c=t.Wr;return E.bind(0,[In(c,"pointerenter",(function(){e(Cr,!0)})),In(c,"pointerleave pointercancel",(function(){e(Cr)})),jt(c,i),kt(n,i,t,o,r,u)])}}(r,t)),P=C[0],R=C[1],A=C[2],M=t.Ur,H=M.K,T=M.rr,z=M.tr,D=M.ir,B=M.$,F=M.Z,I=P.$r,W=P.ra,_=P.Zr,Y=P.Gr,V=P.Xr,X=I.Qr,U=W.Qr,K=function(n){var r=n.Wr,t=B&&!F&&N(r)===T&&r;return[t,{transform:t?"translate("+j(z)+"px, "+k(z)+"px)":""}]},$=function(n,r){if(L(),n)_(Pr);else{var t=function(){return _(Pr,!0)};a>0&&!r?S(t):t()}},q=function(){(u=i)&&$(!0)},J=[b,L,x,h,s,A,In(H,"pointerover",q,{A:!0}),In(H,"pointerenter",q),In(H,"pointerleave",(function(){u=!1,i&&$(!1)})),In(H,"pointermove",(function(){e&&d((function(){b(),$(!0),m((function(){e&&$(!1)}))}))})),In(D,"scroll",(function(){p((function(){V(t()),o&&$(!0),w((function(){o&&!u&&$(!1)}))})),B&&X(K),B&&U(K)}))],Z=f.bind(0);return Z.Ur=P,Z.qr=R,[function(n,u,f){var l=f.Tr,d=f.Lr,s=f.zr,v=f.wr,p=Un(r,n,u),h=t(),g=h.Ar,w=h.Cr,b=h.br,y=p("scrollbars.theme"),m=y[0],x=y[1],O=p("scrollbars.visibility"),S=O[0],L=O[1],C=p("scrollbars.autoHide"),E=C[0],P=C[1],R=p("scrollbars.autoHideDelay")[0],A=p("scrollbars.dragScroll"),M=A[0],H=A[1],T=p("scrollbars.clickScroll"),z=T[0],D=T[1],B=l||d||v||u,j=s||L||u,k=function(n,r){var t="visible"===S||"auto"===S&&"scroll"===n;return _(Or,t,r),t};if(a=R,x&&(_(c),_(m,!0),c=m),P&&(e="move"===E,i="leave"===E,$(!(o="never"!==E),!0)),H&&_(Ar,M),D&&_(Rr,z),j){var I=k(w.x,!0),W=k(w.y,!1);_(Sr,!(I&&W))}B&&(Y(h),V(h),_(Er,!g.x,!0),_(Er,!g.y,!1),_(wr,b&&!F))},Z,E.bind(0,J)]},Ut=new WeakMap,Kt=function(n){return Ut.get(n)},$t=function n(t,e,i){var o=Gr(),u=o.Y,c=o.q,a=Dr(),f=m(t),l=f?t:t.target,d=Kt(l);if(e&&!d){var s=!1,v=a[Ir],p=function(n){var r=n||{},t=v&&v.P;return t?t(r,!0):r},g=A({},u(),p(e)),w=Vn(i),b=w[0],y=w[1],x=w[2],O=zt(t,g),S=O[0],L=O[1],C=O[2],E=Xt(t,g,L),P=E[0],H=E[1],T=E[2],z=function(n,r){S(n,!!r)},D=c(z.bind(0,{},!0)),B=function(n){!function(n){Ut.delete(n)}(l),D(),T(),C(),s=!0,x("destroyed",[j,!!n]),y()},j={options:function(n){if(n){var r=Tr(g,p(n));M(r)||(A(g,r),z(r))}return A({},g)},on:b,off:function(n,r){n&&r&&y(n,r)},state:function(){var n=L(),r=n.Er,t=n.Ar,e=n.Cr,i=n.Pr,o=n.ar,u=n.mr,c=n.br;return A({},{overflowEdge:r,overflowAmount:t,overflowStyle:e,hasOverflow:i,padding:o,paddingAbsolute:u,directionRTL:c,destroyed:s})},elements:function(){var n=L.Ur,r=n.J,t=n.K,e=n.ar,i=n.rr,o=n.er,u=n.tr,c=n.ir,a=H.Ur,f=a.$r,l=a.ra,d=function(n){var r=n.Nr,t=n.Yr;return{scrollbar:n.Wr,track:t,handle:r}},s=function(n){var r=n.Jr,t=n.Kr,e=d(r[0]);return A({},e,{clone:function(){var n=d(t());return P({},!0,{}),n}})};return A({},{target:r,host:t,padding:e||i,viewport:i,content:o||i,scrollOffsetElement:u,scrollEventElement:c,scrollbarHorizontal:s(f),scrollbarVertical:s(l)})},update:function(n){return z({},n),j},destroy:B.bind(0)};return L.Fr((function(n,r,t){P(r,t,n)})),r(R(a),(function(r){var t=a[r];h(t)&&t(n,j)})),tt(!f&&t.cancel,L.Ur)?(B(!0),j):(L.qr(),H.qr(),function(n,r){Ut.set(n,r)}(l,j),x("initialized",[j]),L.Fr((function(n,r,t){var e=n.pr,i=n.wr,o=n.hr,u=n.Tr,c=n.Lr,a=n.zr,f=n._r,l=n.Or;x("updated",[j,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowEdgeChanged:u,overflowAmountChanged:c,overflowStyleChanged:a,contentMutation:f,hostMutation:l},changedOptions:r,force:t}])})),j.update(!0))}return d};$t.plugin=function(n){r(g(n)?n:[n],(function(n){var r=R(n)[0];zr[r]=n[r]}))},$t.valid=function(n){var r=n&&n.elements,t=h(r)&&r();return y(t)&&!!Kt(t.target)},$t.env=function(){var n=Gr(),r=n.k,t=n.H,e=n.L,i=n.B,o=n.F,u=n.D,c=n.G,a=n.X,f=n.U,l=n.N,d=n.Y,s=n.W;return A({},{scrollbarsSize:r,scrollbarsOverlaid:t,scrollbarsHiding:e,rtlScrollBehavior:i,flexboxGlue:o,cssCustomProperties:u,staticDefaultInitialization:c,staticDefaultOptions:a,getDefaultInitialization:f,setDefaultInitialization:l,getDefaultOptions:d,setDefaultOptions:s})},n.OverlayScrollbars=$t,n.scrollbarsHidingPlugin=$r,n.sizeObserverPlugin=Yr,Object.defineProperty(n,"v",{value:!0})})); \ No newline at end of file diff --git a/packages/overlayscrollbars/package.json b/packages/overlayscrollbars/package.json index cf57e1a..9734827 100644 --- a/packages/overlayscrollbars/package.json +++ b/packages/overlayscrollbars/package.json @@ -5,9 +5,12 @@ "version": "0.0.1", "files": [ "src", - "dist" + "dist", + "types/overlayscrollbars.d.ts" ], - "types": "types/index.d.ts", + "main": "dist/overlayscrollbars.js", + "module": "dist/overlayscrollbars.esm.js", + "types": "types/overlayscrollbars.d.ts", "scripts": { "test:jsdom": "jest --coverage --runInBand --detectOpenHandles --testPathPattern", "posttest:jsdom": "full-coverage", diff --git a/packages/overlayscrollbars/types/overlayscrollbars.d.ts b/packages/overlayscrollbars/types/overlayscrollbars.d.ts index 035a4f6..aea9c03 100644 --- a/packages/overlayscrollbars/types/overlayscrollbars.d.ts +++ b/packages/overlayscrollbars/types/overlayscrollbars.d.ts @@ -192,9 +192,13 @@ type ScrollbarsHidingPluginInstance = { declare const scrollbarsHidingPlugin: Plugin; type GeneralInitialEventListeners = InitialEventListeners; type GeneralEventListener = EventListener; +// Notes: +// Height intrinsic detection use "content: true" init strategy - or open ticket for custom height intrinsic observer interface OverlayScrollbarsStatic { - (target: InitializationTarget, options?: DeepPartial, eventListeners?: GeneralInitialEventListeners): OverlayScrollbars; + (target: InitializationTarget): OverlayScrollbars | undefined; + (target: InitializationTarget, options: DeepPartial, eventListeners?: GeneralInitialEventListeners): OverlayScrollbars; plugin(plugin: Plugin | Plugin[]): void; + valid(osInstance: any): boolean; env(): Environment; } interface Environment { @@ -292,9 +296,6 @@ interface OverlayScrollbars { off(name: Name, listener: EventListener$0): void; off(name: Name, listener: EventListener$0[]): void; } -/** - * Notes: - * Height intrinsic detection use "content: true" init strategy - or open ticket for custom height intrinsic observer - */ +// eslint-disable-next-line @typescript-eslint/no-redeclare declare const OverlayScrollbars: OverlayScrollbarsStatic; export { OverlayScrollbars, scrollbarsHidingPlugin, sizeObserverPlugin }; diff --git a/packages/overlayscrollbars/types/overlayscrollbars.min.d.ts b/packages/overlayscrollbars/types/overlayscrollbars.min.d.ts deleted file mode 100644 index e69de29..0000000