From bd7c06c9dd38be66667840dc59f9b02fab9337dd Mon Sep 17 00:00:00 2001 From: Rene Date: Tue, 12 Jul 2022 22:25:12 +0200 Subject: [PATCH] improve bundle size and build process for tests --- config/rollup/pipeline.build.js | 26 - .../dist/overlayscrollbars.esm.js | 2088 ++++++----- .../dist/overlayscrollbars.esm.js.map | 2 +- .../dist/overlayscrollbars.esm.min.js | 2 +- .../dist/overlayscrollbars.js | 3092 ++++++++--------- .../dist/overlayscrollbars.js.map | 2 +- .../dist/overlayscrollbars.min.js | 2 +- packages/overlayscrollbars/rollup.config.js | 23 + packages/overlayscrollbars/src/index.ts | 2 +- .../overlayscrollbars/src/support/cache.ts | 19 +- .../src/support/dom/attribute.ts | 57 +- .../src/support/dom/events.ts | 2 +- .../src/support/dom/style.ts | 6 +- .../src/support/eventListeners.ts | 60 +- .../src/support/utils/array.ts | 27 +- .../src/support/utils/object.ts | 55 +- .../src/support/utils/types.ts | 51 +- .../tests/jest/support/cache.test.ts | 12 +- .../tests/jest/support/dom/events.test.ts | 34 +- .../tests/jest/support/utils/arrays.test.ts | 12 - .../tests/jest/support/utils/types.test.ts | 2 + .../types/overlayscrollbars.d.ts | 2 +- 22 files changed, 2768 insertions(+), 2810 deletions(-) diff --git a/config/rollup/pipeline.build.js b/config/rollup/pipeline.build.js index 6182ffe..cce7414 100644 --- a/config/rollup/pipeline.build.js +++ b/config/rollup/pipeline.build.js @@ -59,32 +59,6 @@ module.exports = (esm, options, { declarationFiles = false, outputStyle = false format: esm ? 'esm' : 'umd', generatedCode: esm ? 'es2015' : 'es5', file: path.resolve(distPath, `${file}${esm ? '.esm' : ''}.js`), - plugins: [ - rollupTerser({ - ecma: esm ? 2015 : 5, - safari10: true, - - mangle: { - safari10: true, - keep_fnames: true, // eslint-disable-line camelcase - /* - properties: { - regex: /^_/, - }, - */ - }, - compress: { - defaults: false, - hoist_funs: true, // eslint-disable-line camelcase - }, - format: { - beautify: true, - max_line_len: 80, // eslint-disable-line camelcase - braces: true, - indent_level: 2, // eslint-disable-line camelcase - }, - }), - ], }, esm, buildMinifiedVersion diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index f5a91a1..efd48da 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -1,260 +1,236 @@ -function createCache(t, n) { - const {o: e, u: s, _: o} = t; - let c = e; - let i; - const cacheUpdateContextual = (t, n) => { - const e = c; - const r = t; - const a = n || (s ? !s(e, r) : e !== r); - if (a || o) { - c = r; - i = e; - } - return [ c, a, i ]; - }; - const cacheUpdateIsolated = t => cacheUpdateContextual(n(c, i), t); - const getCurrentCache = t => [ c, !!t, i ]; - return [ n ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache ]; -} - -function isUndefined(t) { - return void 0 === t; -} - -function isNull(t) { - return null === t; -} - -function isNumber(t) { - return "number" === typeof t; -} - -function isString(t) { - return "string" === typeof t; -} - -function isBoolean(t) { - return "boolean" === typeof t; -} - -function isFunction(t) { - return "function" === typeof t; -} - -function isArray(t) { - return Array.isArray(t); -} - -function isObject(t) { - return "object" === typeof t && !isArray(t) && !isNull(t); -} - -function isArrayLike(t) { - const n = !!t && t.length; - const e = isNumber(n) && n > -1 && n % 1 == 0; - return isArray(t) || !isFunction(t) && e ? n > 0 && isObject(t) ? n - 1 in t : true : false; -} - -function isPlainObject(t) { - if (!t || !isObject(t) || "object" !== type(t)) { - return false; - } - let n; - const s = "constructor"; - const o = t[s]; - const c = o && o.prototype; - const i = e.call(t, s); - const r = c && e.call(c, "isPrototypeOf"); - if (o && !i && !r) { - return false; - } - for (n in t) {} - return isUndefined(n) || e.call(t, n); -} - -function isHTMLElement(n) { - const e = window.HTMLElement; - return n ? e ? n instanceof e : n.nodeType === t : false; -} - -function isElement(n) { - const e = window.Element; - return n ? e ? n instanceof e : n.nodeType === t : false; -} - function each(t, n) { if (isArrayLike(t)) { - for (let e = 0; e < t.length; e++) { - if (false === n(t[e], e, t)) { + for (let o = 0; o < t.length; o++) { + if (false === n(t[o], o, t)) { break; } } } else if (t) { - each(Object.keys(t), (e => n(t[e], e, t))); + each(Object.keys(t), (o => n(t[o], o, t))); } return t; } -function assignDeep(t, n, e, s, o, c, i) { - const r = [ n, e, s, o, c, i ]; - if (("object" !== typeof t || isNull(t)) && !isFunction(t)) { - t = {}; - } - each(r, (n => { - each(keys(n), (e => { - const s = n[e]; - if (t === s) { - return true; - } - const o = isArray(s); - if (s && (isPlainObject(s) || o)) { - const n = t[e]; - let c = n; - if (o && !isArray(n)) { - c = []; - } else if (!o && !isPlainObject(n)) { - c = {}; - } - t[e] = assignDeep(c, s); - } else { - t[e] = s; - } - })); - })); - return t; -} - -function isEmptyObject(t) { - for (const n in t) { - return false; - } - return true; -} - -function getSetProp(t, n, e, s) { - if (isUndefined(s)) { - return e ? e[t] : n; - } - e && (e[t] = s); -} - -function attr(t, n, e) { - if (isUndefined(e)) { - return t ? t.getAttribute(n) : null; - } - t && t.setAttribute(n, e); -} - -function scrollLeft(t, n) { - return getSetProp("scrollLeft", 0, t, n); -} - -function scrollTop(t, n) { - return getSetProp("scrollTop", 0, t, n); -} - function style(t, n) { - const e = isString(n); - const s = isArray(n) || e; + const o = isString(n); + const s = isArray(n) || o; if (s) { - let s = e ? "" : {}; + let s = o ? "" : {}; if (t) { - const o = window.getComputedStyle(t, null); - s = e ? getCSSVal(t, o, n) : n.reduce(((n, e) => { - n[e] = getCSSVal(t, o, e); + const e = window.getComputedStyle(t, null); + s = o ? getCSSVal(t, e, n) : n.reduce(((n, o) => { + n[o] = getCSSVal(t, e, o); return n; }), s); } return s; } - each(keys(n), (e => setCSSVal(t, e, n[e]))); + each(keys(n), (o => setCSSVal(t, o, n[o]))); } function getDefaultExportFromCjs(t) { - return t && t.g && Object.prototype.hasOwnProperty.call(t, "default") ? t["default"] : t; + return t && t.o && Object.prototype.hasOwnProperty.call(t, "default") ? t["default"] : t; } +const createCache = (t, n) => { + const {u: o, _: s, g: e} = t; + let c = o; + let i; + const cacheUpdateContextual = (t, n) => { + const o = c; + const r = t; + const l = n || (s ? !s(o, r) : o !== r); + if (l || e) { + c = r; + i = o; + } + return [ c, l, i ]; + }; + const cacheUpdateIsolated = t => cacheUpdateContextual(n(c, i), t); + const getCurrentCache = t => [ c, !!t, i ]; + return [ n ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache ]; +}; + const t = Node.ELEMENT_NODE; -const {toString: n, hasOwnProperty: e} = Object.prototype; +const {toString: n, hasOwnProperty: o} = Object.prototype; + +const isUndefined = t => void 0 === t; + +const isNull = t => null === t; const type = t => isUndefined(t) || isNull(t) ? `${t}` : n.call(t).replace(/^\[object (.+)\]$/, "$1").toLowerCase(); -const indexOf = (t, n, e) => t.indexOf(n, e); +const isNumber = t => "number" === typeof t; -const push = (t, n, e) => { - !e && !isString(n) && isArrayLike(n) ? Array.prototype.push.apply(t, n) : t.push(n); +const isString = t => "string" === typeof t; + +const isBoolean = t => "boolean" === typeof t; + +const isFunction = t => "function" === typeof t; + +const isArray = t => Array.isArray(t); + +const isObject = t => "object" === typeof t && !isArray(t) && !isNull(t); + +const isArrayLike = t => { + const n = !!t && t.length; + const o = isNumber(n) && n > -1 && n % 1 == 0; + return isArray(t) || !isFunction(t) && o ? n > 0 && isObject(t) ? n - 1 in t : true : false; +}; + +const isPlainObject = t => { + if (!t || !isObject(t) || "object" !== type(t)) { + return false; + } + let n; + const s = "constructor"; + const e = t[s]; + const c = e && e.prototype; + const i = o.call(t, s); + const r = c && o.call(c, "isPrototypeOf"); + if (e && !i && !r) { + return false; + } + for (n in t) {} + return isUndefined(n) || o.call(t, n); +}; + +const isHTMLElement = n => { + const o = window.HTMLElement; + return n ? o ? n instanceof o : n.nodeType === t : false; +}; + +const isElement = n => { + const o = window.Element; + return n ? o ? n instanceof o : n.nodeType === t : false; +}; + +const indexOf = (t, n, o) => t.indexOf(n, o); + +const push = (t, n, o) => { + !o && !isString(n) && isArrayLike(n) ? Array.prototype.push.apply(t, n) : t.push(n); return t; }; const from = t => { - if (Array.from && t) { - return Array.from(t); + const n = Array.from; + const o = []; + if (n && t) { + return n(t); } - const n = []; if (t instanceof Set) { t.forEach((t => { - push(n, t); + push(o, t); })); } else { each(t, (t => { - push(n, t); + push(o, t); })); } - return n; + return o; }; const isEmptyArray = t => !!t && 0 === t.length; -const runEachAndClear = (t, n, e) => { +const runEachAndClear = (t, n, o) => { const runFn = t => t && t.apply(void 0, n || []); - if (t instanceof Set) { - t.forEach(runFn); - !e && t.clear(); - } else { - each(t, runFn); - !e && t.splice && t.splice(0, t.length); - } + each(t, runFn); + !o && (t.length = 0); }; const hasOwnProperty = (t, n) => Object.prototype.hasOwnProperty.call(t, n); const keys = t => t ? Object.keys(t) : []; -const attrClass = (t, n, e, s) => { - const o = attr(t, n) || ""; - const c = new Set(o.split(" ")); - c[s ? "add" : "delete"](e); +const assignDeep = (t, n, o, s, e, c, i) => { + const r = [ n, o, s, e, c, i ]; + if (("object" !== typeof t || isNull(t)) && !isFunction(t)) { + t = {}; + } + each(r, (n => { + each(keys(n), (o => { + const s = n[o]; + if (t === s) { + return true; + } + const e = isArray(s); + if (s && (isPlainObject(s) || e)) { + const n = t[o]; + let c = n; + if (e && !isArray(n)) { + c = []; + } else if (!e && !isPlainObject(n)) { + c = {}; + } + t[o] = assignDeep(c, s); + } else { + t[o] = s; + } + })); + })); + return t; +}; + +const isEmptyObject = t => { + for (const n in t) { + return false; + } + return true; +}; + +const getSetProp = (t, n, o, s) => { + if (isUndefined(s)) { + return o ? o[t] : n; + } + o && (o[t] = s); +}; + +const attr = (t, n, o) => { + if (isUndefined(o)) { + return t ? t.getAttribute(n) : null; + } + t && t.setAttribute(n, o); +}; + +const attrClass = (t, n, o, s) => { + const e = attr(t, n) || ""; + const c = new Set(e.split(" ")); + c[s ? "add" : "delete"](o); attr(t, n, from(c).join(" ").trim()); }; -const hasAttrClass = (t, n, e) => { +const hasAttrClass = (t, n, o) => { const s = attr(t, n) || ""; - const o = new Set(s.split(" ")); - return o.has(e); + const e = new Set(s.split(" ")); + return e.has(o); }; const removeAttr = (t, n) => { t && t.removeAttribute(n); }; +const scrollLeft = (t, n) => getSetProp("scrollLeft", 0, t, n); + +const scrollTop = (t, n) => getSetProp("scrollTop", 0, t, n); + const s = Element.prototype; const find = (t, n) => { - const e = []; + const o = []; const s = n ? isElement(n) ? n : null : document; - return s ? push(e, s.querySelectorAll(t)) : e; + return s ? push(o, s.querySelectorAll(t)) : o; }; const findFirst = (t, n) => { - const e = n ? isElement(n) ? n : null : document; - return e ? e.querySelector(t) : null; + const o = n ? isElement(n) ? n : null : document; + return o ? o.querySelector(t) : null; }; const is = (t, n) => { if (isElement(t)) { - const e = s.matches || s.msMatchesSelector; - return e.call(t, n); + const o = s.matches || s.msMatchesSelector; + return o.call(t, n); } return false; }; @@ -265,9 +241,9 @@ const parent = t => t ? t.parentElement : null; const closest = (t, n) => { if (isElement(t)) { - const e = s.closest; - if (e) { - return e.call(t, n); + const o = s.closest; + if (o) { + return o.call(t, n); } do { if (is(t, n)) { @@ -279,27 +255,27 @@ const closest = (t, n) => { return null; }; -const liesBetween = (t, n, e) => { +const liesBetween = (t, n, o) => { const s = t && closest(t, n); - const o = t && findFirst(e, s); - return s && o ? s === t || o === t || closest(closest(t, e), n) !== s : false; + const e = t && findFirst(o, s); + return s && e ? s === t || e === t || closest(closest(t, o), n) !== s : false; }; -const before = (t, n, e) => { - if (e) { +const before = (t, n, o) => { + if (o) { let s = n; - let o; + let e; if (t) { - if (isArrayLike(e)) { - o = document.createDocumentFragment(); - each(e, (t => { + if (isArrayLike(o)) { + e = document.createDocumentFragment(); + each(o, (t => { if (t === s) { s = t.previousSibling; } - o.appendChild(t); + e.appendChild(t); })); } else { - o = e; + e = o; } if (n) { if (!s) { @@ -308,7 +284,7 @@ const before = (t, n, e) => { s = s.nextSibling; } } - t.insertBefore(o, s || null); + t.insertBefore(e, s || null); } } }; @@ -358,7 +334,7 @@ const firstLetterToUpper = t => t.charAt(0).toUpperCase() + t.slice(1); const getDummyStyle = () => createDiv().style; -const o = [ "-webkit-", "-moz-", "-o-", "-ms-" ]; +const e = [ "-webkit-", "-moz-", "-o-", "-ms-" ]; const c = [ "WebKit", "Moz", "O", "MS", "webkit", "moz", "o", "ms" ]; @@ -371,11 +347,11 @@ const cssProperty = t => { if (hasOwnProperty(r, t)) { return n; } - const e = firstLetterToUpper(t); + const o = firstLetterToUpper(t); const s = getDummyStyle(); - each(o, (o => { - const c = o.replace(/-/g, ""); - const i = [ t, o + t, c + e, firstLetterToUpper(c) + e ]; + each(e, (e => { + const c = e.replace(/-/g, ""); + const i = [ t, e + t, c + o, firstLetterToUpper(c) + o ]; return !(n = i.find((t => void 0 !== s[t]))); })); return r[t] = n || ""; @@ -386,35 +362,35 @@ const jsAPI = t => { if (hasOwnProperty(i, t)) { return n; } - each(c, (e => { - n = n || window[e + firstLetterToUpper(t)]; + each(c, (o => { + n = n || window[o + firstLetterToUpper(t)]; return !n; })); i[t] = n; return n; }; -const a = jsAPI("MutationObserver"); +const l = jsAPI("MutationObserver"); -const l = jsAPI("IntersectionObserver"); +const a = jsAPI("IntersectionObserver"); -const u = jsAPI("ResizeObserver"); +const f = jsAPI("ResizeObserver"); -const f = jsAPI("cancelAnimationFrame"); +const u = jsAPI("cancelAnimationFrame"); const d = jsAPI("requestAnimationFrame"); const _ = /[^\x20\t\r\n\f]+/g; -const classListAction = (t, n, e) => { +const classListAction = (t, n, o) => { let s; - let o = 0; + let e = 0; let c = false; if (t && n && isString(n)) { const i = n.match(_) || []; c = i.length > 0; - while (s = i[o++]) { - c = !!e(t.classList, s) && c; + while (s = i[e++]) { + c = !!o(t.classList, s) && c; } } return c; @@ -431,17 +407,17 @@ const addClass = (t, n) => { return removeClass.bind(0, t, n); }; -const equal = (t, n, e, s) => { +const equal = (t, n, o, s) => { if (t && n) { - let o = true; - each(e, (e => { - const c = s ? s(t[e]) : t[e]; - const i = s ? s(n[e]) : n[e]; + let e = true; + each(o, (o => { + const c = s ? s(t[o]) : t[o]; + const i = s ? s(n[o]) : n[o]; if (c !== i) { - o = false; + e = false; } })); - return o; + return e; } return false; }; @@ -452,57 +428,57 @@ const equalXY = (t, n) => equal(t, n, [ "x", "y" ]); const equalTRBL = (t, n) => equal(t, n, [ "t", "r", "b", "l" ]); -const equalBCRWH = (t, n, e) => equal(t, n, [ "width", "height" ], e && (t => Math.round(t))); +const equalBCRWH = (t, n, o) => equal(t, n, [ "width", "height" ], o && (t => Math.round(t))); const clearTimeouts = t => { t && window.clearTimeout(t); - t && f(t); + t && u(t); }; const noop = () => {}; const debounce = (t, n) => { - let e; - let s; let o; + let s; + let e; let c; - const {p: i, v: r, m: a} = n || {}; - const l = window.setTimeout; - const u = function invokeFunctionToDebounce(n) { - clearTimeouts(e); + const {v: i, p: r, m: l} = n || {}; + const a = window.setTimeout; + const f = function invokeFunctionToDebounce(n) { + clearTimeouts(o); clearTimeouts(s); - s = e = o = void 0; + s = o = e = void 0; t.apply(this, n); }; - const mergeParms = t => a && o ? a(o, t) : t; + const mergeParms = t => l && e ? l(e, t) : t; const flush = () => { - if (e) { - u(mergeParms(c) || c); + if (o) { + f(mergeParms(c) || c); } }; - const f = function debouncedFn() { + const u = function debouncedFn() { const t = from(arguments); const n = isFunction(i) ? i() : i; - const a = isNumber(n) && n >= 0; - if (a) { + const l = isNumber(n) && n >= 0; + if (l) { const i = isFunction(r) ? r() : r; - const a = isNumber(i) && i >= 0; - const f = n > 0 ? l : d; + const l = isNumber(i) && i >= 0; + const u = n > 0 ? a : d; const _ = mergeParms(t); const g = _ || t; - const h = u.bind(0, g); - clearTimeouts(e); - e = f(h, n); - if (a && !s) { - s = l(flush, i); + const h = f.bind(0, g); + clearTimeouts(o); + o = u(h, n); + if (l && !s) { + s = a(flush, i); } - o = c = g; + e = c = g; } else { - u(t); + f(t); } }; - f.S = flush; - return f; + u.S = flush; + return u; }; const g = { @@ -511,40 +487,40 @@ const g = { }; const parseToZeroOrNumber = (t, n) => { - const e = n ? parseFloat(t) : parseInt(t, 10); - return Number.isNaN(e) ? 0 : e; + const o = n ? parseFloat(t) : parseInt(t, 10); + return o === o ? o : 0; }; const adaptCSSVal = (t, n) => !g[t.toLowerCase()] && isNumber(n) ? `${n}px` : n; -const getCSSVal = (t, n, e) => null != n ? n[e] || n.getPropertyValue(e) : t.style[e]; +const getCSSVal = (t, n, o) => null != n ? n[o] || n.getPropertyValue(o) : t.style[o]; -const setCSSVal = (t, n, e) => { +const setCSSVal = (t, n, o) => { try { if (t) { const {style: s} = t; if (!isUndefined(s[n])) { - s[n] = adaptCSSVal(n, e); + s[n] = adaptCSSVal(n, o); } else { - s.setProperty(n, e); + s.setProperty(n, o); } } } catch (s) {} }; -const topRightBottomLeft = (t, n, e) => { +const topRightBottomLeft = (t, n, o) => { const s = n ? `${n}-` : ""; - const o = e ? `-${e}` : ""; - const c = `${s}top${o}`; - const i = `${s}right${o}`; - const r = `${s}bottom${o}`; - const a = `${s}left${o}`; - const l = style(t, [ c, i, r, a ]); + const e = o ? `-${o}` : ""; + const c = `${s}top${e}`; + const i = `${s}right${e}`; + const r = `${s}bottom${e}`; + const l = `${s}left${e}`; + const a = style(t, [ c, i, r, l ]); return { - t: parseToZeroOrNumber(l[c]), - r: parseToZeroOrNumber(l[i]), - b: parseToZeroOrNumber(l[r]), - l: parseToZeroOrNumber(l[a]) + t: parseToZeroOrNumber(a[c]), + r: parseToZeroOrNumber(a[i]), + b: parseToZeroOrNumber(a[r]), + l: parseToZeroOrNumber(a[l]) }; }; @@ -575,58 +551,58 @@ const scrollSize = t => t ? { const fractionalSize = t => { const n = parseFloat(style(t, "height")) || 0; - const e = parseFloat(style(t, "height")) || 0; + const o = parseFloat(style(t, "height")) || 0; return { - w: e - Math.round(e), + w: o - Math.round(o), h: n - Math.round(n) }; }; const getBoundingClientRect = t => t.getBoundingClientRect(); -let p; +let v; const supportPassiveEvents = () => { - if (isUndefined(p)) { - p = false; + if (isUndefined(v)) { + v = false; try { window.addEventListener("test", null, Object.defineProperty({}, "passive", { - get: function() { - p = true; + get() { + v = true; } })); } catch (t) {} } - return p; + return v; }; const splitEventNames = t => t.split(" "); -const off = (t, n, e, s) => { +const off = (t, n, o, s) => { each(splitEventNames(n), (n => { - t.removeEventListener(n, e, s); + t.removeEventListener(n, o, s); })); }; -const on = (t, n, e, s) => { - const o = supportPassiveEvents(); - const c = o && s && s.C || false; - const i = s && s.O || false; - const r = s && s.$ || false; - const a = []; - const l = o ? { +const on = (t, n, o, s) => { + const e = supportPassiveEvents(); + const c = e && s && s.C || false; + const i = s && s.$ || false; + const r = s && s.O || false; + const l = []; + const a = e ? { passive: c, capture: i } : i; each(splitEventNames(n), (n => { - const s = r ? o => { + const s = r ? e => { t.removeEventListener(n, s, i); - e && e(o); - } : e; - push(a, off.bind(null, t, n, s, i)); - t.addEventListener(n, s, l); + o && o(e); + } : o; + push(l, off.bind(null, t, n, s, i)); + t.addEventListener(n, s, a); })); - return runEachAndClear.bind(0, a); + return runEachAndClear.bind(0, l); }; const stopPropagation = t => t.stopPropagation(); @@ -635,7 +611,7 @@ const preventDefault = t => t.preventDefault(); const stopAndPrevent = t => stopPropagation(t) || preventDefault(t); -const v = { +const w = { x: 0, y: 0 }; @@ -645,7 +621,7 @@ const absoluteCoordinates = t => { return n ? { x: n.left + window.pageYOffset, y: n.top + window.pageXOffset - } : v; + } : w; }; const manageListener = (t, n) => { @@ -653,42 +629,42 @@ const manageListener = (t, n) => { }; const createEventListenerHub = t => { - function removeEvent(t, e) { + const n = new Map; + const removeEvent = (t, o) => { if (t) { const s = n.get(t); manageListener((t => { if (s) { s[t ? "delete" : "clear"](t); } - }), e); + }), o); } else { n.forEach((t => { t.clear(); })); n.clear(); } - } - function addEvent(t, e) { + }; + const addEvent = (t, o) => { const s = n.get(t) || new Set; n.set(t, s); manageListener((t => { t && s.add(t); - }), e); - return removeEvent.bind(0, t, e); - } - function triggerEvent(t, e) { + }), o); + return removeEvent.bind(0, t, o); + }; + const triggerEvent = (t, o) => { const s = n.get(t); each(from(s), (t => { - if (e && !isEmptyArray(e)) { - t.apply(0, e); + if (o && !isEmptyArray(o)) { + t.apply(0, o); } else { t(); } })); - } - const n = new Map; - const e = keys(t); - each(e, (n => { + }; + const o = keys(t); + each(o, (n => { addEvent(n, t[n]); })); return [ addEvent, removeEvent, triggerEvent ]; @@ -696,7 +672,7 @@ const createEventListenerHub = t => { const getPropByPath = (t, n) => t ? n.split(".").reduce(((t, n) => t && hasOwnProperty(t, n) ? t[n] : void 0), t) : void 0; -const createOptionCheck = (t, n, e) => s => [ getPropByPath(t, s), e || void 0 !== getPropByPath(n, s) ]; +const createOptionCheck = (t, n, o) => s => [ getPropByPath(t, s), o || void 0 !== getPropByPath(n, s) ]; const createState = t => { let n = t; @@ -705,11 +681,11 @@ const createState = t => { } ]; }; -const b = "os-environment"; +const p = "os-environment"; -const w = `${b}-flexbox-glue`; +const b = `${p}-flexbox-glue`; -const y = `${w}-max`; +const y = `${b}-max`; const m = "data-overlayscrollbars"; @@ -719,43 +695,43 @@ const x = `${m}-overflow-y`; const C = "overflowVisible"; -const O = "viewportStyled"; +const $ = "viewportStyled"; -const $ = "os-padding"; +const O = "os-padding"; -const A = "os-viewport"; +const z = "os-viewport"; -const L = `${A}-arrange`; +const A = `${z}-arrange`; -const T = "os-content"; +const I = "os-content"; -const z = `${A}-scrollbar-styled`; +const T = `${z}-scrollbar-styled`; -const D = `os-overflow-visible`; +const P = `os-overflow-visible`; -const E = "os-size-observer"; +const L = "os-size-observer"; -const P = `${E}-appear`; +const M = `${L}-appear`; -const I = `${E}-listener`; +const H = `${L}-listener`; -const j = `${I}-scroll`; +const E = `${H}-scroll`; -const M = `${I}-item`; +const R = `${H}-item`; -const H = `${M}-final`; +const D = `${R}-final`; -const N = "os-trinsic-observer"; +const j = "os-trinsic-observer"; -const R = "os-scrollbar"; +const V = "os-scrollbar"; -const F = `${R}-horizontal`; +const B = `${V}-horizontal`; -const V = `${R}-vertical`; +const k = `${V}-vertical`; -const k = "os-scrollbar-track"; +const F = "os-scrollbar-track"; -const B = "os-scrollbar-handle"; +const Y = "os-scrollbar-handle"; const opsStringify = t => JSON.stringify(t, ((t, n) => { if (isFunction(n)) { @@ -764,7 +740,7 @@ const opsStringify = t => JSON.stringify(t, ((t, n) => { return n; })); -const U = { +const q = { paddingAbsolute: false, updating: { elementEvents: [ [ "img", "load" ] ], @@ -791,91 +767,91 @@ const U = { }; const getOptionsDiff = (t, n) => { - const e = {}; + const o = {}; const s = keys(n).concat(keys(t)); each(s, (s => { - const o = t[s]; + const e = t[s]; const c = n[s]; - if (isObject(o) && isObject(c)) { - assignDeep(e[s] = {}, getOptionsDiff(o, c)); - } else if (hasOwnProperty(n, s) && c !== o) { + if (isObject(e) && isObject(c)) { + assignDeep(o[s] = {}, getOptionsDiff(e, c)); + } else if (hasOwnProperty(n, s) && c !== e) { let t = true; - if (isArray(o) || isArray(c)) { + if (isArray(e) || isArray(c)) { try { - if (opsStringify(o) === opsStringify(c)) { + if (opsStringify(e) === opsStringify(c)) { t = false; } } catch (i) {} } if (t) { - e[s] = c; + o[s] = c; } } })); - return e; + return o; }; -let Y; +let G; -const {abs: q, round: G} = Math; +const {abs: N, round: U} = Math; const diffBiggerThanOne = (t, n) => { - const e = q(t); - const s = q(n); - return !(e === s || e + 1 === s || e - 1 === s); + const o = N(t); + const s = N(n); + return !(o === s || o + 1 === s || o - 1 === s); }; -const getNativeScrollbarSize = (t, n, e) => { +const getNativeScrollbarSize = (t, n, o) => { appendChildren(t, n); const s = clientSize(n); - const o = offsetSize(n); - const c = fractionalSize(e); + const e = offsetSize(n); + const c = fractionalSize(o); return { - x: o.h - s.h + c.h, - y: o.w - s.w + c.w + x: e.h - s.h + c.h, + y: e.w - s.w + c.w }; }; const getNativeScrollbarsHiding = t => { let n = false; - const e = addClass(t, z); + const o = addClass(t, T); try { n = "none" === style(t, cssProperty("scrollbar-width")) || "none" === window.getComputedStyle(t, "::-webkit-scrollbar").getPropertyValue("display"); } catch (s) {} - e(); + o(); return n; }; const getRtlScrollBehavior = (t, n) => { - const e = "hidden"; + const o = "hidden"; style(t, { - overflowX: e, - overflowY: e, + overflowX: o, + overflowY: o, direction: "rtl" }); scrollLeft(t, 0); const s = absoluteCoordinates(t); - const o = absoluteCoordinates(n); + const e = absoluteCoordinates(n); scrollLeft(t, -999); const c = absoluteCoordinates(n); return { - i: s.x === o.x, - n: o.x !== c.x + i: s.x === e.x, + n: e.x !== c.x }; }; const getFlexboxGlue = (t, n) => { - const e = addClass(t, w); + const o = addClass(t, b); const s = getBoundingClientRect(t); - const o = getBoundingClientRect(n); - const c = equalBCRWH(o, s, true); + const e = getBoundingClientRect(n); + const c = equalBCRWH(e, s, true); const i = addClass(t, y); const r = getBoundingClientRect(t); - const a = getBoundingClientRect(n); - const l = equalBCRWH(a, r, true); - e(); + const l = getBoundingClientRect(n); + const a = equalBCRWH(l, r, true); + o(); i(); - return c && l; + return c && a; }; const getWindowDPR = () => { @@ -886,91 +862,91 @@ const getWindowDPR = () => { const createEnvironment = () => { const {body: t} = document; - const n = createDOM(`
`); - const e = n[0]; - const s = e.firstChild; - const [o, , c] = createEventListenerHub(); + const n = createDOM(`
`); + const o = n[0]; + const s = o.firstChild; + const [e, , c] = createEventListenerHub(); const [i, r] = createCache({ - o: getNativeScrollbarSize(t, e, s), - u: equalXY + u: getNativeScrollbarSize(t, o, s), + _: equalXY }); - const [a] = r(); - const l = getNativeScrollbarsHiding(e); - const u = { - x: 0 === a.x, - y: 0 === a.y - }; + const [l] = r(); + const a = getNativeScrollbarsHiding(o); const f = { - A: !l, - L: false + x: 0 === l.x, + y: 0 === l.y }; - const d = assignDeep({}, U); + const u = { + A: !a, + I: false + }; + const d = assignDeep({}, q); const _ = { - T: a, - D: u, - P: l, - I: "-1" === style(e, "zIndex"), - j: getRtlScrollBehavior(e, s), - M: getFlexboxGlue(e, s), - H: t => o("_", t), - N: assignDeep.bind(0, {}, f), - R(t) { - assignDeep(f, t); - }, - F: assignDeep.bind(0, {}, d), + T: l, + P: f, + L: a, + M: "-1" === style(o, "zIndex"), + H: getRtlScrollBehavior(o, s), + R: getFlexboxGlue(o, s), + D: t => e("_", t), + j: assignDeep.bind(0, {}, u), V(t) { + assignDeep(u, t); + }, + B: assignDeep.bind(0, {}, d), + k(t) { assignDeep(d, t); }, - k: assignDeep({}, f), - B: assignDeep({}, d) + F: assignDeep({}, u), + Y: assignDeep({}, d) }; - removeAttr(e, "style"); - removeElements(e); - if (!l && (!u.x || !u.y)) { + removeAttr(o, "style"); + removeElements(o); + if (!a && (!f.x || !f.y)) { let n = windowSize(); - let o = getWindowDPR(); + let e = getWindowDPR(); window.addEventListener("resize", (() => { const r = windowSize(); - const a = { + const l = { w: r.w - n.w, h: r.h - n.h }; - if (0 === a.w && 0 === a.h) { + if (0 === l.w && 0 === l.h) { return; } - const l = { - w: q(a.w), - h: q(a.h) + const a = { + w: N(l.w), + h: N(l.h) }; - const u = { - w: q(G(r.w / (n.w / 100))), - h: q(G(r.h / (n.h / 100))) + const f = { + w: N(U(r.w / (n.w / 100))), + h: N(U(r.h / (n.h / 100))) }; - const f = getWindowDPR(); - const d = l.w > 2 && l.h > 2; - const _ = !diffBiggerThanOne(u.w, u.h); - const g = f !== o && o > 0; + const u = getWindowDPR(); + const d = a.w > 2 && a.h > 2; + const _ = !diffBiggerThanOne(f.w, f.h); + const g = u !== e && e > 0; const h = d && _ && g; if (h) { - const [n, o] = i(getNativeScrollbarSize(t, e, s)); - assignDeep(Y.T, n); - removeElements(e); - if (o) { + const [n, e] = i(getNativeScrollbarSize(t, o, s)); + assignDeep(G.T, n); + removeElements(o); + if (e) { c("_"); } } n = r; - o = f; + e = u; })); } return _; }; const getEnvironment = () => { - if (!Y) { - Y = createEnvironment(); + if (!G) { + G = createEnvironment(); } - return Y; + return G; }; const W = {}; @@ -991,18 +967,18 @@ var X = { function _extends() { t.exports = _extends = Object.assign ? Object.assign.bind() : function(t) { for (var n = 1; n < arguments.length; n++) { - var e = arguments[n]; - for (var s in e) { - if (Object.prototype.hasOwnProperty.call(e, s)) { - t[s] = e[s]; + var o = arguments[n]; + for (var s in o) { + if (Object.prototype.hasOwnProperty.call(o, s)) { + t[s] = o[s]; } } } return t; - }, t.exports.g = true, t.exports["default"] = t.exports; + }, t.exports.o = true, t.exports["default"] = t.exports; return _extends.apply(this, arguments); } - t.exports = _extends, t.exports.g = true, t.exports["default"] = t.exports; + t.exports = _extends, t.exports.o = true, t.exports["default"] = t.exports; })(X); const J = getDefaultExportFromCjs(X.exports); @@ -1017,60 +993,60 @@ const K = { null: "__TPL_null_TYPE__" }; -const validateRecursive = (t, n, e, s) => { - const o = {}; +const validateRecursive = (t, n, o, s) => { + const e = {}; const c = J({}, n); const i = keys(t).filter((t => hasOwnProperty(n, t))); each(i, (i => { const r = n[i]; - const a = t[i]; - const l = isPlainObject(a); - const u = s ? `${s}.` : ""; - if (l && isPlainObject(r)) { - const [t, n] = validateRecursive(a, r, e, u + i); - o[i] = t; + const l = t[i]; + const a = isPlainObject(l); + const f = s ? `${s}.` : ""; + if (a && isPlainObject(r)) { + const [t, n] = validateRecursive(l, r, o, f + i); + e[i] = t; c[i] = n; - each([ c, o ], (t => { + each([ c, e ], (t => { if (isEmptyObject(t[i])) { delete t[i]; } })); - } else if (!l) { + } else if (!a) { let t = false; const n = []; const s = []; - const l = type(r); - const f = !isArray(a) ? [ a ] : a; - each(f, (e => { - let o; + const a = type(r); + const u = !isArray(l) ? [ l ] : l; + each(u, (o => { + let e; each(K, ((t, n) => { - if (t === e) { - o = n; + if (t === o) { + e = n; } })); - const c = isUndefined(o); + const c = isUndefined(e); if (c && isString(r)) { - const s = e.split(" "); + const s = o.split(" "); t = !!s.find((t => t === r)); push(n, s); } else { - t = K[l] === e; + t = K[a] === o; } - push(s, c ? K.string : o); + push(s, c ? K.string : e); return !t; })); if (t) { - o[i] = r; - } else if (e) { - console.warn(`${`The option "${u}${i}" wasn't set, because it doesn't accept the type [ ${l.toUpperCase()} ] with the value of "${r}".\r\n` + `Accepted types are: [ ${s.join(", ").toUpperCase()} ].\r\n`}${n.length > 0 ? `\r\nValid strings are: [ ${n.join(", ")} ].` : ""}`); + e[i] = r; + } else if (o) { + console.warn(`${`The option "${f}${i}" wasn't set, because it doesn't accept the type [ ${a.toUpperCase()} ] with the value of "${r}".\r\n` + `Accepted types are: [ ${s.join(", ").toUpperCase()} ].\r\n`}${n.length > 0 ? `\r\nValid strings are: [ ${n.join(", ")} ].` : ""}`); } delete c[i]; } })); - return [ o, c ]; + return [ e, c ]; }; -const validateOptions = (t, n, e) => validateRecursive(t, n, e); +const validateOptions = (t, n, o) => validateRecursive(t, n, o); const Q = K.number; @@ -1080,11 +1056,11 @@ const tt = [ K.array, K.null ]; const nt = "hidden scroll visible visible-hidden"; -const et = "visible hidden auto"; +const ot = "visible hidden auto"; const st = "never scroll leavemove"; -const ot = { +const et = { paddingAbsolute: Z, updating: { elementEvents: tt, @@ -1097,7 +1073,7 @@ const ot = { y: nt }, scrollbars: { - visibility: et, + visibility: ot, autoHide: st, autoHideDelay: Q, dragScroll: Z, @@ -1114,32 +1090,32 @@ const ct = "__osOptionsValidationPlugin"; const it = { [ct]: { - U: (t, n) => { - const [e, s] = validateOptions(ot, t, n); - return J({}, s, e); + q: (t, n) => { + const [o, s] = validateOptions(et, t, n); + return J({}, s, o); } } }; const rt = 3333333; -const at = "scroll"; +const lt = "scroll"; -const lt = "__osSizeObserverPlugin"; +const at = "__osSizeObserverPlugin"; -const ut = { - [lt]: { - U: (t, n, e) => { - const s = createDOM(`
`); +const ft = { + [at]: { + q: (t, n, o) => { + const s = createDOM(`
`); appendChildren(t, s); - addClass(t, j); - const o = s[0]; - const c = o.lastChild; - const i = o.firstChild; + addClass(t, E); + const e = s[0]; + const c = e.lastChild; + const i = e.firstChild; const r = null == i ? void 0 : i.firstChild; - let a = offsetSize(o); - let l = a; - let u = false; + let l = offsetSize(e); + let a = l; + let f = false; let _; const reset = () => { scrollLeft(i, rt); @@ -1149,18 +1125,18 @@ const ut = { }; const onResized = t => { _ = 0; - if (u) { - a = l; + if (f) { + l = a; n(true === t); } }; const onScroll = t => { - l = offsetSize(o); - u = !t || !equalWH(l, a); + a = offsetSize(e); + f = !t || !equalWH(a, l); if (t) { stopAndPrevent(t); - if (u && !_) { - f(_); + if (f && !_) { + u(_); _ = d(onResized); } } else { @@ -1168,81 +1144,81 @@ const ut = { } reset(); }; - const g = push([], [ on(i, at, onScroll), on(c, at, onScroll) ]); + const g = push([], [ on(i, lt, onScroll), on(c, lt, onScroll) ]); style(r, { width: rt, height: rt }); reset(); - return [ e ? onScroll.bind(0, false) : reset, g ]; + return [ o ? onScroll.bind(0, false) : reset, g ]; } } }; -let ft = 0; +let ut = 0; const dt = "__osScrollbarsHidingPlugin"; const _t = { [dt]: { - Y: () => { - const {P: t, D: n, I: e} = getEnvironment(); - const s = !e && !t && (n.x || n.y); - const o = s ? document.createElement("style") : false; - if (o) { - attr(o, "id", `${L}-${ft}`); - ft++; + G: () => { + const {L: t, P: n, M: o} = getEnvironment(); + const s = !o && !t && (n.x || n.y); + const e = s ? document.createElement("style") : false; + if (e) { + attr(e, "id", `${A}-${ut}`); + ut++; } - return o; + return e; }, - q: (t, n, e, s, o, c) => { - const {M: i} = getEnvironment(); - const arrangeViewport = (o, c, i, r) => { + N: (t, n, o, s, e, c) => { + const {R: i} = getEnvironment(); + const arrangeViewport = (e, c, i, r) => { if (t) { - const {G: t} = s(); - const {W: a, X: l} = o; - const {x: u, y: f} = l; - const {x: d, y: _} = a; + const {U: t} = s(); + const {W: l, X: a} = e; + const {x: f, y: u} = a; + const {x: d, y: _} = l; const g = r ? "paddingRight" : "paddingLeft"; const h = t[g]; - const p = t.paddingTop; - const v = c.w + i.w; - const b = c.h + i.h; - const w = { - w: _ && f ? `${_ + v - h}px` : "", - h: d && u ? `${d + b - p}px` : "" + const v = t.paddingTop; + const w = c.w + i.w; + const p = c.h + i.h; + const b = { + w: _ && u ? `${_ + w - h}px` : "", + h: d && f ? `${d + p - v}px` : "" }; - if (e) { - const {sheet: t} = e; + if (o) { + const {sheet: t} = o; if (t) { const {cssRules: n} = t; if (n) { if (!n.length) { - t.insertRule(`#${attr(e, "id")} + .${L}::before {}`, 0); + t.insertRule(`#${attr(o, "id")} + .${A}::before {}`, 0); } const s = n[0].style; - s.width = w.w; - s.height = w.h; + s.width = b.w; + s.height = b.h; } } } else { style(n, { - "--os-vaw": w.w, - "--os-vah": w.h + "--os-vaw": b.w, + "--os-vah": b.h }); } } return t; }; - const undoViewportArrange = (e, r, a) => { + const undoViewportArrange = (o, r, l) => { if (t) { - const l = a || o(e); - const {G: u} = s(); - const {X: f} = l; - const {x: d, y: _} = f; + const a = l || e(o); + const {U: f} = s(); + const {X: u} = a; + const {x: d, y: _} = u; const g = {}; const assignProps = t => each(t.split(" "), (t => { - g[t] = u[t]; + g[t] = f[t]; })); if (d) { assignProps("marginBottom paddingTop paddingBottom"); @@ -1251,16 +1227,16 @@ const _t = { assignProps("marginLeft marginRight paddingLeft paddingRight"); } const h = style(n, keys(g)); - removeClass(n, L); + removeClass(n, A); if (!i) { g.height = ""; } style(n, g); return [ () => { - c(l, r, t, h); + c(a, r, t, h); style(n, h); - addClass(n, L); - }, l ]; + addClass(n, A); + }, a ]; } return [ noop ]; }; @@ -1271,14 +1247,14 @@ const _t = { const resolveInitialization = (t, n) => isFunction(t) ? t.apply(0, n) : t; -const staticInitializationElement = (t, n, e, s) => resolveInitialization(s || resolveInitialization(e, t), t) || n.apply(0, t); +const staticInitializationElement = (t, n, o, s) => resolveInitialization(s || resolveInitialization(o, t), t) || n.apply(0, t); -const dynamicInitializationElement = (t, n, e, s) => { - let o = resolveInitialization(s, t); - if (isNull(o) || isUndefined(o)) { - o = resolveInitialization(e, t); +const dynamicInitializationElement = (t, n, o, s) => { + let e = resolveInitialization(s, t); + if (isNull(e) || isUndefined(e)) { + e = resolveInitialization(o, t); } - return true === o || isNull(o) || isUndefined(o) ? n.apply(0, t) : o; + return true === e || isNull(e) || isUndefined(e) ? n.apply(0, t) : e; }; const gt = createDiv.bind(0, ""); @@ -1294,106 +1270,106 @@ const addDataAttrHost = (t, n) => { }; const createStructureSetupElements = t => { - const {N: n, P: e} = getEnvironment(); + const {j: n, L: o} = getEnvironment(); const s = getPlugins()[dt]; - const o = s && s.Y; - const {J: c, K: i, A: r, L: a} = n(); - const l = isHTMLElement(t); - const f = t; - const d = l ? t : f.target; + const e = s && s.G; + const {J: c, K: i, A: r, I: l} = n(); + const a = isHTMLElement(t); + const u = t; + const d = a ? t : u.target; const _ = is(d, "textarea"); const g = !_ && is(d, "body"); const h = d.ownerDocument; - const p = h.body; - const v = h.defaultView; - const b = !!u && !_ && e; - const w = staticInitializationElement.bind(0, [ d ]); + const v = h.body; + const w = h.defaultView; + const p = !!f && !_ && o; + const b = staticInitializationElement.bind(0, [ d ]); const y = dynamicInitializationElement.bind(0, [ d ]); - const C = [ w(gt, i, f.viewport), w(gt, i), w(gt) ].filter((t => !b ? t !== d : true))[0]; - const O = C === d; - const L = { + const C = [ b(gt, i, u.viewport), b(gt, i), b(gt) ].filter((t => !p ? t !== d : true))[0]; + const $ = C === d; + const A = { Z: d, - J: _ ? w(gt, c, f.host) : d, + J: _ ? b(gt, c, u.host) : d, K: C, - A: !O && y(gt, r, f.padding), - L: !O && y(gt, a, f.content), - tt: !O && !e && o && o(), - nt: v, - et: h, - st: parent(p), - ot: p, + A: !$ && y(gt, r, u.padding), + I: !$ && y(gt, l, u.content), + tt: !$ && !o && e && e(), + nt: w, + ot: h, + st: parent(v), + et: v, ct: _, it: g, - rt: l, - lt: O, - ut: (t, n) => O ? hasAttrClass(C, m, n) : hasClass(C, t), - ft: (t, n, e) => O ? attrClass(C, m, n, e) : (e ? addClass : removeClass)(C, t) + rt: a, + lt: $, + ft: (t, n) => $ ? hasAttrClass(C, m, n) : hasClass(C, t), + ut: (t, n, o) => $ ? attrClass(C, m, n, o) : (o ? addClass : removeClass)(C, t) }; - const D = keys(L).reduce(((t, n) => { - const e = L[n]; - return push(t, e && !parent(e) ? e : false); + const P = keys(A).reduce(((t, n) => { + const o = A[n]; + return push(t, o && !parent(o) ? o : false); }), []); - const elementIsGenerated = t => t ? indexOf(D, t) > -1 : null; - const {Z: E, J: P, A: I, K: j, L: M, tt: H} = L; - const N = []; - const R = _ && elementIsGenerated(P); - const F = _ ? E : contents([ M, j, I, P, E ].find((t => false === elementIsGenerated(t)))); - const V = M || j; + const elementIsGenerated = t => t ? indexOf(P, t) > -1 : null; + const {Z: L, J: M, A: H, K: E, I: R, tt: D} = A; + const j = []; + const V = _ && elementIsGenerated(M); + const B = _ ? L : contents([ R, E, H, M, L ].find((t => false === elementIsGenerated(t)))); + const k = R || E; const appendElements = () => { - const t = addDataAttrHost(P, O ? "viewport" : "host"); - const n = addClass(I, $); - const s = addClass(j, !O && A); - const o = addClass(M, T); - if (R) { - insertAfter(E, P); - push(N, (() => { - insertAfter(P, E); - removeElements(P); + const t = addDataAttrHost(M, $ ? "viewport" : "host"); + const n = addClass(H, O); + const s = addClass(E, !$ && z); + const e = addClass(R, I); + if (V) { + insertAfter(L, M); + push(j, (() => { + insertAfter(M, L); + removeElements(M); })); } - appendChildren(V, F); - appendChildren(P, I); - appendChildren(I || P, !O && j); - appendChildren(j, M); - push(N, (() => { + appendChildren(k, B); + appendChildren(M, H); + appendChildren(H || M, !$ && E); + appendChildren(E, R); + push(j, (() => { t(); - removeAttr(j, S); - removeAttr(j, x); - if (elementIsGenerated(M)) { - unwrap(M); + removeAttr(E, S); + removeAttr(E, x); + if (elementIsGenerated(R)) { + unwrap(R); } - if (elementIsGenerated(j)) { - unwrap(j); + if (elementIsGenerated(E)) { + unwrap(E); } - if (elementIsGenerated(I)) { - unwrap(I); + if (elementIsGenerated(H)) { + unwrap(H); } n(); s(); - o(); + e(); })); - if (e && !O) { - push(N, removeClass.bind(0, j, z)); + if (o && !$) { + push(j, removeClass.bind(0, E, T)); } - if (H) { - insertBefore(j, H); - push(N, removeElements.bind(0, H)); + if (D) { + insertBefore(E, D); + push(j, removeElements.bind(0, D)); } }; - return [ L, appendElements, runEachAndClear.bind(0, N) ]; + return [ A, appendElements, runEachAndClear.bind(0, j) ]; }; const createTrinsicUpdate = (t, n) => { - const {L: e} = t; + const {I: o} = t; const [s] = n; return t => { - const {M: n} = getEnvironment(); - const {dt: o} = s(); + const {R: n} = getEnvironment(); + const {dt: e} = s(); const {_t: c} = t; - const i = (e || !n) && c; + const i = (o || !n) && c; if (i) { - style(e, { - height: o ? "" : "100%" + style(o, { + height: e ? "" : "100%" }); } return { @@ -1404,48 +1380,48 @@ const createTrinsicUpdate = (t, n) => { }; const createPaddingUpdate = (t, n) => { - const [e, s] = n; - const {J: o, A: c, K: i, lt: r} = t; - const [a, l] = createCache({ - u: equalTRBL, - o: topRightBottomLeft() - }, topRightBottomLeft.bind(0, o, "padding", "")); - return (t, n, o) => { - let [u, f] = l(o); - const {P: d, M: _} = getEnvironment(); - const {vt: g} = e(); - const {gt: h, ht: p, bt: v} = t; - const [b, w] = n("paddingAbsolute"); - const y = !_ && p; - if (h || f || y) { - [u, f] = a(o); + const [o, s] = n; + const {J: e, A: c, K: i, lt: r} = t; + const [l, a] = createCache({ + _: equalTRBL, + u: topRightBottomLeft() + }, topRightBottomLeft.bind(0, e, "padding", "")); + return (t, n, e) => { + let [f, u] = a(e); + const {L: d, R: _} = getEnvironment(); + const {vt: g} = o(); + const {gt: h, ht: v, wt: w} = t; + const [p, b] = n("paddingAbsolute"); + const y = !_ && v; + if (h || u || y) { + [f, u] = l(e); } - const m = !r && (w || v || f); + const m = !r && (b || w || u); if (m) { - const t = !b || !c && !d; - const n = u.r + u.l; - const e = u.t + u.b; - const o = { + const t = !p || !c && !d; + const n = f.r + f.l; + const o = f.t + f.b; + const e = { marginRight: t && !g ? -n : 0, - marginBottom: t ? -e : 0, + marginBottom: t ? -o : 0, marginLeft: t && g ? -n : 0, - top: t ? -u.t : 0, - right: t ? g ? -u.r : "auto" : 0, - left: t ? g ? "auto" : -u.l : 0, + top: t ? -f.t : 0, + right: t ? g ? -f.r : "auto" : 0, + left: t ? g ? "auto" : -f.l : 0, width: t ? `calc(100% + ${n}px)` : "" }; const r = { - paddingTop: t ? u.t : 0, - paddingRight: t ? u.r : 0, - paddingBottom: t ? u.b : 0, - paddingLeft: t ? u.l : 0 + paddingTop: t ? f.t : 0, + paddingRight: t ? f.r : 0, + paddingBottom: t ? f.b : 0, + paddingLeft: t ? f.l : 0 }; - style(c || i, o); + style(c || i, e); style(i, r); s({ - A: u, - wt: !t, - G: c ? r : assignDeep({}, o, r) + A: f, + bt: !t, + U: c ? r : assignDeep({}, e, r) }); } return { @@ -1456,96 +1432,96 @@ const createPaddingUpdate = (t, n) => { const {max: ht} = Math; -const pt = "visible"; +const vt = "visible"; -const vt = "hidden"; +const wt = "hidden"; -const bt = 42; +const pt = 42; -const wt = { - u: equalWH, - o: { +const bt = { + _: equalWH, + u: { w: 0, h: 0 } }; const yt = { - u: equalXY, - o: { - x: vt, - y: vt + _: equalXY, + u: { + x: wt, + y: wt } }; -const getOverflowAmount = (t, n, e) => { +const getOverflowAmount = (t, n, o) => { const s = window.devicePixelRatio % 1 !== 0 ? 1 : 0; - const o = { - w: ht(0, t.w - n.w - ht(0, e.w)), - h: ht(0, t.h - n.h - ht(0, e.h)) + const e = { + w: ht(0, t.w - n.w - ht(0, o.w)), + h: ht(0, t.h - n.h - ht(0, o.h)) }; return { - w: o.w > s ? o.w : 0, - h: o.h > s ? o.h : 0 + w: e.w > s ? e.w : 0, + h: e.h > s ? e.h : 0 }; }; -const conditionalClass = (t, n, e) => e ? addClass(t, n) : removeClass(t, n); +const conditionalClass = (t, n, o) => o ? addClass(t, n) : removeClass(t, n); -const overflowIsVisible = t => 0 === t.indexOf(pt); +const overflowIsVisible = t => 0 === t.indexOf(vt); const createOverflowUpdate = (t, n) => { - const [e, s] = n; - const {J: o, A: c, K: i, tt: r, lt: a, ft: l} = t; - const {T: u, M: f, P: d, D: _} = getEnvironment(); + const [o, s] = n; + const {J: e, A: c, K: i, tt: r, lt: l, ut: a} = t; + const {T: f, R: u, L: d, P: _} = getEnvironment(); const g = getPlugins()[dt]; - const h = !a && !d && (_.x || _.y); - const [p, v] = createCache(wt, fractionalSize.bind(0, i)); - const [b, w] = createCache(wt, scrollSize.bind(0, i)); - const [y, $] = createCache(wt); - const [A] = createCache(yt); + const h = !l && !d && (_.x || _.y); + const [v, w] = createCache(bt, fractionalSize.bind(0, i)); + const [p, b] = createCache(bt, scrollSize.bind(0, i)); + const [y, O] = createCache(bt); + const [z] = createCache(yt); const fixFlexboxGlue = (t, n) => { style(i, { height: "" }); if (n) { - const {wt: n, A: s} = e(); + const {bt: n, A: s} = o(); const {St: c, W: r} = t; - const a = fractionalSize(o); - const l = clientSize(o); - const u = "content-box" === style(i, "boxSizing"); - const f = n || u ? s.b + s.t : 0; - const d = !(_.x && u); + const l = fractionalSize(e); + const a = clientSize(e); + const f = "content-box" === style(i, "boxSizing"); + const u = n || f ? s.b + s.t : 0; + const d = !(_.x && f); style(i, { - height: l.h + a.h + (c.x && d ? r.x : 0) - f + height: a.h + l.h + (c.x && d ? r.x : 0) - u }); } }; const getViewportOverflowState = (t, n) => { - const e = !d && !t ? bt : 0; - const getStatePerAxis = (t, s, o) => { + const o = !d && !t ? pt : 0; + const getStatePerAxis = (t, s, e) => { const c = style(i, t); const r = n ? n[t] : c; - const a = "scroll" === r; - const l = s ? e : o; - const u = a && !d ? l : 0; - const f = s && !!e; - return [ c, a, u, f ]; + const l = "scroll" === r; + const a = s ? o : e; + const f = l && !d ? a : 0; + const u = s && !!o; + return [ c, l, f, u ]; }; - const [s, o, c, r] = getStatePerAxis("overflowX", _.x, u.x); - const [a, l, f, g] = getStatePerAxis("overflowY", _.y, u.y); + const [s, e, c, r] = getStatePerAxis("overflowX", _.x, f.x); + const [l, a, u, g] = getStatePerAxis("overflowY", _.y, f.y); return { xt: { x: s, - y: a + y: l }, St: { - x: o, - y: l + x: e, + y: a }, W: { x: c, - y: f + y: u }, X: { x: r, @@ -1553,91 +1529,91 @@ const createOverflowUpdate = (t, n) => { } }; }; - const setViewportOverflowState = (t, n, e, s) => { + const setViewportOverflowState = (t, n, o, s) => { const setAxisOverflowStyle = (t, n) => { - const e = overflowIsVisible(t); - const s = n && e && t.replace(`${pt}-`, "") || ""; - return [ n && !e ? t : "", overflowIsVisible(s) ? "hidden" : s ]; + const o = overflowIsVisible(t); + const s = n && o && t.replace(`${vt}-`, "") || ""; + return [ n && !o ? t : "", overflowIsVisible(s) ? "hidden" : s ]; }; - const [o, c] = setAxisOverflowStyle(e.x, n.x); - const [i, r] = setAxisOverflowStyle(e.y, n.y); - s.overflowX = c && i ? c : o; - s.overflowY = r && o ? r : i; + const [e, c] = setAxisOverflowStyle(o.x, n.x); + const [i, r] = setAxisOverflowStyle(o.y, n.y); + s.overflowX = c && i ? c : e; + s.overflowY = r && e ? r : i; return getViewportOverflowState(t, s); }; - const hideNativeScrollbars = (t, n, s, o) => { + const hideNativeScrollbars = (t, n, s, e) => { const {W: c, X: i} = t; - const {x: r, y: a} = i; - const {x: l, y: u} = c; - const {G: f} = e(); + const {x: r, y: l} = i; + const {x: a, y: f} = c; + const {U: u} = o(); const d = n ? "marginLeft" : "marginRight"; const _ = n ? "paddingLeft" : "paddingRight"; - const g = f[d]; - const h = f.marginBottom; - const p = f[_]; - const v = f.paddingBottom; - o.width = `calc(100% + ${u + -1 * g}px)`; - o[d] = -u + g; - o.marginBottom = -l + h; + const g = u[d]; + const h = u.marginBottom; + const v = u[_]; + const w = u.paddingBottom; + e.width = `calc(100% + ${f + -1 * g}px)`; + e[d] = -f + g; + e.marginBottom = -a + h; if (s) { - o[_] = p + (a ? u : 0); - o.paddingBottom = v + (r ? l : 0); + e[_] = v + (l ? f : 0); + e.paddingBottom = w + (r ? a : 0); } }; - const [L, T] = g ? g.q(h, i, r, e, getViewportOverflowState, hideNativeScrollbars) : [ () => h, () => [ noop ] ]; + const [A, I] = g ? g.N(h, i, r, o, getViewportOverflowState, hideNativeScrollbars) : [ () => h, () => [ noop ] ]; return (t, n, r) => { - const {gt: u, Ct: g, ht: h, yt: E, _t: P, bt: I} = t; - const {dt: j, vt: M} = e(); - const [H, N] = n("nativeScrollbarsOverlaid.show"); - const [R, F] = n("overflow"); - const V = H && _.x && _.y; - const k = !a && !f && (u || h || g || N || P); - const B = overflowIsVisible(R.x); - const U = overflowIsVisible(R.y); - const Y = B || U; - let q = v(r); - let G = w(r); - let W = $(r); + const {gt: f, Ct: g, ht: h, yt: L, _t: M, wt: H} = t; + const {dt: E, vt: R} = o(); + const [D, j] = n("nativeScrollbarsOverlaid.show"); + const [V, B] = n("overflow"); + const k = D && _.x && _.y; + const F = !l && !u && (f || h || g || j || M); + const Y = overflowIsVisible(V.x); + const q = overflowIsVisible(V.y); + const G = Y || q; + let N = w(r); + let U = b(r); + let W = O(r); let X; - if (N && d) { - l(z, O, !V); + if (j && d) { + a(T, $, !k); } - if (k) { - X = getViewportOverflowState(V); - fixFlexboxGlue(X, j); + if (F) { + X = getViewportOverflowState(k); + fixFlexboxGlue(X, E); } - if (u || E || h || I || N) { - if (Y) { - l(D, C, false); + if (f || L || h || H || j) { + if (G) { + a(P, C, false); } - const [t, n] = T(V, M, X); - const [e, s] = q = p(r); - const [o, c] = G = b(r); - const a = clientSize(i); - let u = o; - let f = a; + const [t, n] = I(k, R, X); + const [o, s] = N = v(r); + const [e, c] = U = p(r); + const l = clientSize(i); + let f = e; + let u = l; t(); - if ((c || s || N) && n && !V && L(n, o, e, M)) { - f = clientSize(i); - u = scrollSize(i); + if ((c || s || j) && n && !k && A(n, e, o, R)) { + u = clientSize(i); + f = scrollSize(i); } W = y(getOverflowAmount({ - w: ht(o.w, u.w), - h: ht(o.h, u.h) + w: ht(e.w, f.w), + h: ht(e.h, f.h) }, { - w: f.w + ht(0, a.w - o.w), - h: f.h + ht(0, a.h - o.h) - }, e), r); + w: u.w + ht(0, l.w - e.w), + h: u.h + ht(0, l.h - e.h) + }, o), r); } const [J, K] = W; - const [Q, Z] = G; - const [tt, nt] = q; - const et = { + const [Q, Z] = U; + const [tt, nt] = N; + const ot = { x: J.w > 0, y: J.h > 0 }; - const st = B && U && (et.x || et.y) || B && et.x && !et.y || U && et.y && !et.x; - if (E || I || nt || Z || K || F || N || k) { + const st = Y && q && (ot.x || ot.y) || Y && ot.x && !ot.y || q && ot.y && !ot.x; + if (L || H || nt || Z || K || B || j || F) { const t = { marginRight: 0, marginBottom: 0, @@ -1646,82 +1622,82 @@ const createOverflowUpdate = (t, n) => { overflowY: "", overflowX: "" }; - const n = setViewportOverflowState(V, et, R, t); - const e = L(n, Q, tt, M); - if (!a) { - hideNativeScrollbars(n, M, e, t); + const n = setViewportOverflowState(k, ot, V, t); + const o = A(n, Q, tt, R); + if (!l) { + hideNativeScrollbars(n, R, o, t); } - if (k) { - fixFlexboxGlue(n, j); + if (F) { + fixFlexboxGlue(n, E); } - if (a) { - attr(o, S, t.overflowX); - attr(o, x, t.overflowY); + if (l) { + attr(e, S, t.overflowX); + attr(e, x, t.overflowY); } else { style(i, t); } } - attrClass(o, m, C, st); - conditionalClass(c, D, st); - !a && conditionalClass(i, D, Y); - const [ot, ct] = A(getViewportOverflowState(V).xt); + attrClass(e, m, C, st); + conditionalClass(c, P, st); + !l && conditionalClass(i, P, G); + const [et, ct] = z(getViewportOverflowState(k).xt); s({ - xt: ot, - Ot: { + xt: et, + $t: { x: J.w, y: J.h }, - $t: et + Ot: ot }); return { - At: ct, - Lt: K + zt: ct, + At: K }; }; }; -const prepareUpdateHints = (t, n, e) => { +const prepareUpdateHints = (t, n, o) => { const s = {}; - const o = n || {}; - const c = keys(t).concat(keys(o)); + const e = n || {}; + const c = keys(t).concat(keys(e)); each(c, (n => { const c = t[n]; - const i = o[n]; - s[n] = !!(e || c || i); + const i = e[n]; + s[n] = !!(o || c || i); })); return s; }; const createStructureSetupUpdate = (t, n) => { - const {K: e} = t; - const {P: s, D: o, M: c} = getEnvironment(); - const i = !s && (o.x || o.y); + const {K: o} = t; + const {L: s, P: e, R: c} = getEnvironment(); + const i = !s && (e.x || e.y); const r = [ createTrinsicUpdate(t, n), createPaddingUpdate(t, n), createOverflowUpdate(t, n) ]; return (t, n, s) => { - const o = prepareUpdateHints(assignDeep({ + const e = prepareUpdateHints(assignDeep({ gt: false, yt: false, - bt: false, + wt: false, _t: false, - Lt: false, At: false, + zt: false, Ct: false, ht: false }, n), {}, s); - const a = i || !c; - const l = a && scrollLeft(e); - const u = a && scrollTop(e); - let f = o; + const l = i || !c; + const a = l && scrollLeft(o); + const f = l && scrollTop(o); + let u = e; each(r, (n => { - f = prepareUpdateHints(f, n(f, t, !!s) || {}, s); + u = prepareUpdateHints(u, n(u, t, !!s) || {}, s); })); - if (isNumber(l)) { - scrollLeft(e, l); + if (isNumber(a)) { + scrollLeft(o, a); } - if (isNumber(u)) { - scrollTop(e, u); + if (isNumber(f)) { + scrollTop(o, f); } - return f; + return u; }; }; @@ -1735,163 +1711,163 @@ const getElmDirectionIsRTL = t => "rtl" === style(t, "direction"); const domRectHasDimensions = t => t && (t.height || t.width); -const createSizeObserver = (t, n, e) => { - const {Tt: s = false, zt: o = false} = e || {}; - const c = getPlugins()[lt]; - const {j: i} = getEnvironment(); - const r = createDOM(`
`); - const a = r[0]; - const l = a.firstChild; - const f = getElmDirectionIsRTL.bind(0, a); +const createSizeObserver = (t, n, o) => { + const {It: s = false, Tt: e = false} = o || {}; + const c = getPlugins()[at]; + const {H: i} = getEnvironment(); + const r = createDOM(`
`); + const l = r[0]; + const a = l.firstChild; + const u = getElmDirectionIsRTL.bind(0, l); const [d] = createCache({ - o: void 0, - _: true, - u: (t, n) => !(!t || !domRectHasDimensions(t) && domRectHasDimensions(n)) + u: void 0, + g: true, + _: (t, n) => !(!t || !domRectHasDimensions(t) && domRectHasDimensions(n)) }); const onSizeChangedCallbackProxy = t => { - const e = isArray(t) && t.length > 0 && isObject(t[0]); - const o = !e && isBoolean(t[0]); + const o = isArray(t) && t.length > 0 && isObject(t[0]); + const e = !o && isBoolean(t[0]); let c = false; let r = false; - let l = true; - if (e) { - const [n, , e] = d(t.pop().contentRect); + let a = true; + if (o) { + const [n, , o] = d(t.pop().contentRect); const s = domRectHasDimensions(n); - const o = domRectHasDimensions(e); - c = !e || !s; - r = !o && s; - l = !c; - } else if (o) { - [, l] = t; + const e = domRectHasDimensions(o); + c = !o || !s; + r = !e && s; + a = !c; + } else if (e) { + [, a] = t; } else { r = true === t; } - if (s && l) { - const n = o ? t[0] : getElmDirectionIsRTL(a); - scrollLeft(a, n ? i.n ? -xt : i.i ? 0 : xt : xt); - scrollTop(a, xt); + if (s && a) { + const n = e ? t[0] : getElmDirectionIsRTL(l); + scrollLeft(l, n ? i.n ? -xt : i.i ? 0 : xt : xt); + scrollTop(l, xt); } if (!c) { n({ - gt: !o, - Dt: o ? t : void 0, - zt: !!r + gt: !e, + Pt: e ? t : void 0, + Tt: !!r }); } }; const _ = []; - let g = o ? onSizeChangedCallbackProxy : false; + let g = e ? onSizeChangedCallbackProxy : false; let h; - if (u) { - const t = new u(onSizeChangedCallbackProxy); - t.observe(l); + if (f) { + const t = new f(onSizeChangedCallbackProxy); + t.observe(a); push(_, (() => { t.disconnect(); })); } else if (c) { - const [t, n] = c.U(l, onSizeChangedCallbackProxy, o); + const [t, n] = c.q(a, onSizeChangedCallbackProxy, e); g = t; push(_, n); } if (s) { h = createCache({ - o: !f() - }, f); + u: !u() + }, u); const [t] = h; - push(_, on(a, St, (n => { - const e = t(); - const [s, o] = e; - if (o) { - removeClass(l, "ltr rtl"); + push(_, on(l, St, (n => { + const o = t(); + const [s, e] = o; + if (e) { + removeClass(a, "ltr rtl"); if (s) { - addClass(l, "rtl"); + addClass(a, "rtl"); } else { - addClass(l, "ltr"); + addClass(a, "ltr"); } - onSizeChangedCallbackProxy(e); + onSizeChangedCallbackProxy(o); } stopAndPrevent(n); }))); } if (g) { - addClass(a, P); - push(_, on(a, mt, g, { - $: !!u + addClass(l, M); + push(_, on(l, mt, g, { + O: !!f })); } - prependChildren(t, a); + prependChildren(t, l); return () => { runEachAndClear(_); - removeElements(a); + removeElements(l); }; }; const isHeightIntrinsic = t => 0 === t.h || t.isIntersecting || t.intersectionRatio > 0; const createTrinsicObserver = (t, n) => { - const e = createDiv(N); + const o = createDiv(j); const s = []; - const [o] = createCache({ - o: false + const [e] = createCache({ + u: false }); const triggerOnTrinsicChangedCallback = t => { if (t) { - const e = o(isHeightIntrinsic(t)); - const [, s] = e; + const o = e(isHeightIntrinsic(t)); + const [, s] = o; if (s) { - n(e); + n(o); } } }; - if (l) { - const n = new l((t => { + if (a) { + const n = new a((t => { if (t && t.length > 0) { triggerOnTrinsicChangedCallback(t.pop()); } }), { root: t }); - n.observe(e); + n.observe(o); push(s, (() => { n.disconnect(); })); } else { const onSizeChanged = () => { - const t = offsetSize(e); + const t = offsetSize(o); triggerOnTrinsicChangedCallback(t); }; - push(s, createSizeObserver(e, onSizeChanged)); + push(s, createSizeObserver(o, onSizeChanged)); onSizeChanged(); } - prependChildren(t, e); + prependChildren(t, o); return () => { runEachAndClear(s); - removeElements(e); + removeElements(o); }; }; -const createEventContentChange = (t, n, e) => { +const createEventContentChange = (t, n, o) => { let s; - let o = false; + let e = false; const destroy = () => { - o = true; + e = true; }; const updateElements = c => { - if (e) { - const i = e.reduce(((n, e) => { - if (e) { - const s = e[0]; - const o = e[1]; - const i = o && s && (c ? c(s) : find(s, t)); - if (i && i.length && o && isString(o)) { - push(n, [ i, o.trim() ], true); + if (o) { + const i = o.reduce(((n, o) => { + if (o) { + const s = o[0]; + const e = o[1]; + const i = e && s && (c ? c(s) : find(s, t)); + if (i && i.length && e && isString(e)) { + push(n, [ i, e.trim() ], true); } } return n; }), []); - each(i, (t => each(t[0], (e => { + each(i, (t => each(t[0], (o => { const c = t[1]; - const i = s.get(e); + const i = s.get(o); if (i) { const t = i[0]; const n = i[1]; @@ -1899,161 +1875,161 @@ const createEventContentChange = (t, n, e) => { n(); } } - const r = on(e, c, (t => { - if (o) { + const r = on(o, c, (t => { + if (e) { r(); - s.delete(e); + s.delete(o); } else { n(t); } })); - s.set(e, [ c, r ]); + s.set(o, [ c, r ]); })))); } }; - if (e) { + if (o) { s = new WeakMap; updateElements(); } return [ destroy, updateElements ]; }; -const createDOMObserver = (t, n, e, s) => { - let o = false; - const {Et: c, Pt: i, It: r, jt: l, Mt: u, Ht: f} = s || {}; +const createDOMObserver = (t, n, o, s) => { + let e = false; + const {Lt: c, Mt: i, Ht: r, Et: a, Rt: f, Dt: u} = s || {}; const [d, _] = createEventContentChange(t, debounce((() => { - if (o) { - e(true); + if (e) { + o(true); } }), { - p: 33, - v: 99 + v: 33, + p: 99 }), r); const g = c || []; const h = i || []; - const p = g.concat(h); - const observerCallback = o => { - const c = u || noop; - const i = f || noop; + const v = g.concat(h); + const observerCallback = e => { + const c = f || noop; + const i = u || noop; const r = []; - const a = []; + const l = []; let d = false; let g = false; - let p = false; - each(o, (e => { - const {attributeName: o, target: u, type: f, oldValue: _, addedNodes: v} = e; - const b = "attributes" === f; - const w = "childList" === f; - const y = t === u; - const m = b && isString(o) ? attr(u, o) : 0; + let v = false; + each(e, (o => { + const {attributeName: e, target: f, type: u, oldValue: _, addedNodes: w} = o; + const p = "attributes" === u; + const b = "childList" === u; + const y = t === f; + const m = p && isString(e) ? attr(f, e) : 0; const S = 0 !== m && _ !== m; - const x = indexOf(h, o) > -1 && S; + const x = indexOf(h, e) > -1 && S; if (n && !y) { - const n = !b; - const r = b && x; - const f = r && l && is(u, l); - const d = f ? !c(u, o, _, m) : n || r; - const h = d && !i(e, !!f, t, s); - push(a, v); + const n = !p; + const r = p && x; + const u = r && a && is(f, a); + const d = u ? !c(f, e, _, m) : n || r; + const h = d && !i(o, !!u, t, s); + push(l, w); g = g || h; - p = p || w; + v = v || b; } - if (!n && y && S && !c(u, o, _, m)) { - push(r, o); + if (!n && y && S && !c(f, e, _, m)) { + push(r, e); d = d || x; } })); - if (p && !isEmptyArray(a)) { - _((t => a.reduce(((n, e) => { - push(n, find(t, e)); - return is(e, t) ? push(n, e) : n; + if (v && !isEmptyArray(l)) { + _((t => l.reduce(((n, o) => { + push(n, find(t, o)); + return is(o, t) ? push(n, o) : n; }), []))); } if (n) { - g && e(false); + g && o(false); } else if (!isEmptyArray(r) || d) { - e(r, d); + o(r, d); } }; - const v = new a(observerCallback); - v.observe(t, { + const w = new l(observerCallback); + w.observe(t, { attributes: true, attributeOldValue: true, - attributeFilter: p, + attributeFilter: v, subtree: n, childList: n, characterData: n }); - o = true; + e = true; return [ () => { - if (o) { + if (e) { d(); - v.disconnect(); - o = false; + w.disconnect(); + e = false; } }, () => { - if (o) { - observerCallback(v.takeRecords()); + if (e) { + observerCallback(w.takeRecords()); } } ]; }; const Ct = `[${m}]`; -const Ot = `.${A}`; +const $t = `.${z}`; -const $t = [ "tabindex" ]; +const Ot = [ "tabindex" ]; -const At = [ "wrap", "cols", "rows" ]; +const zt = [ "wrap", "cols", "rows" ]; -const Lt = [ "id", "class", "style", "open" ]; +const At = [ "id", "class", "style", "open" ]; -const createStructureSetupObservers = (t, n, e) => { +const createStructureSetupObservers = (t, n, o) => { let s; - let o; + let e; let c; const [, i] = n; - const {J: r, K: a, L: l, ct: f, lt: d, ut: _, ft: g} = t; - const {P: h, M: p} = getEnvironment(); - const [v] = createCache({ - u: equalWH, - o: { + const {J: r, K: l, I: a, ct: u, lt: d, ft: _, ut: g} = t; + const {L: h, R: v} = getEnvironment(); + const [w] = createCache({ + _: equalWH, + u: { w: 0, h: 0 } }, (() => { - const t = _(D, C); - t && g(D, C); - const n = scrollSize(l); - const e = scrollSize(a); - const s = fractionalSize(a); - t && g(D, C, true); + const t = _(P, C); + t && g(P, C); + const n = scrollSize(a); + const o = scrollSize(l); + const s = fractionalSize(l); + t && g(P, C, true); return { - w: e.w + n.w + s.w, - h: e.h + n.h + s.h + w: o.w + n.w + s.w, + h: o.h + n.h + s.h }; })); - const b = f ? At : Lt.concat(At); - const w = debounce(e, { - p: () => s, - v: () => o, + const p = u ? zt : At.concat(zt); + const b = debounce(o, { + v: () => s, + p: () => e, m(t, n) { - const [e] = t; + const [o] = t; const [s] = n; - return [ keys(e).concat(keys(s)).reduce(((t, n) => { - t[n] = e[n] || s[n]; + return [ keys(o).concat(keys(s)).reduce(((t, n) => { + t[n] = o[n] || s[n]; return t; }), {}) ]; } }); const updateViewportAttrsFromHost = t => { - each(t || $t, (t => { - if (indexOf($t, t) > -1) { + each(t || Ot, (t => { + if (indexOf(Ot, t) > -1) { const n = attr(r, t); if (isString(n)) { - attr(a, t, n); + attr(l, t, n); } else { - removeAttr(a, t); + removeAttr(l, t); } } })); @@ -2063,28 +2039,28 @@ const createStructureSetupObservers = (t, n, e) => { i({ dt: n }); - e({ + o({ _t: s }); }; - const onSizeChanged = ({gt: t, Dt: n, zt: s}) => { - const o = !t || s ? e : w; + const onSizeChanged = ({gt: t, Pt: n, Tt: s}) => { + const e = !t || s ? o : b; let c = false; if (n) { - const [t, e] = n; - c = e; + const [t, o] = n; + c = o; i({ vt: t }); } - o({ + e({ gt: t, - bt: c + wt: c }); }; const onContentMutation = t => { - const [, n] = v(); - const s = t ? e : w; + const [, n] = w(); + const s = t ? o : b; if (n) { s({ ht: true @@ -2093,64 +2069,64 @@ const createStructureSetupObservers = (t, n, e) => { }; const onHostMutation = (t, n) => { if (n) { - w({ + b({ Ct: true }); } else if (!d) { updateViewportAttrsFromHost(t); } }; - const y = (l || !p) && createTrinsicObserver(r, onTrinsicChanged); + const y = (a || !v) && createTrinsicObserver(r, onTrinsicChanged); const m = !d && createSizeObserver(r, onSizeChanged, { - zt: true, - Tt: !h + Tt: true, + It: !h }); const [S] = createDOMObserver(r, false, onHostMutation, { - Pt: Lt, - Et: Lt.concat($t) + Mt: At, + Lt: At.concat(Ot) }); - const x = d && new u(onSizeChanged.bind(0, { + const x = d && new f(onSizeChanged.bind(0, { gt: true })); x && x.observe(r); updateViewportAttrsFromHost(); return [ t => { const [n] = t("updating.ignoreMutation"); - const [e, i] = t("updating.attributes"); - const [r, u] = t("updating.elementEvents"); - const [f, d] = t("updating.debounce"); - const _ = u || i; + const [o, i] = t("updating.attributes"); + const [r, f] = t("updating.elementEvents"); + const [u, d] = t("updating.debounce"); + const _ = f || i; const ignoreMutationFromOptions = t => isFunction(n) && n(t); if (_) { if (c) { c[1](); c[0](); } - c = createDOMObserver(l || a, true, onContentMutation, { - Pt: b.concat(e || []), - Et: b.concat(e || []), - It: r, - jt: Ct, - Ht: (t, n) => { - const {target: e, attributeName: s} = t; - const o = !n && s ? liesBetween(e, Ct, Ot) : false; - return o || !!ignoreMutationFromOptions(t); + c = createDOMObserver(a || l, true, onContentMutation, { + Mt: p.concat(o || []), + Lt: p.concat(o || []), + Ht: r, + Et: Ct, + Dt: (t, n) => { + const {target: o, attributeName: s} = t; + const e = !n && s ? liesBetween(o, Ct, $t) : false; + return e || !!ignoreMutationFromOptions(t); } }); } if (d) { - w.S(); - if (isArray(f)) { - const t = f[0]; - const n = f[1]; + b.S(); + if (isArray(u)) { + const t = u[0]; + const n = u[1]; s = isNumber(t) ? t : false; - o = isNumber(n) ? n : false; - } else if (isNumber(f)) { - s = f; - o = false; + e = isNumber(n) ? n : false; + } else if (isNumber(u)) { + s = u; + e = false; } else { s = false; - o = false; + e = false; } } }, () => { @@ -2162,15 +2138,15 @@ const createStructureSetupObservers = (t, n, e) => { } ]; }; -const Tt = { +const It = { A: { t: 0, r: 0, b: 0, l: 0 }, - wt: false, - G: { + bt: false, + U: { marginRight: 0, marginBottom: 0, marginLeft: 0, @@ -2179,7 +2155,7 @@ const Tt = { paddingBottom: 0, paddingLeft: 0 }, - Ot: { + $t: { x: 0, y: 0 }, @@ -2187,7 +2163,7 @@ const Tt = { x: "hidden", y: "hidden" }, - $t: { + Ot: { x: false, y: false }, @@ -2196,125 +2172,125 @@ const Tt = { }; const createStructureSetup = (t, n) => { - const e = createOptionCheck(n, {}); - const s = createState(Tt); - const [o, c, i] = createEventListenerHub(); + const o = createOptionCheck(n, {}); + const s = createState(It); + const [e, c, i] = createEventListenerHub(); const [r] = s; - const [a, l, u] = createStructureSetupElements(t); - const f = createStructureSetupUpdate(a, s); - const [d, _] = createStructureSetupObservers(a, s, (t => { - i("u", [ f(e, t), {}, false ]); + const [l, a, f] = createStructureSetupElements(t); + const u = createStructureSetupUpdate(l, s); + const [d, _] = createStructureSetupObservers(l, s, (t => { + i("u", [ u(o, t), {}, false ]); })); const g = r.bind(0); - g.Nt = t => { - o("u", t); + g.jt = t => { + e("u", t); }; - g.Rt = l; - g.Ft = a; - return [ (t, e) => { - const s = createOptionCheck(n, t, e); + g.Vt = a; + g.Bt = l; + return [ (t, o) => { + const s = createOptionCheck(n, t, o); d(s); - i("u", [ f(s, {}, e), t, !!e ]); + i("u", [ u(s, {}, o), t, !!o ]); }, g, () => { c(); _(); - u(); + f(); } ]; }; const generateScrollbarDOM = t => { - const n = createDiv(`${R} ${t}`); - const e = createDiv(k); - const s = createDiv(B); - appendChildren(n, e); - appendChildren(e, s); + const n = createDiv(`${V} ${t}`); + const o = createDiv(F); + const s = createDiv(Y); + appendChildren(n, o); + appendChildren(o, s); return { - Vt: n, - kt: e, - Bt: s + kt: n, + Ft: o, + Yt: s }; }; const createScrollbarsSetupElements = (t, n) => { - const {N: e} = getEnvironment(); - const {Ut: s} = e(); - const {Z: o, J: c, K: i, rt: r} = n; - const a = !r && t.scrollbarsSlot; - const l = dynamicInitializationElement([ o, c, i ], (() => c), s, a); - const u = generateScrollbarDOM(F); - const f = generateScrollbarDOM(V); - const {Vt: d} = u; - const {Vt: _} = f; + const {j: o} = getEnvironment(); + const {qt: s} = o(); + const {Z: e, J: c, K: i, rt: r} = n; + const l = !r && t.scrollbarsSlot; + const a = dynamicInitializationElement([ e, c, i ], (() => c), s, l); + const f = generateScrollbarDOM(B); + const u = generateScrollbarDOM(k); + const {kt: d} = f; + const {kt: _} = u; const appendElements = () => { - appendChildren(l, d); - appendChildren(l, _); + appendChildren(a, d); + appendChildren(a, _); }; return [ { - Yt: u, - qt: f + Gt: f, + Nt: u }, appendElements, removeElements.bind(0, [ d, _ ]) ]; }; -const createScrollbarsSetup = (t, n, e) => { +const createScrollbarsSetup = (t, n, o) => { const s = createState({}); - const [o] = s; - const [c, i, r] = createScrollbarsSetupElements(t, e); - const a = o.bind(0); - a.Ft = c; - a.Rt = i; - return [ (t, e) => { - const s = createOptionCheck(n, t, e); + const [e] = s; + const [c, i, r] = createScrollbarsSetupElements(t, o); + const l = e.bind(0); + l.Bt = c; + l.Vt = i; + return [ (t, o) => { + const s = createOptionCheck(n, t, o); console.log(s); - }, a, () => { + }, l, () => { r(); } ]; }; -const zt = new Set; +const Tt = new Set; -const Dt = new WeakMap; +const Pt = new WeakMap; const addInstance = (t, n) => { - Dt.set(t, n); - zt.add(t); + Pt.set(t, n); + Tt.add(t); }; const removeInstance = t => { - Dt.delete(t); - zt.delete(t); + Pt.delete(t); + Tt.delete(t); }; -const getInstance = t => Dt.get(t); +const getInstance = t => Pt.get(t); -const OverlayScrollbars = (t, n, e) => { +const OverlayScrollbars = (t, n, o) => { let s = false; - const {F: o, D: c, H: i} = getEnvironment(); + const {B: e, P: c, D: i} = getEnvironment(); const r = getPlugins(); - const a = isHTMLElement(t) ? t : t.target; - const l = getInstance(a); - if (l) { - return l; + const l = isHTMLElement(t) ? t : t.target; + const a = getInstance(l); + if (a) { + return a; } - const u = r[ct]; + const f = r[ct]; const validateOptions = t => { const n = t || {}; - const e = u && u.U; - return e ? e(n, true) : n; + const o = f && f.q; + return o ? o(n, true) : n; }; - const f = assignDeep({}, o(), validateOptions(n)); - const [d, _, g] = createEventListenerHub(e); - const [h, p, v] = createStructureSetup(t, f); - const [b, w, y] = createScrollbarsSetup(t, f, p.Ft); + const u = assignDeep({}, e(), validateOptions(n)); + const [d, _, g] = createEventListenerHub(o); + const [h, v, w] = createStructureSetup(t, u); + const [p, b, y] = createScrollbarsSetup(t, u, v.Bt); const update = (t, n) => { h(t, n); - b(t, n); + p(t, n); }; const m = i(update.bind(0, {}, true)); const destroy = t => { - removeInstance(a); + removeInstance(l); m(); y(); - v(); + w(); s = true; g("destroyed", [ S, !!t ]); _(); @@ -2322,37 +2298,37 @@ const OverlayScrollbars = (t, n, e) => { const S = { options(t) { if (t) { - const n = getOptionsDiff(f, validateOptions(t)); + const n = getOptionsDiff(u, validateOptions(t)); if (!isEmptyObject(n)) { - assignDeep(f, n); + assignDeep(u, n); update(n); } } - return assignDeep({}, f); + return assignDeep({}, u); }, on: d, off: (t, n) => { t && n && _(t, n); }, state() { - const {Ot: t, xt: n, $t: e, A: o, wt: c} = p(); + const {$t: t, xt: n, Ot: o, A: e, bt: c} = v(); return assignDeep({}, { overflowAmount: t, overflowStyle: n, - hasOverflow: e, - padding: o, + hasOverflow: o, + padding: e, paddingAbsolute: c, destroyed: s }); }, elements() { - const {Z: t, J: n, A: e, K: s, L: o} = p.Ft; + const {Z: t, J: n, A: o, K: s, I: e} = v.Bt; return assignDeep({}, { target: t, host: n, - padding: e || s, + padding: o || s, viewport: s, - content: o || s + content: e || s }); }, update(t) { @@ -2367,28 +2343,28 @@ const OverlayScrollbars = (t, n, e) => { n(OverlayScrollbars, S); } })); - if (c.x && c.y && !f.nativeScrollbarsOverlaid.initialize) { + if (c.x && c.y && !u.nativeScrollbarsOverlaid.initialize) { destroy(true); return S; } - p.Rt(); - w.Rt(); - addInstance(a, S); + v.Vt(); + b.Vt(); + addInstance(l, S); g("initialized", [ S ]); - p.Nt(((t, n, e) => { - const {gt: s, bt: o, _t: c, Lt: i, At: r, ht: a, Ct: l} = t; + v.jt(((t, n, o) => { + const {gt: s, wt: e, _t: c, At: i, zt: r, ht: l, Ct: a} = t; g("updated", [ S, { updateHints: { sizeChanged: s, - directionChanged: o, + directionChanged: e, heightIntrinsicChanged: c, overflowAmountChanged: i, overflowStyleChanged: r, - contentMutation: a, - hostMutation: l + contentMutation: l, + hostMutation: a }, changedOptions: n, - force: e + force: o } ]); })); return S.update(true); @@ -2397,22 +2373,22 @@ const OverlayScrollbars = (t, n, e) => { OverlayScrollbars.plugin = addPlugin; OverlayScrollbars.env = () => { - const {T: t, D: n, P: e, j: s, M: o, I: c, k: i, B: r, N: a, R: l, F: u, V: f} = getEnvironment(); + const {T: t, P: n, L: o, H: s, R: e, M: c, F: i, Y: r, j: l, V: a, B: f, k: u} = getEnvironment(); return assignDeep({}, { scrollbarsSize: t, scrollbarsOverlaid: n, - scrollbarsHiding: e, + scrollbarsHiding: o, rtlScrollBehavior: s, - flexboxGlue: o, + flexboxGlue: e, cssCustomProperties: c, defaultInitializationStrategy: i, defaultDefaultOptions: r, - getInitializationStrategy: a, - setInitializationStrategy: l, - getDefaultOptions: u, - setDefaultOptions: f + getInitializationStrategy: l, + setInitializationStrategy: a, + getDefaultOptions: f, + setDefaultOptions: u }); }; -export { OverlayScrollbars, it as optionsValidationPlugin, _t as scrollbarsHidingPlugin, ut as sizeObserverPlugin }; +export { OverlayScrollbars, it as optionsValidationPlugin, _t as scrollbarsHidingPlugin, ft as sizeObserverPlugin }; //# sourceMappingURL=overlayscrollbars.esm.js.map diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 9427401..dc11e13 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/style.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/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/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: any[]) => any {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param 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 = (\r\n arr: ArrayLike | Set,\r\n args?: any[],\r\n keep?: boolean\r\n): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n !keep && arr.clear();\r\n } else {\r\n each(arr, runFn);\r\n !keep && (arr as any[]).splice && (arr as any[]).splice(0, arr.length);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X\r\n): T & U & V & W & X;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X,\r\n object5: Y\r\n): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { from } from 'support/utils/array';\r\nimport { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, 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: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (\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\r\n const events = new Map>();\r\n\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener[]\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n }\r\n\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener[]\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n }\r\n\r\n function triggerEvent(name: Name, args?: EventMap[Name]): void {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n }\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [\r\n typeof addEvent,\r\n typeof removeEvent,\r\n typeof triggerEvent\r\n ];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, PartialOptions } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n PartialOptions, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { PartialOptions } from 'typings';\r\nimport type { Plugin } from 'plugins';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\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 stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]\r\n );\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import { keys, attr, WH, style, addClass, removeClass, noop, each } from 'support';\r\nimport { getEnvironment } from 'environment';\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 { 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(): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: 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};\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: () => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = getEnvironment();\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n const { _flexboxGlue } = getEnvironment();\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 },\r\n};\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEachAndClear,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false | null | undefined;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarsHiding } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarsHiding;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n hostInitializationStrategy,\r\n targetStructureInitialization.host\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEachAndClear.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [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 _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [updateStructure(checkOptionsFallback, updateHints), {}, false]);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\r\n );\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n Plugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, withdrawn: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","o","_initialValue","u","_equal","_","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isUndefined","obj","undefined","isNull","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","type","key","cstr","ctor","ctorProto","prototype","hasOwnConstructor","hasOwnProperty","call","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","ElementNodeType","isElement","Element","each","source","callback","i","Object","keys","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","scrollLeft","scrollTop","style","styles","getSingleStyle","getStyles","getStylesResult","computedStyle","getComputedStyle","getCSSVal","reduce","result","setCSSVal","Node","ELEMENT_NODE","toString","replace","toLowerCase","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","Set","forEach","isEmptyArray","runEachAndClear","args","keep","runFn","fn","clear","splice","prop","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","p","_timeout","v","_maxDelay","m","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","removeEvent","eventSet","events","currListener","addEvent","set","triggerEvent","event","Map","initialListenerKeys","getPropByPath","path","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","envDOM","envElm","envChildElm","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarsSize","_nativeScrollbarsOverlaid","_nativeScrollbarsHiding","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","getEnvironment","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","contentArrangeCounter","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","_nativeScrollbarStyling","_nativeScrollbarIsOverlaid","I","create","_overflowUpdateSegment","doViewportArrange","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","M","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","G","_viewportPaddingStyle","W","_scrollbarsHideOffset","X","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","N","P","createUniqueViewportArrangeElement","_host","hostInitializationStrategy","_viewport","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","Z","J","A","K","L","tt","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","updateHints","dt","_heightIntrinsic","_t","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","vt","_directionIsRTL","gt","ht","bt","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","lt","ft","T","D","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","updateOverflowStyleCache","fixFlexboxGlue","heightIntrinsic","wt","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","Ct","_hostMutation","yt","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_direction","observeDirectionChange","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Et","_attributes","Pt","_styleChangingAttributes","It","_eventContentChange","jt","_nestedTargetSelector","Mt","_ignoreTargetChange","Ht","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","ct","ut","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","updateObservers","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","_scrollbarsSlot","environmentScrollbarSlot","rt","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","scrollbarsSetupState","log","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","F","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","Ot","xt","$t","pluginInstance","Lt","At","sizeChanged","hostMutation","j","k","B","R","V","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/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/environment.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/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\n\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: CreateCache = (\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache => {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport const isArrayLike = (obj: any): obj is ArrayLike => {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const isPlainObject = (obj: any): obj is PlainObject => {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n ): T & U & V & W & X & Y & Z;\r\n};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: AssignDeep = (\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z => {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const isEmptyObject = (obj: any): boolean => {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n};\r\n","import { from } from 'support/utils/array';\r\nimport { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): number;\r\n (elm: HTMLElement | false | null | undefined, value: number): void;\r\n (elm: HTMLElement | false | null | undefined, value?: number): number | void;\r\n};\r\n\r\nconst getSetProp = (\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n};\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport const attr = ((\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}) as Attr;\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, 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) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEachAndClear.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from, isEmptyArray } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name]\r\n ) => void;\r\n type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: RemoveEvent = (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void => {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n\r\n const addEvent: AddEvent = (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): (() => void) => {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n };\r\n\r\n const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n args?: EventMap[Name]\r\n ): void => {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [AddEvent, RemoveEvent, TriggerEvent];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, PartialOptions } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n PartialOptions, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { PartialOptions } from 'typings';\r\nimport type { Plugin } from 'plugins';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\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 stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]\r\n );\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import { keys, attr, WH, style, addClass, removeClass, noop, each } from 'support';\r\nimport { getEnvironment } from 'environment';\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 { 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(): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: 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};\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: () => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = getEnvironment();\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n const { _flexboxGlue } = getEnvironment();\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 },\r\n};\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEachAndClear,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false | null | undefined;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarsHiding } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarsHiding;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n hostInitializationStrategy,\r\n targetStructureInitialization.host\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEachAndClear.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [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 _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [updateStructure(checkOptionsFallback, updateHints), {}, false]);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\r\n );\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n Plugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, withdrawn: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","u","_initialValue","_","_equal","g","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","toString","hasOwnProperty","prototype","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","v","_timeout","p","_maxDelay","m","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","clear","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","envDOM","envElm","envChildElm","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarsSize","_nativeScrollbarsOverlaid","_nativeScrollbarsHiding","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","scrollbarSizeChanged","getEnvironment","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","contentArrangeCounter","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","_nativeScrollbarStyling","_nativeScrollbarIsOverlaid","M","create","_overflowUpdateSegment","doViewportArrange","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","R","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","U","_viewportPaddingStyle","W","_scrollbarsHideOffset","X","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","j","L","createUniqueViewportArrangeElement","_host","hostInitializationStrategy","_viewport","viewportInitializationStrategy","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","Z","J","A","K","I","tt","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","updateHints","dt","_heightIntrinsic","_t","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","paddingChanged","vt","_directionIsRTL","gt","ht","wt","_directionChanged","paddingAbsoluteChanged","contentMutation","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","lt","ut","T","P","updateSizeFraction","getCurrentSizeFraction","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","getCurrentOverflowAmountCache","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","Ct","_hostMutation","yt","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","redoViewportArrange","undoViewportArrangeOverflowState","sizeFractionChanged","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","overflowAmount","overflowAmountChanged","removeClipping","viewportArranged","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_direction","observeDirectionChange","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","updateResizeObserverContentRectCache","currVal","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","currRContentRect","prevContentRect","pop","contentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","Lt","_attributes","Mt","_styleChangingAttributes","Ht","_eventContentChange","Et","_nestedTargetSelector","Rt","_ignoreTargetChange","Dt","_ignoreContentChange","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","ct","ft","updateContentSizeCache","contentScroll","viewportScroll","fractional","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","elementEventsChanged","debounceValue","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","destroyElements","updateStructure","updateObservers","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","_scrollbarsSlot","environmentScrollbarSlot","rt","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","scrollbarsSetupState","log","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","B","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","$t","xt","Ot","pluginInstance","At","zt","sizeChanged","hostMutation","H","F","Y","V","k","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js index ed061d1..cc0775e 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -function t(t,e){const{o:n,u:o,_:r}=t;let i,s=n;const l=(t,e)=>{const n=s,l=t,c=e||(o?!o(n,l):n!==l);return(c||r)&&(s=l,i=n),[s,c,i]};return[e?t=>l(e(s,i),t):l,t=>[s,!!t,i]]}function e(t){return void 0===t}function n(t){return null===t}function o(t){return"number"==typeof t}function r(t){return"string"==typeof t}function i(t){return"function"==typeof t}function s(t){return Array.isArray(t)}function l(t){return"object"==typeof t&&!s(t)&&!n(t)}function c(t){const e=!!t&&t.length,n=o(e)&&e>-1&&e%1==0;return!(!(s(t)||!i(t)&&n)||e>0&&l(t)&&!(e-1 in t))}function a(t){if(!t||!l(t)||"object"!==_(t))return!1;let n;const o="constructor",r=t[o],i=r&&r.prototype,s=$.call(t,o),c=i&&$.call(i,"isPrototypeOf");if(r&&!s&&!c)return!1;for(n in t);return e(n)||$.call(t,n)}function d(t){const e=window.HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===m)}function u(t){const e=window.Element;return!!t&&(e?t instanceof e:t.nodeType===m)}function f(t,e){if(c(t))for(let n=0;ne(t[n],n,t)));return t}function h(t,e,o,r,l,c,d){const u=[e,o,r,l,c,d];return"object"==typeof t&&!n(t)||i(t)||(t={}),f(u,(e=>{f(E(e),(n=>{const o=e[n];if(t===o)return!0;const r=s(o);if(o&&(a(o)||r)){const e=t[n];let i=e;r&&!s(e)?i=[]:r||a(e)||(i={}),t[n]=h(i,o)}else t[n]=o}))})),t}function p(t){for(const e in t)return!1;return!0}function g(t,n,o,r){if(e(r))return o?o[t]:n;o&&(o[t]=r)}function w(t,n,o){if(e(o))return t?t.getAttribute(n):null;t&&t.setAttribute(n,o)}function b(t,e){return g("scrollLeft",0,t,e)}function v(t,e){return g("scrollTop",0,t,e)}function y(t,e){const n=r(e);if(s(e)||n){let o=n?"":{};if(t){const r=window.getComputedStyle(t,null);o=n?vt(t,r,e):e.reduce(((e,n)=>(e[n]=vt(t,r,n),e)),o)}return o}f(E(e),(n=>yt(t,n,e[n])))}const m=Node.ELEMENT_NODE,{toString:x,hasOwnProperty:$}=Object.prototype,_=t=>e(t)||n(t)?`${t}`:x.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),P=(t,e,n)=>t.indexOf(e,n),O=(t,e,n)=>(n||r(e)||!c(e)?t.push(e):Array.prototype.push.apply(t,e),t),L=t=>{if(Array.from&&t)return Array.from(t);const e=[];return t instanceof Set?t.forEach((t=>{O(e,t)})):f(t,(t=>{O(e,t)})),e},S=t=>!!t&&0===t.length,A=(t,e,n)=>{const o=t=>t&&t.apply(void 0,e||[]);t instanceof Set?(t.forEach(o),!n&&t.clear()):(f(t,o),!n&&t.splice&&t.splice(0,t.length))},T=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),E=t=>t?Object.keys(t):[],M=(t,e,n,o)=>{const r=w(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),w(t,e,L(i).join(" ").trim())},C=(t,e)=>{t&&t.removeAttribute(e)},z=Element.prototype,R=(t,e)=>{const n=[],o=e?u(e)?e:null:document;return o?O(n,o.querySelectorAll(t)):n},j=(t,e)=>!!u(t)&&(z.matches||z.msMatchesSelector).call(t,e),D=t=>t?L(t.childNodes):[],H=t=>t?t.parentElement:null,B=(t,e)=>{if(u(t)){const n=z.closest;if(n)return n.call(t,e);do{if(j(t,e))return t;t=H(t)}while(t)}return null},N=(t,e,n)=>{if(n){let o,r=e;t&&(c(n)?(o=document.createDocumentFragment(),f(n,(t=>{t===r&&(r=t.previousSibling),o.appendChild(t)}))):o=n,e&&(r?r!==e&&(r=r.nextSibling):r=t.firstChild),t.insertBefore(o,r||null))}},Y=(t,e)=>{N(t,null,e)},I=(t,e)=>{N(t,t&&t.firstChild,e)},k=(t,e)=>{N(H(t),t&&t.nextSibling,e)},F=t=>{if(c(t))f(L(t),(t=>F(t)));else if(t){const e=H(t);e&&e.removeChild(t)}},V=t=>{const e=document.createElement("div");return t&&w(e,"class",t),e},X=t=>{const e=V();return e.innerHTML=t.trim(),f(D(e),(t=>F(t)))},W=t=>t.charAt(0).toUpperCase()+t.slice(1),K=["-webkit-","-moz-","-o-","-ms-"],J=["WebKit","Moz","O","MS","webkit","moz","o","ms"],U={},q={},G=t=>{let e=q[t];if(T(q,t))return e;const n=W(t),o=V().style;return f(K,(r=>{const i=r.replace(/-/g,""),s=[t,r+t,i+n,W(i)+n];return!(e=s.find((t=>void 0!==o[t])))})),q[t]=e||""},Z=t=>{let e=U[t]||window[t];return T(U,t)||(f(J,(n=>(e=e||window[n+W(t)],!e))),U[t]=e),e},Q=Z("MutationObserver"),tt=Z("IntersectionObserver"),et=Z("ResizeObserver"),nt=Z("cancelAnimationFrame"),ot=Z("requestAnimationFrame"),rt=/[^\x20\t\r\n\f]+/g,it=(t,e,n)=>{let o,i=0,s=!1;if(t&&e&&r(e)){const r=e.match(rt)||[];for(s=r.length>0;o=r[i++];)s=!!n(t.classList,o)&&s}return s},st=(t,e)=>{it(t,e,((t,e)=>t.remove(e)))},lt=(t,e)=>(it(t,e,((t,e)=>t.add(e))),st.bind(0,t,e)),ct=(t,e,n,o)=>{if(t&&e){let r=!0;return f(n,(n=>{(o?o(t[n]):t[n])!==(o?o(e[n]):e[n])&&(r=!1)})),r}return!1},at=(t,e)=>ct(t,e,["w","h"]),dt=(t,e)=>ct(t,e,["x","y"]),ut=(t,e)=>ct(t,e,["t","r","b","l"]),ft=(t,e,n)=>ct(t,e,["width","height"],n&&(t=>Math.round(t))),ht=t=>{t&&window.clearTimeout(t),t&&nt(t)},pt=()=>{},gt=(t,e)=>{let n,r,s,l;const{p:c,v:a,m:d}=e||{},u=window.setTimeout,f=function(e){ht(n),ht(r),r=n=s=void 0,t.apply(this,e)},h=t=>d&&s?d(s,t):t,p=()=>{n&&f(h(l)||l)},g=function(){const t=L(arguments),e=i(c)?c():c,d=o(e)&&e>=0;if(d){const c=i(a)?a():a,d=o(c)&&c>=0,g=e>0?u:ot,w=h(t)||t,b=f.bind(0,w);ht(n),n=g(b,e),d&&!r&&(r=u(p,c)),s=l=w}else f(t)};return g.S=p,g},wt={opacity:1,zindex:1},bt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return Number.isNaN(n)?0:n},vt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],yt=(t,n,r)=>{try{if(t){const{style:i}=t;e(i[n])?i.setProperty(n,r):i[n]=((t,e)=>!wt[t.toLowerCase()]&&o(e)?`${e}px`:e)(n,r)}}catch(z){}},mt=(t,e,n)=>{const o=e?`${e}-`:"",r=n?`-${n}`:"",i=`${o}top${r}`,s=`${o}right${r}`,l=`${o}bottom${r}`,c=`${o}left${r}`,a=y(t,[i,s,l,c]);return{t:bt(a[i]),r:bt(a[s]),b:bt(a[l]),l:bt(a[c])}},xt={w:0,h:0},$t=()=>({w:window.innerWidth,h:window.innerHeight}),_t=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:xt,Pt=t=>t?{w:t.clientWidth,h:t.clientHeight}:xt,Ot=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:xt,Lt=t=>{const e=parseFloat(y(t,"height"))||0,n=parseFloat(y(t,"height"))||0;return{w:n-Math.round(n),h:e-Math.round(e)}},St=t=>t.getBoundingClientRect();let At;const Tt=t=>t.split(" "),Et=(t,e,n,o)=>{f(Tt(e),(e=>{t.removeEventListener(e,n,o)}))},Mt=(t,n,o,r)=>{const i=(()=>{if(e(At)){At=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){At=!0}}))}catch(t){}}return At})(),s=i&&r&&r.C||!1,l=r&&r.O||!1,c=r&&r.$||!1,a=[],d=i?{passive:s,capture:l}:l;return f(Tt(n),(e=>{const n=c?r=>{t.removeEventListener(e,n,l),o&&o(r)}:o;O(a,Et.bind(null,t,e,n,l)),t.addEventListener(e,n,d)})),A.bind(0,a)},Ct=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),zt={x:0,y:0},Rt=t=>{const e=t?St(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:zt},jt=(t,e)=>{f(s(e)?e:[e],t)},Dt=t=>{function e(t,e){if(t){const n=o.get(t);jt((t=>{n&&n[t?"delete":"clear"](t)}),e)}else o.forEach((t=>{t.clear()})),o.clear()}function n(t,n){const r=o.get(t)||new Set;return o.set(t,r),jt((t=>{t&&r.add(t)}),n),e.bind(0,t,n)}const o=new Map;return f(E(t),(e=>{n(e,t[e])})),[n,e,function(t,e){const n=o.get(t);f(L(n),(t=>{e&&!S(e)?t.apply(0,e):t()}))}]},Ht=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&T(t,e)?t[e]:void 0),t):void 0,Bt=(t,e,n)=>o=>[Ht(t,o),n||void 0!==Ht(e,o)],Nt=t=>{let e=t;return[()=>e,t=>{e=h({},e,t)}]},Yt="os-environment",It=`${Yt}-flexbox-glue`,kt=`${It}-max`,Ft="data-overlayscrollbars",Vt=`${Ft}-overflow-x`,Xt=`${Ft}-overflow-y`,Wt="overflowVisible",Kt="viewportStyled",Jt="os-padding",Ut="os-viewport",qt=`${Ut}-arrange`,Gt="os-content",Zt=`${Ut}-scrollbar-styled`,Qt=`os-overflow-visible`,te="os-size-observer",ee=`${te}-appear`,ne=`${te}-listener`,oe=`${ne}-scroll`,re=`${ne}-item`,ie=`${re}-final`,se="os-trinsic-observer",le="os-scrollbar",ce=`${le}-horizontal`,ae=`${le}-vertical`,de="os-scrollbar-track",ue="os-scrollbar-handle",fe=t=>JSON.stringify(t,((t,e)=>{if(i(e))throw new Error;return e})),he={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},pe=(t,e)=>{const n={};return f(E(e).concat(E(t)),(o=>{const r=t[o],i=e[o];if(l(r)&&l(i))h(n[o]={},pe(r,i));else if(T(e,o)&&i!==r){let t=!0;if(s(r)||s(i))try{fe(r)===fe(i)&&(t=!1)}catch(U){}t&&(n[o]=i)}})),n};let ge;const{abs:we,round:be}=Math,ve=(t,e,n)=>{Y(t,e);const o=Pt(e),r=_t(e),i=Lt(n);return{x:r.h-o.h+i.h,y:r.w-o.w+i.w}},ye=(t,e)=>{const n="hidden";y(t,{overflowX:n,overflowY:n,direction:"rtl"}),b(t,0);const o=Rt(t),r=Rt(e);b(t,-999);const i=Rt(e);return{i:o.x===r.x,n:r.x!==i.x}},me=(t,e)=>{const n=lt(t,It),o=St(t),r=St(e),i=ft(r,o,!0),s=lt(t,kt),l=St(t),c=St(e),a=ft(c,l,!0);return n(),s(),i&&a},xe=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},$e=()=>(ge||(ge=(()=>{const{body:e}=document,n=X(`
`)[0],o=n.firstChild,[r,,i]=Dt(),[s,l]=t({o:ve(e,n,o),u:dt}),[c]=l(),a=(t=>{let e=!1;const n=lt(t,Zt);try{e="none"===y(t,G("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(o){}return n(),e})(n),d={x:0===c.x,y:0===c.y},u={A:!a,L:!1},f=h({},he),p={T:c,D:d,P:a,I:"-1"===y(n,"zIndex"),j:ye(n,o),M:me(n,o),H:t=>r("_",t),N:h.bind(0,{},u),R(t){h(u,t)},F:h.bind(0,{},f),V(t){h(f,t)},k:h({},u),B:h({},f)};if(C(n,"style"),F(n),!(a||d.x&&d.y)){let t=$t(),r=xe();window.addEventListener("resize",(()=>{const l=$t(),c={w:l.w-t.w,h:l.h-t.h};if(0===c.w&&0===c.h)return;const a=we(c.w),d=we(c.h),u={w:we(be(l.w/(t.w/100))),h:we(be(l.h/(t.h/100)))},f=xe(),p=a>2&&d>2,g=!((t,e)=>{const n=we(t),o=we(e);return!(n===o||n+1===o||n-1===o)})(u.w,u.h);if(p&&g&&f!==r&&r>0){const[t,r]=s(ve(e,n,o));h(ge.T,t),F(n),r&&i("_")}t=l,r=f}))}return p})()),ge),_e={},Pe=()=>h({},_e);var Oe={exports:{}};!function(t){function e(){return t.exports=e=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const l={},c=Le({},n);return f(E(t).filter((t=>T(n,t))),(d=>{const u=n[d],h=t[d],g=a(h),w=i?`${i}.`:"";if(g&&a(u)){const[t,e]=Ae(h,u,o,w+d);l[d]=t,c[d]=e,f([c,l],(t=>{p(t[d])&&delete t[d]}))}else if(!g){let t=!1;const n=[],i=[],a=_(u);f(s(h)?h:[h],(o=>{let s;f(Se,((t,e)=>{t===o&&(s=e)}));const l=e(s);if(l&&r(u)){const e=o.split(" ");t=!!e.find((t=>t===u)),O(n,e)}else t=Se[a]===o;return O(i,l?Se.string:s),!t})),t?l[d]=u:o&&console.warn(`${`The option "${w}${d}" wasn't set, because it doesn't accept the type [ ${a.toUpperCase()} ] with the value of "${u}".\r\n`+`Accepted types are: [ ${i.join(", ").toUpperCase()} ].\r\n`}${n.length>0?`\r\nValid strings are: [ ${n.join(", ")} ].`:""}`),delete c[d]}})),[l,c]},Te=Se.boolean,Ee=[Se.array,Se.null],Me="hidden scroll visible visible-hidden",Ce={paddingAbsolute:Te,updating:{elementEvents:Ee,attributes:Ee,debounce:[Se.number,Se.array,Se.null],ignoreMutation:[Se.function,Se.null]},overflow:{x:Me,y:Me},scrollbars:{visibility:"visible hidden auto",autoHide:"never scroll leavemove",autoHideDelay:Se.number,dragScroll:Te,clickScroll:Te,touch:Te},nativeScrollbarsOverlaid:{show:Te,initialize:Te}},ze="__osOptionsValidationPlugin",Re={[ze]:{U:(t,e)=>{const[n,o]=((t,e,n)=>Ae(Ce,e,n))(0,t,e);return Le({},o,n)}}},je=3333333,De="scroll",He="__osSizeObserverPlugin",Be={[He]:{U:(t,e,n)=>{const o=X(`
`);Y(t,o),lt(t,oe);const r=o[0],i=r.lastChild,s=r.firstChild,l=null==s?void 0:s.firstChild;let c,a=_t(r),d=a,u=!1;const f=()=>{b(s,je),v(s,je),b(i,je),v(i,je)},h=t=>{c=0,u&&(a=d,e(!0===t))},p=t=>{d=_t(r),u=!t||!at(d,a),t?(Ct(t),u&&!c&&(nt(c),c=ot(h))):h(!1===t),f()},g=O([],[Mt(s,De,p),Mt(i,De,p)]);return y(l,{width:je,height:je}),f(),[n?p.bind(0,!1):f,g]}}};let Ne=0;const Ye="__osScrollbarsHidingPlugin",Ie={[Ye]:{Y:()=>{const{P:t,D:e,I:n}=$e(),o=!(n||t||!e.x&&!e.y)&&document.createElement("style");return o&&(w(o,"id",`${qt}-${Ne}`),Ne++),o},q:(t,e,n,o,r,i)=>{const{M:s}=$e();return[(r,i,s,l)=>{if(t){const{G:t}=o(),{W:c,X:a}=r,{x:d,y:u}=a,{x:f,y:h}=c,p=t[l?"paddingRight":"paddingLeft"],g=t.paddingTop,b=i.w+s.w,v=i.h+s.h,m={w:h&&u?`${h+b-p}px`:"",h:f&&d?`${f+v-g}px`:""};if(n){const{sheet:t}=n;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${w(n,"id")} + .${qt}::before {}`,0);const o=e[0].style;o.width=m.w,o.height=m.h}}}else y(e,{"--os-vaw":m.w,"--os-vah":m.h})}return t},(n,l,c)=>{if(t){const a=c||r(n),{G:d}=o(),{X:u}=a,{x:h,y:p}=u,g={},w=t=>f(t.split(" "),(t=>{g[t]=d[t]}));h&&w("marginBottom paddingTop paddingBottom"),p&&w("marginLeft marginRight paddingLeft paddingRight");const b=y(e,E(g));return st(e,qt),s||(g.height=""),y(e,g),[()=>{i(a,l,t,b),y(e,b),lt(e,qt)},a]}return[pt]}]}}},ke=(t,e)=>i(t)?t.apply(0,e):t,Fe=(t,e,n,o)=>ke(o||ke(n,t),t)||e.apply(0,t),Ve=(t,o,r,i)=>{let s=ke(i,t);return(n(s)||e(s))&&(s=ke(r,t)),!0===s||n(s)||e(s)?o.apply(0,t):s},Xe=V.bind(0,""),We=t=>{Y(H(t),D(t)),F(t)},Ke=t=>{const{N:e,P:n}=$e(),o=Pe()[Ye],r=o&&o.Y,{J:i,K:s,A:l,L:c}=e(),a=d(t),u=t,f=a?t:u.target,h=j(f,"textarea"),p=!h&&j(f,"body"),g=f.ownerDocument,b=g.body,v=g.defaultView,y=!!et&&!h&&n,m=Fe.bind(0,[f]),x=Ve.bind(0,[f]),$=[m(Xe,s,u.viewport),m(Xe,s),m(Xe)].filter((t=>!!y||t!==f))[0],_=$===f,L={Z:f,J:h?m(Xe,i,u.host):f,K:$,A:!_&&x(Xe,l,u.padding),L:!_&&x(Xe,c,u.content),tt:!_&&!n&&r&&r(),nt:v,et:g,st:H(b),ot:b,ct:h,it:p,rt:a,lt:_,ut:(t,e)=>_?((t,e,n)=>{const o=w(t,Ft)||"";return new Set(o.split(" ")).has(n)})($,0,e):((t,e)=>it(t,e,((t,e)=>t.contains(e))))($,t),ft:(t,e,n)=>_?M($,Ft,e,n):(n?lt:st)($,t)},S=E(L).reduce(((t,e)=>{const n=L[e];return O(t,!(!n||H(n))&&n)}),[]),T=t=>t?P(S,t)>-1:null,{Z:z,J:R,A:B,K:I,L:V,tt:X}=L,W=[],K=h&&T(R),J=h?z:D([V,I,B,R,z].find((t=>!1===T(t)))),U=V||I;return[L,()=>{const t=((t,e)=>(w(t,Ft,e),C.bind(0,t,Ft)))(R,_?"viewport":"host"),e=lt(B,Jt),o=lt(I,!_&&Ut),r=lt(V,Gt);K&&(k(z,R),O(W,(()=>{k(R,z),F(R)}))),Y(U,J),Y(R,B),Y(B||R,!_&&I),Y(I,V),O(W,(()=>{t(),C(I,Vt),C(I,Xt),T(V)&&We(V),T(I)&&We(I),T(B)&&We(B),e(),o(),r()})),n&&!_&&O(W,st.bind(0,I,Zt)),X&&(((t,e)=>{N(H(t),t,e)})(I,X),O(W,F.bind(0,X)))},A.bind(0,W)]},Je=(t,e)=>{const{L:n}=t,[o]=e;return t=>{const{M:e}=$e(),{dt:r}=o(),{_t:i}=t,s=(n||!e)&&i;return s&&y(n,{height:r?"":"100%"}),{gt:s,ht:s}}},Ue=(e,n)=>{const[o,r]=n,{J:i,A:s,K:l,lt:c}=e,[a,d]=t({u:ut,o:mt()},mt.bind(0,i,"padding",""));return(t,e,n)=>{let[i,u]=d(n);const{P:f,M:p}=$e(),{vt:g}=o(),{gt:w,ht:b,bt:v}=t,[m,x]=e("paddingAbsolute");(w||u||!p&&b)&&([i,u]=a(n));const $=!c&&(x||v||u);if($){const t=!m||!s&&!f,e=i.r+i.l,n=i.t+i.b,o={marginRight:t&&!g?-e:0,marginBottom:t?-n:0,marginLeft:t&&g?-e:0,top:t?-i.t:0,right:t?g?-i.r:"auto":0,left:t?g?"auto":-i.l:0,width:t?`calc(100% + ${e}px)`:""},c={paddingTop:t?i.t:0,paddingRight:t?i.r:0,paddingBottom:t?i.b:0,paddingLeft:t?i.l:0};y(s||l,o),y(l,c),r({A:i,wt:!t,G:s?c:h({},o,c)})}return{yt:$}}},{max:qe}=Math,Ge="visible",Ze="hidden",Qe=42,tn={u:at,o:{w:0,h:0}},en={u:dt,o:{x:Ze,y:Ze}},nn=(t,e,n)=>n?lt(t,e):st(t,e),on=t=>0===t.indexOf(Ge),rn=(e,n)=>{const[o,r]=n,{J:i,A:s,K:l,tt:c,lt:a,ft:d}=e,{T:u,M:f,P:h,D:p}=$e(),g=Pe()[Ye],b=!a&&!h&&(p.x||p.y),[v,m]=t(tn,Lt.bind(0,l)),[x,$]=t(tn,Ot.bind(0,l)),[_,P]=t(tn),[O]=t(en),L=(t,e)=>{if(y(l,{height:""}),e){const{wt:e,A:n}=o(),{St:r,W:s}=t,c=Lt(i),a=Pt(i),d="content-box"===y(l,"boxSizing"),u=e||d?n.b+n.t:0,f=!(p.x&&d);y(l,{height:a.h+c.h+(r.x&&f?s.x:0)-u})}},S=(t,e)=>{const n=h||t?0:Qe,o=(t,o,r)=>{const i=y(l,t),s="scroll"===(e?e[t]:i);return[i,s,s&&!h?o?n:r:0,o&&!!n]},[r,i,s,c]=o("overflowX",p.x,u.x),[a,d,f,g]=o("overflowY",p.y,u.y);return{xt:{x:r,y:a},St:{x:i,y:d},W:{x:s,y:f},X:{x:c,y:g}}},A=(t,e,n,r)=>{const{W:i,X:s}=t,{x:l,y:c}=s,{x:a,y:d}=i,{G:u}=o(),f=e?"marginLeft":"marginRight",h=e?"paddingLeft":"paddingRight",p=u[f],g=u.marginBottom,w=u[h],b=u.paddingBottom;r.width=`calc(100% + ${d+-1*p}px)`,r[f]=-d+p,r.marginBottom=-a+g,n&&(r[h]=w+(c?d:0),r.paddingBottom=b+(l?a:0))},[T,E]=g?g.q(b,l,c,o,S,A):[()=>b,()=>[pt]];return(t,e,n)=>{const{gt:c,Ct:u,ht:g,yt:b,_t:C,bt:z}=t,{dt:R,vt:j}=o(),[D,H]=e("nativeScrollbarsOverlaid.show"),[B,N]=e("overflow"),Y=D&&p.x&&p.y,I=!a&&!f&&(c||g||u||H||C),k=on(B.x),F=on(B.y),V=k||F;let X,W=m(n),K=$(n),J=P(n);if(H&&h&&d(Zt,Kt,!Y),I&&(X=S(Y),L(X,R)),c||b||g||z||H){V&&d(Qt,Wt,!1);const[t,e]=E(Y,j,X),[o,r]=W=v(n),[i,s]=K=x(n),c=Pt(l);let a=i,u=c;t(),(s||r||H)&&e&&!Y&&T(e,i,o,j)&&(u=Pt(l),a=Ot(l)),J=_(((t,e,n)=>{const o=window.devicePixelRatio%1!=0?1:0,r={w:qe(0,t.w-e.w-qe(0,n.w)),h:qe(0,t.h-e.h-qe(0,n.h))};return{w:r.w>o?r.w:0,h:r.h>o?r.h:0}})({w:qe(i.w,a.w),h:qe(i.h,a.h)},{w:u.w+qe(0,c.w-i.w),h:u.h+qe(0,c.h-i.h)},o),n)}const[U,q]=J,[G,Z]=K,[Q,tt]=W,et={x:U.w>0,y:U.h>0},nt=k&&F&&(et.x||et.y)||k&&et.x&&!et.y||F&&et.y&&!et.x;if(b||z||tt||Z||q||N||H||I){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},e=((t,e,n,o)=>{const r=(t,e)=>{const n=on(t),o=e&&n&&t.replace(`${Ge}-`,"")||"";return[e&&!n?t:"",on(o)?"hidden":o]},[i,s]=r(n.x,e.x),[l,c]=r(n.y,e.y);return o.overflowX=s&&l?s:i,o.overflowY=c&&i?c:l,S(t,o)})(Y,et,B,t),n=T(e,G,Q,j);a||A(e,j,n,t),I&&L(e,R),a?(w(i,Vt,t.overflowX),w(i,Xt,t.overflowY)):y(l,t)}M(i,Ft,Wt,nt),nn(s,Qt,nt),!a&&nn(l,Qt,V);const[ot,rt]=O(S(Y).xt);return r({xt:ot,Ot:{x:U.w,y:U.h},$t:et}),{At:rt,Lt:q}}},sn=(t,e,n)=>{const o={},r=e||{};return f(E(t).concat(E(r)),(e=>{const i=t[e],s=r[e];o[e]=!!(n||i||s)})),o},ln="animationstart",cn="scroll",an=3333333,dn=t=>"rtl"===y(t,"direction"),un=t=>t&&(t.height||t.width),fn=(e,n,o)=>{const{Tt:r=!1,zt:i=!1}=o||{},c=Pe()[He],{j:a}=$e(),d=X(`
`)[0],u=d.firstChild,f=dn.bind(0,d),[h]=t({o:void 0,_:!0,u:(t,e)=>!(!t||!un(t)&&un(e))}),p=t=>{const e=s(t)&&t.length>0&&l(t[0]),o=!e&&function(t){return"boolean"==typeof t}(t[0]);let i=!1,c=!1,u=!0;if(e){const[e,,n]=h(t.pop().contentRect),o=un(e),r=un(n);i=!n||!o,c=!r&&o,u=!i}else o?[,u]=t:c=!0===t;if(r&&u){const e=o?t[0]:dn(d);b(d,e?a.n?-an:a.i?0:an:an),v(d,an)}i||n({gt:!o,Dt:o?t:void 0,zt:!!c})},g=[];let w,y=!!i&&p;if(et){const t=new et(p);t.observe(u),O(g,(()=>{t.disconnect()}))}else if(c){const[t,e]=c.U(u,p,i);y=t,O(g,e)}if(r){w=t({o:!f()},f);const[e]=w;O(g,Mt(d,cn,(t=>{const n=e(),[o,r]=n;r&&(st(u,"ltr rtl"),lt(u,o?"rtl":"ltr"),p(n)),Ct(t)})))}return y&&(lt(d,ee),O(g,Mt(d,ln,y,{$:!!et}))),I(e,d),()=>{A(g),F(d)}},hn=(e,n)=>{const o=V(se),r=[],[i]=t({o:!1}),s=t=>{if(t){const e=i((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=e;o&&n(e)}};if(tt){const t=new tt((t=>{t&&t.length>0&&s(t.pop())}),{root:e});t.observe(o),O(r,(()=>{t.disconnect()}))}else{const t=()=>{const t=_t(o);s(t)};O(r,fn(o,t)),t()}return I(e,o),()=>{A(r),F(o)}},pn=(t,e,n,o)=>{let i=!1;const{Et:s,Pt:l,It:c,jt:a,Mt:d,Ht:u}=o||{},[h,p]=((t,e,n)=>{let o,i=!1;const s=s=>{if(n){const l=n.reduce(((e,n)=>{if(n){const o=n[0],i=n[1],l=i&&o&&(s?s(o):R(o,t));l&&l.length&&i&&r(i)&&O(e,[l,i.trim()],!0)}return e}),[]);f(l,(t=>f(t[0],(n=>{const r=t[1],s=o.get(n);if(s){const t=s[0],e=s[1];t===r&&e()}const l=Mt(n,r,(t=>{i?(l(),o.delete(n)):e(t)}));o.set(n,[r,l])}))))}};return n&&(o=new WeakMap,s()),[()=>{i=!0},s]})(t,gt((()=>{i&&n(!0)}),{p:33,v:99}),c),g=l||[],b=(s||[]).concat(g),v=i=>{const s=d||pt,l=u||pt,c=[],h=[];let b=!1,v=!1,y=!1;f(i,(n=>{const{attributeName:i,target:d,type:u,oldValue:f,addedNodes:p}=n,m="attributes"===u,x="childList"===u,$=t===d,_=m&&r(i)?w(d,i):0,L=0!==_&&f!==_,S=P(g,i)>-1&&L;if(e&&!$){const e=!m,r=m&&S,c=r&&a&&j(d,a),u=(c?!s(d,i,f,_):e||r)&&!l(n,!!c,t,o);O(h,p),v=v||u,y=y||x}!e&&$&&L&&!s(d,i,f,_)&&(O(c,i),b=b||S)})),y&&!S(h)&&p((t=>h.reduce(((e,n)=>(O(e,R(t,n)),j(n,t)?O(e,n):e)),[]))),e?v&&n(!1):S(c)&&!b||n(c,b)},y=new Q(v);return y.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:e,childList:e,characterData:e}),i=!0,[()=>{i&&(h(),y.disconnect(),i=!1)},()=>{i&&v(y.takeRecords())}]},gn=`[${Ft}]`,wn=`.${Ut}`,bn=["tabindex"],vn=["wrap","cols","rows"],yn=["id","class","style","open"],mn=(e,n,l)=>{let c,a,d;const[,h]=n,{J:p,K:g,L:b,ct:v,lt:y,ut:m,ft:x}=e,{P:$,M:_}=$e(),[O]=t({u:at,o:{w:0,h:0}},(()=>{const t=m(Qt,Wt);t&&x(Qt,Wt);const e=Ot(b),n=Ot(g),o=Lt(g);return t&&x(Qt,Wt,!0),{w:n.w+e.w+o.w,h:n.h+e.h+o.h}})),L=v?vn:yn.concat(vn),S=gt(l,{p:()=>c,v:()=>a,m(t,e){const[n]=t,[o]=e;return[E(n).concat(E(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),A=t=>{f(t||bn,(t=>{if(P(bn,t)>-1){const e=w(p,t);r(e)?w(g,t,e):C(g,t)}}))},T=({gt:t,Dt:e,zt:n})=>{const o=!t||n?l:S;let r=!1;if(e){const[t,n]=e;r=n,h({vt:t})}o({gt:t,bt:r})},M=t=>{const[,e]=O();e&&(t?l:S)({ht:!0})},z=(b||!_)&&hn(p,(t=>{const[e,n]=t;h({dt:e}),l({_t:n})})),R=!y&&fn(p,T,{zt:!0,Tt:!$}),[j]=pn(p,!1,((t,e)=>{e?S({Ct:!0}):y||A(t)}),{Pt:yn,Et:yn.concat(bn)}),D=y&&new et(T.bind(0,{gt:!0}));return D&&D.observe(p),A(),[t=>{const[e]=t("updating.ignoreMutation"),[n,r]=t("updating.attributes"),[l,f]=t("updating.elementEvents"),[h,p]=t("updating.debounce"),w=t=>i(e)&&e(t);if((f||r)&&(d&&(d[1](),d[0]()),d=pn(b||g,!0,M,{Pt:L.concat(n||[]),Et:L.concat(n||[]),It:l,jt:gn,Ht:(t,e)=>{const{target:n,attributeName:o}=t;return!(e||!o)&&((t,e,n)=>{const o=t&&B(t,e),r=t&&((t,e)=>{const n=e?u(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r||o!==t&&r!==t&&B(B(t,n),e)===o)})(n,gn,wn)||!!w(t)}})),p)if(S.S(),s(h)){const t=h[0],e=h[1];c=!!o(t)&&t,a=!!o(e)&&e}else o(h)?(c=h,a=!1):(c=!1,a=!1)},()=>{d&&d[0](),z&&z(),R&&R(),D&&D.disconnect(),j()}]},xn={A:{t:0,r:0,b:0,l:0},wt:!1,G:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Ot:{x:0,y:0},xt:{x:"hidden",y:"hidden"},$t:{x:!1,y:!1},dt:!1,vt:!1},$n=t=>{const e=V(`${le} ${t}`),n=V(de),o=V(ue);return Y(e,n),Y(n,o),{Vt:e,kt:n,Bt:o}},_n=new Set,Pn=new WeakMap,On=(t,e,n)=>{let r=!1;const{F:s,D:l,H:c}=$e(),a=Pe(),u=d(t)?t:t.target,g=(t=>Pn.get(t))(u);if(g)return g;const w=a[ze],y=t=>{const e=t||{},n=w&&w.U;return n?n(e,!0):e},m=h({},s(),y(e)),[x,$,_]=Dt(n),[P,O,L]=((t,e)=>{const n=Bt(e,{}),r=Nt(xn),[i,s,l]=Dt(),[c]=r,[a,d,u]=Ke(t),p=((t,e)=>{const{K:n}=t,{P:r,D:i,M:s}=$e(),l=!r&&(i.x||i.y),c=[Je(t,e),Ue(t,e),rn(t,e)];return(t,e,r)=>{const i=sn(h({gt:!1,yt:!1,bt:!1,_t:!1,Lt:!1,At:!1,Ct:!1,ht:!1},e),{},r),a=l||!s,d=a&&b(n),u=a&&v(n);let p=i;return f(c,(e=>{p=sn(p,e(p,t,!!r)||{},r)})),o(d)&&b(n,d),o(u)&&v(n,u),p}})(a,r),[g,w]=mn(a,r,(t=>{l("u",[p(n,t),{},!1])})),y=c.bind(0);return y.Nt=t=>{i("u",t)},y.Rt=d,y.Ft=a,[(t,n)=>{const o=Bt(e,t,n);g(o),l("u",[p(o,{},n),t,!!n])},y,()=>{s(),w(),u()}]})(t,m),[S,A,T]=((t,e,n)=>{const o=Nt({}),[r]=o,[i,s,l]=((t,e)=>{const{N:n}=$e(),{Ut:o}=n(),{Z:r,J:i,K:s,rt:l}=e,c=!l&&t.scrollbarsSlot,a=Ve([r,i,s],(()=>i),o,c),d=$n(ce),u=$n(ae),{Vt:f}=d,{Vt:h}=u;return[{Yt:d,qt:u},()=>{Y(a,f),Y(a,h)},F.bind(0,[f,h])]})(t,n),c=r.bind(0);return c.Ft=i,c.Rt=s,[(t,n)=>{const o=Bt(e,t,n);console.log(o)},c,()=>{l()}]})(t,m,O.Ft),M=(t,e)=>{P(t,e),S(t,e)},C=c(M.bind(0,{},!0)),z=t=>{(t=>{Pn.delete(t),_n.delete(t)})(u),C(),T(),L(),r=!0,_("destroyed",[R,!!t]),$()},R={options(t){if(t){const e=pe(m,y(t));p(e)||(h(m,e),M(e))}return h({},m)},on:x,off:(t,e)=>{t&&e&&$(t,e)},state(){const{Ot:t,xt:e,$t:n,A:o,wt:i}=O();return h({},{overflowAmount:t,overflowStyle:e,hasOverflow:n,padding:o,paddingAbsolute:i,destroyed:r})},elements(){const{Z:t,J:e,A:n,K:o,L:r}=O.Ft;return h({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update:t=>(M({},t),R),destroy:z.bind(0)};return f(E(a),(t=>{const e=a[t];i(e)&&e(On,R)})),l.x&&l.y&&!m.nativeScrollbarsOverlaid.initialize?(z(!0),R):(O.Rt(),A.Rt(),((t,e)=>{Pn.set(t,e),_n.add(t)})(u,R),_("initialized",[R]),O.Nt(((t,e,n)=>{const{gt:o,bt:r,_t:i,Lt:s,At:l,ht:c,Ct:a}=t;_("updated",[R,{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowAmountChanged:s,overflowStyleChanged:l,contentMutation:c,hostMutation:a},changedOptions:e,force:n}])})),R.update(!0))};On.plugin=t=>f(s(t)?t:[t],(t=>{f(E(t),(e=>{_e[e]=t[e]}))})),On.env=()=>{const{T:t,D:e,P:n,j:o,M:r,I:i,k:s,B:l,N:c,R:a,F:d,V:u}=$e();return h({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,defaultInitializationStrategy:s,defaultDefaultOptions:l,getInitializationStrategy:c,setInitializationStrategy:a,getDefaultOptions:d,setDefaultOptions:u})};export{On as OverlayScrollbars,Re as optionsValidationPlugin,Ie as scrollbarsHidingPlugin,Be as sizeObserverPlugin}; \ No newline at end of file +function t(e,n){if(f(e))for(let t=0;tn(e[t],t,e)));return e}function e(e,n){const o=d(n);if(h(n)||o){let t=o?"":{};if(e){const r=window.getComputedStyle(e,null);t=o?vt(e,r,n):n.reduce(((t,n)=>(t[n]=vt(e,r,n),t)),t)}return t}t(O(n),(t=>yt(e,t,n[t])))}const n=(t,e)=>{const{u:n,_:o,g:r}=t;let i,s=n;const l=(t,e)=>{const n=s,l=t,c=e||(o?!o(n,l):n!==l);return(c||r)&&(s=l,i=n),[s,c,i]};return[e?t=>l(e(s,i),t):l,t=>[s,!!t,i]]},o=Node.ELEMENT_NODE,{toString:r,hasOwnProperty:i}=Object.prototype,s=t=>void 0===t,l=t=>null===t,c=t=>s(t)||l(t)?`${t}`:r.call(t).replace(/^\[object (.+)\]$/,"$1").toLowerCase(),a=t=>"number"==typeof t,d=t=>"string"==typeof t,u=t=>"function"==typeof t,h=t=>Array.isArray(t),p=t=>"object"==typeof t&&!h(t)&&!l(t),f=t=>{const e=!!t&&t.length,n=a(e)&&e>-1&&e%1==0;return!(!(h(t)||!u(t)&&n)||e>0&&p(t)&&!(e-1 in t))},g=t=>{if(!t||!p(t)||"object"!==c(t))return!1;let e;const n="constructor",o=t[n],r=o&&o.prototype,l=i.call(t,n),a=r&&i.call(r,"isPrototypeOf");if(o&&!l&&!a)return!1;for(e in t);return s(e)||i.call(t,e)},w=t=>{const e=window.HTMLElement;return!!t&&(e?t instanceof e:t.nodeType===o)},b=t=>{const e=window.Element;return!!t&&(e?t instanceof e:t.nodeType===o)},v=(t,e,n)=>t.indexOf(e,n),y=(t,e,n)=>(n||d(e)||!f(e)?t.push(e):Array.prototype.push.apply(t,e),t),m=e=>{const n=Array.from,o=[];return n&&e?n(e):(e instanceof Set?e.forEach((t=>{y(o,t)})):t(e,(t=>{y(o,t)})),o)},x=t=>!!t&&0===t.length,_=(e,n,o)=>{t(e,(t=>t&&t.apply(void 0,n||[]))),!o&&(e.length=0)},$=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),O=t=>t?Object.keys(t):[],P=(e,n,o,r,i,s,c)=>{const a=[n,o,r,i,s,c];return"object"==typeof e&&!l(e)||u(e)||(e={}),t(a,(n=>{t(O(n),(t=>{const o=n[t];if(e===o)return!0;const r=h(o);if(o&&(g(o)||r)){const n=e[t];let i=n;r&&!h(n)?i=[]:r||g(n)||(i={}),e[t]=P(i,o)}else e[t]=o}))})),e},L=t=>{for(const e in t)return!1;return!0},S=(t,e,n,o)=>{if(s(o))return n?n[t]:e;n&&(n[t]=o)},T=(t,e,n)=>{if(s(n))return t?t.getAttribute(e):null;t&&t.setAttribute(e,n)},A=(t,e,n,o)=>{const r=T(t,e)||"",i=new Set(r.split(" "));i[o?"add":"delete"](n),T(t,e,m(i).join(" ").trim())},E=(t,e)=>{t&&t.removeAttribute(e)},C=(t,e)=>S("scrollLeft",0,t,e),R=(t,e)=>S("scrollTop",0,t,e),M=Element.prototype,j=(t,e)=>{const n=[],o=e?b(e)?e:null:document;return o?y(n,o.querySelectorAll(t)):n},z=(t,e)=>!!b(t)&&(M.matches||M.msMatchesSelector).call(t,e),B=t=>t?m(t.childNodes):[],H=t=>t?t.parentElement:null,I=(t,e)=>{if(b(t)){const n=M.closest;if(n)return n.call(t,e);do{if(z(t,e))return t;t=H(t)}while(t)}return null},k=(e,n,o)=>{if(o){let r,i=n;e&&(f(o)?(r=document.createDocumentFragment(),t(o,(t=>{t===i&&(i=t.previousSibling),r.appendChild(t)}))):r=o,n&&(i?i!==n&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(r,i||null))}},D=(t,e)=>{k(t,null,e)},Y=(t,e)=>{k(t,t&&t.firstChild,e)},V=(t,e)=>{k(H(t),t&&t.nextSibling,e)},X=e=>{if(f(e))t(m(e),(t=>X(t)));else if(e){const t=H(e);t&&t.removeChild(e)}},N=t=>{const e=document.createElement("div");return t&&T(e,"class",t),e},W=e=>{const n=N();return n.innerHTML=e.trim(),t(B(n),(t=>X(t)))},F=t=>t.charAt(0).toUpperCase()+t.slice(1),K=["-webkit-","-moz-","-o-","-ms-"],J=["WebKit","Moz","O","MS","webkit","moz","o","ms"],q={},U={},G=e=>{let n=U[e];if($(U,e))return n;const o=F(e),r=N().style;return t(K,(t=>{const i=t.replace(/-/g,""),s=[e,t+e,i+o,F(i)+o];return!(n=s.find((t=>void 0!==r[t])))})),U[e]=n||""},Z=e=>{let n=q[e]||window[e];return $(q,e)||(t(J,(t=>(n=n||window[t+F(e)],!n))),q[e]=n),n},Q=Z("MutationObserver"),tt=Z("IntersectionObserver"),et=Z("ResizeObserver"),nt=Z("cancelAnimationFrame"),ot=Z("requestAnimationFrame"),rt=/[^\x20\t\r\n\f]+/g,it=(t,e,n)=>{let o,r=0,i=!1;if(t&&e&&d(e)){const s=e.match(rt)||[];for(i=s.length>0;o=s[r++];)i=!!n(t.classList,o)&&i}return i},st=(t,e)=>{it(t,e,((t,e)=>t.remove(e)))},lt=(t,e)=>(it(t,e,((t,e)=>t.add(e))),st.bind(0,t,e)),ct=(e,n,o,r)=>{if(e&&n){let i=!0;return t(o,(t=>{(r?r(e[t]):e[t])!==(r?r(n[t]):n[t])&&(i=!1)})),i}return!1},at=(t,e)=>ct(t,e,["w","h"]),dt=(t,e)=>ct(t,e,["x","y"]),ut=(t,e)=>ct(t,e,["t","r","b","l"]),ht=(t,e,n)=>ct(t,e,["width","height"],n&&(t=>Math.round(t))),pt=t=>{t&&window.clearTimeout(t),t&&nt(t)},ft=()=>{},gt=(t,e)=>{let n,o,r,i;const{v:s,p:l,m:c}=e||{},d=window.setTimeout,h=function(e){pt(n),pt(o),o=n=r=void 0,t.apply(this,e)},p=t=>c&&r?c(r,t):t,f=()=>{n&&h(p(i)||i)},g=function(){const t=m(arguments),e=u(s)?s():s,c=a(e)&&e>=0;if(c){const s=u(l)?l():l,c=a(s)&&s>=0,g=e>0?d:ot,w=p(t)||t,b=h.bind(0,w);pt(n),n=g(b,e),c&&!o&&(o=d(f,s)),r=i=w}else h(t)};return g.S=f,g},wt={opacity:1,zindex:1},bt=(t,e)=>{const n=e?parseFloat(t):parseInt(t,10);return n==n?n:0},vt=(t,e,n)=>null!=e?e[n]||e.getPropertyValue(n):t.style[n],yt=(t,e,n)=>{try{if(t){const{style:o}=t;s(o[e])?o.setProperty(e,n):o[e]=((t,e)=>!wt[t.toLowerCase()]&&a(e)?`${e}px`:e)(e,n)}}catch(M){}},mt=(t,n,o)=>{const r=n?`${n}-`:"",i=o?`-${o}`:"",s=`${r}top${i}`,l=`${r}right${i}`,c=`${r}bottom${i}`,a=`${r}left${i}`,d=e(t,[s,l,c,a]);return{t:bt(d[s]),r:bt(d[l]),b:bt(d[c]),l:bt(d[a])}},xt={w:0,h:0},_t=()=>({w:window.innerWidth,h:window.innerHeight}),$t=t=>t?{w:t.offsetWidth,h:t.offsetHeight}:xt,Ot=t=>t?{w:t.clientWidth,h:t.clientHeight}:xt,Pt=t=>t?{w:t.scrollWidth,h:t.scrollHeight}:xt,Lt=t=>{const n=parseFloat(e(t,"height"))||0,o=parseFloat(e(t,"height"))||0;return{w:o-Math.round(o),h:n-Math.round(n)}},St=t=>t.getBoundingClientRect();let Tt;const At=t=>t.split(" "),Et=(e,n,o,r)=>{t(At(n),(t=>{e.removeEventListener(t,o,r)}))},Ct=(e,n,o,r)=>{const i=(()=>{if(s(Tt)){Tt=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get(){Tt=!0}}))}catch(e){}}return Tt})(),l=i&&r&&r.C||!1,c=r&&r.$||!1,a=r&&r.O||!1,d=[],u=i?{passive:l,capture:c}:c;return t(At(n),(t=>{const n=a?r=>{e.removeEventListener(t,n,c),o&&o(r)}:o;y(d,Et.bind(null,e,t,n,c)),e.addEventListener(t,n,u)})),_.bind(0,d)},Rt=t=>(t=>t.stopPropagation())(t)||(t=>t.preventDefault())(t),Mt={x:0,y:0},jt=t=>{const e=t?St(t):0;return e?{x:e.left+window.pageYOffset,y:e.top+window.pageXOffset}:Mt},zt=(e,n)=>{t(h(n)?n:[n],e)},Bt=e=>{const n=new Map,o=(t,e)=>{if(t){const o=n.get(t);zt((t=>{o&&o[t?"delete":"clear"](t)}),e)}else n.forEach((t=>{t.clear()})),n.clear()},r=(t,e)=>{const r=n.get(t)||new Set;return n.set(t,r),zt((t=>{t&&r.add(t)}),e),o.bind(0,t,e)};return t(O(e),(t=>{r(t,e[t])})),[r,o,(e,o)=>{const r=n.get(e);t(m(r),(t=>{o&&!x(o)?t.apply(0,o):t()}))}]},Ht=(t,e)=>t?e.split(".").reduce(((t,e)=>t&&$(t,e)?t[e]:void 0),t):void 0,It=(t,e,n)=>o=>[Ht(t,o),n||void 0!==Ht(e,o)],kt=t=>{let e=t;return[()=>e,t=>{e=P({},e,t)}]},Dt="os-environment",Yt=`${Dt}-flexbox-glue`,Vt=`${Yt}-max`,Xt="data-overlayscrollbars",Nt=`${Xt}-overflow-x`,Wt=`${Xt}-overflow-y`,Ft="overflowVisible",Kt="viewportStyled",Jt="os-padding",qt="os-viewport",Ut=`${qt}-arrange`,Gt="os-content",Zt=`${qt}-scrollbar-styled`,Qt=`os-overflow-visible`,te="os-size-observer",ee=`${te}-appear`,ne=`${te}-listener`,oe=`${ne}-scroll`,re=`${ne}-item`,ie=`${re}-final`,se="os-trinsic-observer",le="os-scrollbar",ce=`${le}-horizontal`,ae=`${le}-vertical`,de="os-scrollbar-track",ue="os-scrollbar-handle",he=t=>JSON.stringify(t,((t,e)=>{if(u(e))throw new Error;return e})),pe={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},fe=(e,n)=>{const o={};return t(O(n).concat(O(e)),(t=>{const r=e[t],i=n[t];if(p(r)&&p(i))P(o[t]={},fe(r,i));else if($(n,t)&&i!==r){let e=!0;if(h(r)||h(i))try{he(r)===he(i)&&(e=!1)}catch(q){}e&&(o[t]=i)}})),o};let ge;const{abs:we,round:be}=Math,ve=(t,e,n)=>{D(t,e);const o=Ot(e),r=$t(e),i=Lt(n);return{x:r.h-o.h+i.h,y:r.w-o.w+i.w}},ye=(t,n)=>{const o="hidden";e(t,{overflowX:o,overflowY:o,direction:"rtl"}),C(t,0);const r=jt(t),i=jt(n);C(t,-999);const s=jt(n);return{i:r.x===i.x,n:i.x!==s.x}},me=(t,e)=>{const n=lt(t,Yt),o=St(t),r=St(e),i=ht(r,o,!0),s=lt(t,Vt),l=St(t),c=St(e),a=ht(c,l,!0);return n(),s(),i&&a},xe=()=>{const t=window.screen.deviceXDPI||0,e=window.screen.logicalXDPI||1;return window.devicePixelRatio||t/e},_e=()=>(ge||(ge=(()=>{const{body:t}=document,o=W(`
`)[0],r=o.firstChild,[i,,s]=Bt(),[l,c]=n({u:ve(t,o,r),_:dt}),[a]=c(),d=(t=>{let n=!1;const o=lt(t,Zt);try{n="none"===e(t,G("scrollbar-width"))||"none"===window.getComputedStyle(t,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return o(),n})(o),u={x:0===a.x,y:0===a.y},h={A:!d,I:!1},p=P({},pe),f={T:a,P:u,L:d,M:"-1"===e(o,"zIndex"),H:ye(o,r),R:me(o,r),D:t=>i("_",t),j:P.bind(0,{},h),V(t){P(h,t)},B:P.bind(0,{},p),k(t){P(p,t)},F:P({},h),Y:P({},p)};if(E(o,"style"),X(o),!(d||u.x&&u.y)){let e=_t(),n=xe();window.addEventListener("resize",(()=>{const i=_t(),c={w:i.w-e.w,h:i.h-e.h};if(0===c.w&&0===c.h)return;const a=we(c.w),d=we(c.h),u={w:we(be(i.w/(e.w/100))),h:we(be(i.h/(e.h/100)))},h=xe(),p=a>2&&d>2,f=!((t,e)=>{const n=we(t),o=we(e);return!(n===o||n+1===o||n-1===o)})(u.w,u.h);if(p&&f&&h!==n&&n>0){const[e,n]=l(ve(t,o,r));P(ge.T,e),X(o),n&&s("_")}e=i,n=h}))}return f})()),ge),$e={},Oe=()=>P({},$e);var Pe={exports:{}};!function(t){function e(){return t.exports=e=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const i={},l=Le({},n);return t(O(e).filter((t=>$(n,t))),(a=>{const u=n[a],p=e[a],f=g(p),w=r?`${r}.`:"";if(f&&g(u)){const[e,n]=Te(p,u,o,w+a);i[a]=e,l[a]=n,t([l,i],(t=>{L(t[a])&&delete t[a]}))}else if(!f){let e=!1;const n=[],r=[],f=c(u);t(h(p)?p:[p],(o=>{let i;t(Se,((t,e)=>{t===o&&(i=e)}));const l=s(i);if(l&&d(u)){const t=o.split(" ");e=!!t.find((t=>t===u)),y(n,t)}else e=Se[f]===o;return y(r,l?Se.string:i),!e})),e?i[a]=u:o&&console.warn(`${`The option "${w}${a}" wasn't set, because it doesn't accept the type [ ${f.toUpperCase()} ] with the value of "${u}".\r\n`+`Accepted types are: [ ${r.join(", ").toUpperCase()} ].\r\n`}${n.length>0?`\r\nValid strings are: [ ${n.join(", ")} ].`:""}`),delete l[a]}})),[i,l]},Ae=Se.boolean,Ee=[Se.array,Se.null],Ce="hidden scroll visible visible-hidden",Re={paddingAbsolute:Ae,updating:{elementEvents:Ee,attributes:Ee,debounce:[Se.number,Se.array,Se.null],ignoreMutation:[Se.function,Se.null]},overflow:{x:Ce,y:Ce},scrollbars:{visibility:"visible hidden auto",autoHide:"never scroll leavemove",autoHideDelay:Se.number,dragScroll:Ae,clickScroll:Ae,touch:Ae},nativeScrollbarsOverlaid:{show:Ae,initialize:Ae}},Me="__osOptionsValidationPlugin",je={[Me]:{q:(t,e)=>{const[n,o]=((t,e,n)=>Te(Re,e,n))(0,t,e);return Le({},o,n)}}},ze=3333333,Be="scroll",He="__osSizeObserverPlugin",Ie={[He]:{q:(t,n,o)=>{const r=W(`
`);D(t,r),lt(t,oe);const i=r[0],s=i.lastChild,l=i.firstChild,c=null==l?void 0:l.firstChild;let a,d=$t(i),u=d,h=!1;const p=()=>{C(l,ze),R(l,ze),C(s,ze),R(s,ze)},f=t=>{a=0,h&&(d=u,n(!0===t))},g=t=>{u=$t(i),h=!t||!at(u,d),t?(Rt(t),h&&!a&&(nt(a),a=ot(f))):f(!1===t),p()},w=y([],[Ct(l,Be,g),Ct(s,Be,g)]);return e(c,{width:ze,height:ze}),p(),[o?g.bind(0,!1):p,w]}}};let ke=0;const De="__osScrollbarsHidingPlugin",Ye={[De]:{G:()=>{const{L:t,P:e,M:n}=_e(),o=!(n||t||!e.x&&!e.y)&&document.createElement("style");return o&&(T(o,"id",`${Ut}-${ke}`),ke++),o},N:(n,o,r,i,s,l)=>{const{R:c}=_e();return[(t,s,l,c)=>{if(n){const{U:n}=i(),{W:a,X:d}=t,{x:u,y:h}=d,{x:p,y:f}=a,g=n[c?"paddingRight":"paddingLeft"],w=n.paddingTop,b=s.w+l.w,v=s.h+l.h,y={w:f&&h?`${f+b-g}px`:"",h:p&&u?`${p+v-w}px`:""};if(r){const{sheet:t}=r;if(t){const{cssRules:e}=t;if(e){e.length||t.insertRule(`#${T(r,"id")} + .${Ut}::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},(r,a,d)=>{if(n){const u=d||s(r),{U:h}=i(),{X: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,O(w));return st(o,Ut),c||(w.height=""),e(o,w),[()=>{l(u,a,n,v),e(o,v),lt(o,Ut)},u]}return[ft]}]}}},Ve=(t,e)=>u(t)?t.apply(0,e):t,Xe=(t,e,n,o)=>Ve(o||Ve(n,t),t)||e.apply(0,t),Ne=(t,e,n,o)=>{let r=Ve(o,t);return(l(r)||s(r))&&(r=Ve(n,t)),!0===r||l(r)||s(r)?e.apply(0,t):r},We=N.bind(0,""),Fe=t=>{D(H(t),B(t)),X(t)},Ke=t=>{const{j:e,L:n}=_e(),o=Oe()[De],r=o&&o.G,{J:i,K:s,A:l,I:c}=e(),a=w(t),d=t,u=a?t:d.target,h=z(u,"textarea"),p=!h&&z(u,"body"),f=u.ownerDocument,g=f.body,b=f.defaultView,m=!!et&&!h&&n,x=Xe.bind(0,[u]),$=Ne.bind(0,[u]),P=[x(We,s,d.viewport),x(We,s),x(We)].filter((t=>!!m||t!==u))[0],L=P===u,S={Z:u,J:h?x(We,i,d.host):u,K:P,A:!L&&$(We,l,d.padding),I:!L&&$(We,c,d.content),tt:!L&&!n&&r&&r(),nt:b,ot:f,st:H(g),et:g,ct:h,it:p,rt:a,lt:L,ft:(t,e)=>L?((t,e,n)=>{const o=T(t,Xt)||"";return new Set(o.split(" ")).has(n)})(P,0,e):((t,e)=>it(t,e,((t,e)=>t.contains(e))))(P,t),ut:(t,e,n)=>L?A(P,Xt,e,n):(n?lt:st)(P,t)},C=O(S).reduce(((t,e)=>{const n=S[e];return y(t,!(!n||H(n))&&n)}),[]),R=t=>t?v(C,t)>-1:null,{Z:M,J:j,A:I,K:Y,I:N,tt:W}=S,F=[],K=h&&R(j),J=h?M:B([N,Y,I,j,M].find((t=>!1===R(t)))),q=N||Y;return[S,()=>{const t=((t,e)=>(T(t,Xt,e),E.bind(0,t,Xt)))(j,L?"viewport":"host"),e=lt(I,Jt),o=lt(Y,!L&&qt),r=lt(N,Gt);K&&(V(M,j),y(F,(()=>{V(j,M),X(j)}))),D(q,J),D(j,I),D(I||j,!L&&Y),D(Y,N),y(F,(()=>{t(),E(Y,Nt),E(Y,Wt),R(N)&&Fe(N),R(Y)&&Fe(Y),R(I)&&Fe(I),e(),o(),r()})),n&&!L&&y(F,st.bind(0,Y,Zt)),W&&(((t,e)=>{k(H(t),t,e)})(Y,W),y(F,X.bind(0,W)))},_.bind(0,F)]},Je=(t,n)=>{const{I:o}=t,[r]=n;return t=>{const{R:n}=_e(),{dt:i}=r(),{_t:s}=t,l=(o||!n)&&s;return l&&e(o,{height:i?"":"100%"}),{gt:l,ht:l}}},qe=(t,o)=>{const[r,i]=o,{J:s,A:l,K:c,lt:a}=t,[d,u]=n({_:ut,u:mt()},mt.bind(0,s,"padding",""));return(t,n,o)=>{let[s,h]=u(o);const{L:p,R:f}=_e(),{vt:g}=r(),{gt:w,ht:b,wt:v}=t,[y,m]=n("paddingAbsolute");(w||h||!f&&b)&&([s,h]=d(o));const x=!a&&(m||v||h);if(x){const t=!y||!l&&!p,n=s.r+s.l,o=s.t+s.b,r={marginRight:t&&!g?-n:0,marginBottom:t?-o:0,marginLeft:t&&g?-n:0,top:t?-s.t:0,right:t?g?-s.r:"auto":0,left:t?g?"auto":-s.l:0,width:t?`calc(100% + ${n}px)`:""},a={paddingTop:t?s.t:0,paddingRight:t?s.r:0,paddingBottom:t?s.b:0,paddingLeft:t?s.l:0};e(l||c,r),e(c,a),i({A:s,bt:!t,U:l?a:P({},r,a)})}return{yt:x}}},{max:Ue}=Math,Ge="visible",Ze="hidden",Qe=42,tn={_:at,u:{w:0,h:0}},en={_:dt,u:{x:Ze,y:Ze}},nn=(t,e,n)=>n?lt(t,e):st(t,e),on=t=>0===t.indexOf(Ge),rn=(t,o)=>{const[r,i]=o,{J:s,A:l,K:c,tt:a,lt:d,ut:u}=t,{T:h,R:p,L:f,P:g}=_e(),w=Oe()[De],b=!d&&!f&&(g.x||g.y),[v,y]=n(tn,Lt.bind(0,c)),[m,x]=n(tn,Pt.bind(0,c)),[_,$]=n(tn),[O]=n(en),P=(t,n)=>{if(e(c,{height:""}),n){const{bt:n,A:o}=r(),{St:i,W:l}=t,a=Lt(s),d=Ot(s),u="content-box"===e(c,"boxSizing"),h=n||u?o.b+o.t:0,p=!(g.x&&u);e(c,{height:d.h+a.h+(i.x&&p?l.x:0)-h})}},L=(t,n)=>{const o=f||t?0:Qe,r=(t,r,i)=>{const s=e(c,t),l="scroll"===(n?n[t]:s);return[s,l,l&&!f?r?o:i:0,r&&!!o]},[i,s,l,a]=r("overflowX",g.x,h.x),[d,u,p,w]=r("overflowY",g.y,h.y);return{xt:{x:i,y:d},St:{x:s,y:u},W:{x:l,y:p},X:{x:a,y:w}}},S=(t,e,n,o)=>{const{W:i,X:s}=t,{x:l,y:c}=s,{x:a,y:d}=i,{U:u}=r(),h=e?"marginLeft":"marginRight",p=e?"paddingLeft":"paddingRight",f=u[h],g=u.marginBottom,w=u[p],b=u.paddingBottom;o.width=`calc(100% + ${d+-1*f}px)`,o[h]=-d+f,o.marginBottom=-a+g,n&&(o[p]=w+(c?d:0),o.paddingBottom=b+(l?a:0))},[E,C]=w?w.N(b,c,a,r,L,S):[()=>b,()=>[ft]];return(t,n,o)=>{const{gt:a,Ct:h,ht:w,yt:b,_t:R,wt:M}=t,{dt:j,vt:z}=r(),[B,H]=n("nativeScrollbarsOverlaid.show"),[I,k]=n("overflow"),D=B&&g.x&&g.y,Y=!d&&!p&&(a||w||h||H||R),V=on(I.x),X=on(I.y),N=V||X;let W,F=y(o),K=x(o),J=$(o);if(H&&f&&u(Zt,Kt,!D),Y&&(W=L(D),P(W,j)),a||b||w||M||H){N&&u(Qt,Ft,!1);const[t,e]=C(D,z,W),[n,r]=F=v(o),[i,s]=K=m(o),l=Ot(c);let a=i,d=l;t(),(s||r||H)&&e&&!D&&E(e,i,n,z)&&(d=Ot(c),a=Pt(c)),J=_(((t,e,n)=>{const o=window.devicePixelRatio%1!=0?1:0,r={w:Ue(0,t.w-e.w-Ue(0,n.w)),h:Ue(0,t.h-e.h-Ue(0,n.h))};return{w:r.w>o?r.w:0,h:r.h>o?r.h:0}})({w:Ue(i.w,a.w),h:Ue(i.h,a.h)},{w:d.w+Ue(0,l.w-i.w),h:d.h+Ue(0,l.h-i.h)},n),o)}const[q,U]=J,[G,Z]=K,[Q,tt]=F,et={x:q.w>0,y:q.h>0},nt=V&&X&&(et.x||et.y)||V&&et.x&&!et.y||X&&et.y&&!et.x;if(b||M||tt||Z||U||k||H||Y){const t={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},n=((t,e,n,o)=>{const r=(t,e)=>{const n=on(t),o=e&&n&&t.replace(`${Ge}-`,"")||"";return[e&&!n?t:"",on(o)?"hidden":o]},[i,s]=r(n.x,e.x),[l,c]=r(n.y,e.y);return o.overflowX=s&&l?s:i,o.overflowY=c&&i?c:l,L(t,o)})(D,et,I,t),o=E(n,G,Q,z);d||S(n,z,o,t),Y&&P(n,j),d?(T(s,Nt,t.overflowX),T(s,Wt,t.overflowY)):e(c,t)}A(s,Xt,Ft,nt),nn(l,Qt,nt),!d&&nn(c,Qt,N);const[ot,rt]=O(L(D).xt);return i({xt:ot,$t:{x:q.w,y:q.h},Ot:et}),{zt:rt,At:U}}},sn=(e,n,o)=>{const r={},i=n||{};return t(O(e).concat(O(i)),(t=>{const n=e[t],s=i[t];r[t]=!!(o||n||s)})),r},ln="animationstart",cn="scroll",an=3333333,dn=t=>"rtl"===e(t,"direction"),un=t=>t&&(t.height||t.width),hn=(t,e,o)=>{const{It:r=!1,Tt:i=!1}=o||{},s=Oe()[He],{H:l}=_e(),c=W(`
`)[0],a=c.firstChild,d=dn.bind(0,c),[u]=n({u:void 0,g:!0,_:(t,e)=>!(!t||!un(t)&&un(e))}),f=t=>{const n=h(t)&&t.length>0&&p(t[0]),o=!n&&(t=>"boolean"==typeof t)(t[0]);let i=!1,s=!1,a=!0;if(n){const[e,,n]=u(t.pop().contentRect),o=un(e),r=un(n);i=!n||!o,s=!r&&o,a=!i}else o?[,a]=t:s=!0===t;if(r&&a){const e=o?t[0]:dn(c);C(c,e?l.n?-an:l.i?0:an:an),R(c,an)}i||e({gt:!o,Pt:o?t:void 0,Tt:!!s})},g=[];let w,b=!!i&&f;if(et){const t=new et(f);t.observe(a),y(g,(()=>{t.disconnect()}))}else if(s){const[t,e]=s.q(a,f,i);b=t,y(g,e)}if(r){w=n({u:!d()},d);const[t]=w;y(g,Ct(c,cn,(e=>{const n=t(),[o,r]=n;r&&(st(a,"ltr rtl"),lt(a,o?"rtl":"ltr"),f(n)),Rt(e)})))}return b&&(lt(c,ee),y(g,Ct(c,ln,b,{O:!!et}))),Y(t,c),()=>{_(g),X(c)}},pn=(t,e)=>{const o=N(se),r=[],[i]=n({u:!1}),s=t=>{if(t){const n=i((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=n;o&&e(n)}};if(tt){const e=new tt((t=>{t&&t.length>0&&s(t.pop())}),{root:t});e.observe(o),y(r,(()=>{e.disconnect()}))}else{const t=()=>{const t=$t(o);s(t)};y(r,hn(o,t)),t()}return Y(t,o),()=>{_(r),X(o)}},fn=(e,n,o,r)=>{let i=!1;const{Lt:s,Mt:l,Ht:c,Et:a,Rt:u,Dt:h}=r||{},[p,f]=((e,n,o)=>{let r,i=!1;const s=s=>{if(o){const l=o.reduce(((t,n)=>{if(n){const o=n[0],r=n[1],i=r&&o&&(s?s(o):j(o,e));i&&i.length&&r&&d(r)&&y(t,[i,r.trim()],!0)}return t}),[]);t(l,(e=>t(e[0],(t=>{const o=e[1],s=r.get(t);if(s){const t=s[0],e=s[1];t===o&&e()}const l=Ct(t,o,(e=>{i?(l(),r.delete(t)):n(e)}));r.set(t,[o,l])}))))}};return o&&(r=new WeakMap,s()),[()=>{i=!0},s]})(e,gt((()=>{i&&o(!0)}),{v:33,p:99}),c),g=l||[],w=(s||[]).concat(g),b=i=>{const s=u||ft,l=h||ft,c=[],p=[];let w=!1,b=!1,m=!1;t(i,(t=>{const{attributeName:o,target:i,type:u,oldValue:h,addedNodes:f}=t,x="attributes"===u,_="childList"===u,$=e===i,O=x&&d(o)?T(i,o):0,P=0!==O&&h!==O,L=v(g,o)>-1&&P;if(n&&!$){const n=!x,c=x&&L,d=c&&a&&z(i,a),u=(d?!s(i,o,h,O):n||c)&&!l(t,!!d,e,r);y(p,f),b=b||u,m=m||_}!n&&$&&P&&!s(i,o,h,O)&&(y(c,o),w=w||L)})),m&&!x(p)&&f((t=>p.reduce(((e,n)=>(y(e,j(t,n)),z(n,t)?y(e,n):e)),[]))),n?b&&o(!1):x(c)&&!w||o(c,w)},m=new Q(b);return m.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:n,childList:n,characterData:n}),i=!0,[()=>{i&&(p(),m.disconnect(),i=!1)},()=>{i&&b(m.takeRecords())}]},gn=`[${Xt}]`,wn=`.${qt}`,bn=["tabindex"],vn=["wrap","cols","rows"],yn=["id","class","style","open"],mn=(e,o,r)=>{let i,s,l;const[,c]=o,{J:p,K:f,I:g,ct:w,lt:y,ft:m,ut:x}=e,{L:_,R:$}=_e(),[P]=n({_:at,u:{w:0,h:0}},(()=>{const t=m(Qt,Ft);t&&x(Qt,Ft);const e=Pt(g),n=Pt(f),o=Lt(f);return t&&x(Qt,Ft,!0),{w:n.w+e.w+o.w,h:n.h+e.h+o.h}})),L=w?vn:yn.concat(vn),S=gt(r,{v:()=>i,p:()=>s,m(t,e){const[n]=t,[o]=e;return[O(n).concat(O(o)).reduce(((t,e)=>(t[e]=n[e]||o[e],t)),{})]}}),A=e=>{t(e||bn,(t=>{if(v(bn,t)>-1){const e=T(p,t);d(e)?T(f,t,e):E(f,t)}}))},C=({gt:t,Pt:e,Tt:n})=>{const o=!t||n?r:S;let i=!1;if(e){const[t,n]=e;i=n,c({vt:t})}o({gt:t,wt:i})},R=t=>{const[,e]=P();e&&(t?r:S)({ht:!0})},M=(g||!$)&&pn(p,(t=>{const[e,n]=t;c({dt:e}),r({_t:n})})),j=!y&&hn(p,C,{Tt:!0,It:!_}),[z]=fn(p,!1,((t,e)=>{e?S({Ct:!0}):y||A(t)}),{Mt:yn,Lt:yn.concat(bn)}),B=y&&new et(C.bind(0,{gt:!0}));return B&&B.observe(p),A(),[t=>{const[e]=t("updating.ignoreMutation"),[n,o]=t("updating.attributes"),[r,c]=t("updating.elementEvents"),[d,p]=t("updating.debounce"),w=t=>u(e)&&e(t);if((c||o)&&(l&&(l[1](),l[0]()),l=fn(g||f,!0,R,{Mt:L.concat(n||[]),Lt:L.concat(n||[]),Ht:r,Et:gn,Dt:(t,e)=>{const{target:n,attributeName:o}=t;return!(e||!o)&&((t,e,n)=>{const o=t&&I(t,e),r=t&&((t,e)=>{const n=e?b(e)?e:null:document;return n?n.querySelector(t):null})(n,o);return!(!o||!r||o!==t&&r!==t&&I(I(t,n),e)===o)})(n,gn,wn)||!!w(t)}})),p)if(S.S(),h(d)){const t=d[0],e=d[1];i=!!a(t)&&t,s=!!a(e)&&e}else a(d)?(i=d,s=!1):(i=!1,s=!1)},()=>{l&&l[0](),M&&M(),j&&j(),B&&B.disconnect(),z()}]},xn={A:{t:0,r:0,b:0,l:0},bt:!1,U:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},$t:{x:0,y:0},xt:{x:"hidden",y:"hidden"},Ot:{x:!1,y:!1},dt:!1,vt:!1},_n=t=>{const e=N(`${le} ${t}`),n=N(de),o=N(ue);return D(e,n),D(n,o),{kt:e,Ft:n,Yt:o}},$n=new Set,On=new WeakMap,Pn=(e,n,o)=>{let r=!1;const{B:i,P:s,D:l}=_e(),c=Oe(),d=w(e)?e:e.target,h=(t=>On.get(t))(d);if(h)return h;const p=c[Me],f=t=>{const e=t||{},n=p&&p.q;return n?n(e,!0):e},g=P({},i(),f(n)),[b,v,y]=Bt(o),[m,x,_]=((e,n)=>{const o=It(n,{}),r=kt(xn),[i,s,l]=Bt(),[c]=r,[d,u,h]=Ke(e),p=((e,n)=>{const{K:o}=e,{L:r,P:i,R:s}=_e(),l=!r&&(i.x||i.y),c=[Je(e,n),qe(e,n),rn(e,n)];return(e,n,r)=>{const i=sn(P({gt:!1,yt:!1,wt:!1,_t:!1,At:!1,zt:!1,Ct:!1,ht:!1},n),{},r),d=l||!s,u=d&&C(o),h=d&&R(o);let p=i;return t(c,(t=>{p=sn(p,t(p,e,!!r)||{},r)})),a(u)&&C(o,u),a(h)&&R(o,h),p}})(d,r),[f,g]=mn(d,r,(t=>{l("u",[p(o,t),{},!1])})),w=c.bind(0);return w.jt=t=>{i("u",t)},w.Vt=u,w.Bt=d,[(t,e)=>{const o=It(n,t,e);f(o),l("u",[p(o,{},e),t,!!e])},w,()=>{s(),g(),h()}]})(e,g),[$,S,T]=((t,e,n)=>{const o=kt({}),[r]=o,[i,s,l]=((t,e)=>{const{j:n}=_e(),{qt:o}=n(),{Z:r,J:i,K:s,rt:l}=e,c=!l&&t.scrollbarsSlot,a=Ne([r,i,s],(()=>i),o,c),d=_n(ce),u=_n(ae),{kt:h}=d,{kt:p}=u;return[{Gt:d,Nt:u},()=>{D(a,h),D(a,p)},X.bind(0,[h,p])]})(t,n),c=r.bind(0);return c.Bt=i,c.Vt=s,[(t,n)=>{const o=It(e,t,n);console.log(o)},c,()=>{l()}]})(e,g,x.Bt),A=(t,e)=>{m(t,e),$(t,e)},E=l(A.bind(0,{},!0)),M=t=>{(t=>{On.delete(t),$n.delete(t)})(d),E(),T(),_(),r=!0,y("destroyed",[j,!!t]),v()},j={options(t){if(t){const e=fe(g,f(t));L(e)||(P(g,e),A(e))}return P({},g)},on:b,off:(t,e)=>{t&&e&&v(t,e)},state(){const{$t:t,xt:e,Ot:n,A:o,bt:i}=x();return P({},{overflowAmount:t,overflowStyle:e,hasOverflow:n,padding:o,paddingAbsolute:i,destroyed:r})},elements(){const{Z:t,J:e,A:n,K:o,I:r}=x.Bt;return P({},{target:t,host:e,padding:n||o,viewport:o,content:r||o})},update:t=>(A({},t),j),destroy:M.bind(0)};return t(O(c),(t=>{const e=c[t];u(e)&&e(Pn,j)})),s.x&&s.y&&!g.nativeScrollbarsOverlaid.initialize?(M(!0),j):(x.Vt(),S.Vt(),((t,e)=>{On.set(t,e),$n.add(t)})(d,j),y("initialized",[j]),x.jt(((t,e,n)=>{const{gt:o,wt:r,_t:i,At:s,zt:l,ht:c,Ct:a}=t;y("updated",[j,{updateHints:{sizeChanged:o,directionChanged:r,heightIntrinsicChanged:i,overflowAmountChanged:s,overflowStyleChanged:l,contentMutation:c,hostMutation:a},changedOptions:e,force:n}])})),j.update(!0))};Pn.plugin=e=>t(h(e)?e:[e],(e=>{t(O(e),(t=>{$e[t]=e[t]}))})),Pn.env=()=>{const{T:t,P:e,L:n,H:o,R:r,M:i,F:s,Y:l,j:c,V:a,B:d,k:u}=_e();return P({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:n,rtlScrollBehavior:o,flexboxGlue:r,cssCustomProperties:i,defaultInitializationStrategy:s,defaultDefaultOptions:l,getInitializationStrategy:c,setInitializationStrategy:a,getDefaultOptions:d,setDefaultOptions:u})};export{Pn as OverlayScrollbars,je as optionsValidationPlugin,Ye as scrollbarsHidingPlugin,Ie as sizeObserverPlugin}; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index e566812..33f8568 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -1,731 +1,727 @@ -(function(r, e) { - "object" === typeof exports && "undefined" !== typeof module ? e(exports) : "function" === typeof define && define.amd ? define([ "exports" ], e) : (r = "undefined" !== typeof globalThis ? globalThis : r || self, - e(r.OverlayScrollbars = {})); +(function(r, a) { + "object" === typeof exports && "undefined" !== typeof module ? a(exports) : "function" === typeof define && define.amd ? define([ "exports" ], a) : (r = "undefined" !== typeof globalThis ? globalThis : r || self, + a(r.OverlayScrollbars = {})); })(this, (function(r) { "use strict"; - function createCache(r, e) { - var a = r.v, t = r.o, n = r.u; - var i = a; - var v; - var o = function cacheUpdateContextual(r, e) { - var a = i; - var o = r; - var u = e || (t ? !t(a, o) : a !== o); - if (u || n) { - i = o; - v = a; - } - return [ i, u, v ]; - }; - var u = function cacheUpdateIsolated(r) { - return o(e(i, v), r); - }; - var f = function getCurrentCache(r) { - return [ i, !!r, v ]; - }; - return [ e ? u : o, f ]; - } - function isUndefined(r) { - return void 0 === r; - } - function isNull(r) { - return null === r; - } - function isNumber(r) { - return "number" === typeof r; - } - function isString(r) { - return "string" === typeof r; - } - function isBoolean(r) { - return "boolean" === typeof r; - } - function isFunction(r) { - return "function" === typeof r; - } - function isArray(r) { - return Array.isArray(r); - } - function isObject(r) { - return "object" === typeof r && !isArray(r) && !isNull(r); - } - function isArrayLike(r) { - var e = !!r && r.length; - var a = isNumber(e) && e > -1 && e % 1 == 0; - return isArray(r) || !isFunction(r) && a ? e > 0 && isObject(r) ? e - 1 in r : true : false; - } - function isPlainObject(r) { - if (!r || !isObject(r) || "object" !== i(r)) { - return false; - } - var e; - var a = "constructor"; - var t = r[a]; - var v = t && t.prototype; - var o = n.call(r, a); - var u = v && n.call(v, "isPrototypeOf"); - if (t && !o && !u) { - return false; - } - for (e in r) {} - return isUndefined(e) || n.call(r, e); - } - function isHTMLElement(r) { - var a = window.HTMLElement; - return r ? a ? r instanceof a : r.nodeType === e : false; - } - function isElement(r) { - var a = window.Element; - return r ? a ? r instanceof a : r.nodeType === e : false; - } - function each(r, e) { - if (isArrayLike(r)) { - for (var a = 0; a < r.length; a++) { - if (false === e(r[a], a, r)) { + function each(r, a) { + if (h(r)) { + for (var n = 0; n < r.length; n++) { + if (false === a(r[n], n, r)) { break; } } } else if (r) { - each(Object.keys(r), (function(a) { - return e(r[a], a, r); + each(Object.keys(r), (function(n) { + return a(r[n], n, r); })); } return r; } - function assignDeep(r, e, a, t, n, i, v) { - var o = [ e, a, t, n, i, v ]; - if (("object" !== typeof r || isNull(r)) && !isFunction(r)) { - r = {}; - } - each(o, (function(e) { - each(l(e), (function(a) { - var t = e[a]; - if (r === t) { - return true; - } - var n = isArray(t); - if (t && (isPlainObject(t) || n)) { - var i = r[a]; - var v = i; - if (n && !isArray(i)) { - v = []; - } else if (!n && !isPlainObject(i)) { - v = {}; - } - r[a] = assignDeep(v, t); - } else { - r[a] = t; - } - })); - })); - return r; - } - function isEmptyObject(r) { - for (var e in r) { - return false; - } - return true; - } - function getSetProp(r, e, a, t) { - if (isUndefined(t)) { - return a ? a[r] : e; - } - a && (a[r] = t); - } - function attr(r, e, a) { - if (isUndefined(a)) { - return r ? r.getAttribute(e) : null; - } - r && r.setAttribute(e, a); - } - function scrollLeft(r, e) { - return getSetProp("scrollLeft", 0, r, e); - } - function scrollTop(r, e) { - return getSetProp("scrollTop", 0, r, e); - } - function style(r, e) { - var a = isString(e); - var t = isArray(e) || a; + function style(r, a) { + var n = l(a); + var t = d(a) || n; if (t) { - var n = a ? "" : {}; + var e = n ? "" : {}; if (r) { var i = window.getComputedStyle(r, null); - n = a ? ur(r, i, e) : e.reduce((function(e, a) { - e[a] = ur(r, i, a); - return e; - }), n); + e = n ? zr(r, i, a) : a.reduce((function(a, n) { + a[n] = zr(r, i, n); + return a; + }), e); } - return n; + return e; } - each(l(e), (function(a) { - return fr(r, a, e[a]); + each(E(a), (function(n) { + return Ar(r, n, a[n]); })); } function getDefaultExportFromCjs(r) { - return r && r.g && Object.prototype.hasOwnProperty.call(r, "default") ? r["default"] : r; + return r && r.v && Object.prototype.hasOwnProperty.call(r, "default") ? r["default"] : r; } - var e = Node.ELEMENT_NODE; - var a = Object.prototype, t = a.toString, n = a.hasOwnProperty; - var i = function type(r) { - return isUndefined(r) || isNull(r) ? "" + r : t.call(r).replace(/^\[object (.+)\]$/, "$1").toLowerCase(); + var a = function createCache(r, a) { + var n = r.o, t = r.u, e = r.g; + var i = n; + var v; + var o = function cacheUpdateContextual(r, a) { + var n = i; + var o = r; + var u = a || (t ? !t(n, o) : n !== o); + if (u || e) { + i = o; + v = n; + } + return [ i, u, v ]; + }; + var u = function cacheUpdateIsolated(r) { + return o(a(i, v), r); + }; + var f = function getCurrentCache(r) { + return [ i, !!r, v ]; + }; + return [ a ? u : o, f ]; }; - var v = function indexOf(r, e, a) { - return r.indexOf(e, a); + var n = Node.ELEMENT_NODE; + var t = Object.prototype, e = t.toString, i = t.hasOwnProperty; + var v = function isUndefined(r) { + return void 0 === r; }; - var o = function push(r, e, a) { - !a && !isString(e) && isArrayLike(e) ? Array.prototype.push.apply(r, e) : r.push(e); + var o = function isNull(r) { + return null === r; + }; + var u = function type(r) { + return v(r) || o(r) ? "" + r : e.call(r).replace(/^\[object (.+)\]$/, "$1").toLowerCase(); + }; + var f = function isNumber(r) { + return "number" === typeof r; + }; + var l = function isString(r) { + return "string" === typeof r; + }; + var c = function isBoolean(r) { + return "boolean" === typeof r; + }; + var s = function isFunction(r) { + return "function" === typeof r; + }; + var d = function isArray(r) { + return Array.isArray(r); + }; + var g = function isObject(r) { + return "object" === typeof r && !d(r) && !o(r); + }; + var h = function isArrayLike(r) { + var a = !!r && r.length; + var n = f(a) && a > -1 && a % 1 == 0; + return d(r) || !s(r) && n ? a > 0 && g(r) ? a - 1 in r : true : false; + }; + var p = function isPlainObject(r) { + if (!r || !g(r) || "object" !== u(r)) { + return false; + } + var a; + var n = "constructor"; + var t = r[n]; + var e = t && t.prototype; + var o = i.call(r, n); + var f = e && i.call(e, "isPrototypeOf"); + if (t && !o && !f) { + return false; + } + for (a in r) {} + return v(a) || i.call(r, a); + }; + var w = function isHTMLElement(r) { + var a = window.HTMLElement; + return r ? a ? r instanceof a : r.nodeType === n : false; + }; + var b = function isElement(r) { + var a = window.Element; + return r ? a ? r instanceof a : r.nodeType === n : false; + }; + var m = function indexOf(r, a, n) { + return r.indexOf(a, n); + }; + var y = function push(r, a, n) { + !n && !l(a) && h(a) ? Array.prototype.push.apply(r, a) : r.push(a); return r; }; - var u = function from(r) { - if (Array.from && r) { - return Array.from(r); + var S = function from(r) { + var a = Array.from; + var n = []; + if (a && r) { + return a(r); } - var e = []; if (r instanceof Set) { r.forEach((function(r) { - o(e, r); + y(n, r); })); } else { each(r, (function(r) { - o(e, r); + y(n, r); })); } - return e; + return n; }; - var f = function isEmptyArray(r) { + var C = function isEmptyArray(r) { return !!r && 0 === r.length; }; - var s = function runEachAndClear(r, e, a) { + var O = function runEachAndClear(r, a, n) { var t = function runFn(r) { - return r && r.apply(void 0, e || []); + return r && r.apply(void 0, a || []); }; - if (r instanceof Set) { - r.forEach(t); - !a && r.clear(); - } else { - each(r, t); - !a && r.splice && r.splice(0, r.length); - } + each(r, t); + !n && (r.length = 0); }; - var c = function hasOwnProperty(r, e) { - return Object.prototype.hasOwnProperty.call(r, e); + var x = function hasOwnProperty(r, a) { + return Object.prototype.hasOwnProperty.call(r, a); }; - var l = function keys(r) { + var E = function keys(r) { return r ? Object.keys(r) : []; }; - var d = function attrClass(r, e, a, t) { - var n = attr(r, e) || ""; - var i = new Set(n.split(" ")); - i[t ? "add" : "delete"](a); - attr(r, e, u(i).join(" ").trim()); + var z = function assignDeep(r, a, n, t, e, i, v) { + var u = [ a, n, t, e, i, v ]; + if (("object" !== typeof r || o(r)) && !s(r)) { + r = {}; + } + each(u, (function(a) { + each(E(a), (function(n) { + var t = a[n]; + if (r === t) { + return true; + } + var e = d(t); + if (t && (p(t) || e)) { + var i = r[n]; + var v = i; + if (e && !d(i)) { + v = []; + } else if (!e && !p(i)) { + v = {}; + } + r[n] = assignDeep(v, t); + } else { + r[n] = t; + } + })); + })); + return r; }; - var g = function hasAttrClass(r, e, a) { - var t = attr(r, e) || ""; - var n = new Set(t.split(" ")); - return n.has(a); + var A = function isEmptyObject(r) { + for (var a in r) { + return false; + } + return true; }; - var p = function removeAttr(r, e) { - r && r.removeAttribute(e); + var P = function getSetProp(r, a, n, t) { + if (v(t)) { + return n ? n[r] : a; + } + n && (n[r] = t); }; - var h = Element.prototype; - var b = function find(r, e) { - var a = []; - var t = e ? isElement(e) ? e : null : document; - return t ? o(a, t.querySelectorAll(r)) : a; + var T = function attr(r, a, n) { + if (v(n)) { + return r ? r.getAttribute(a) : null; + } + r && r.setAttribute(a, n); }; - var w = function findFirst(r, e) { - var a = e ? isElement(e) ? e : null : document; - return a ? a.querySelector(r) : null; + var L = function attrClass(r, a, n, t) { + var e = T(r, a) || ""; + var i = new Set(e.split(" ")); + i[t ? "add" : "delete"](n); + T(r, a, S(i).join(" ").trim()); }; - var m = function is(r, e) { - if (isElement(r)) { - var a = h.matches || h.msMatchesSelector; - return a.call(r, e); + var I = function hasAttrClass(r, a, n) { + var t = T(r, a) || ""; + var e = new Set(t.split(" ")); + return e.has(n); + }; + var D = function removeAttr(r, a) { + r && r.removeAttribute(a); + }; + var M = function scrollLeft(r, a) { + return P("scrollLeft", 0, r, a); + }; + var R = function scrollTop(r, a) { + return P("scrollTop", 0, r, a); + }; + var V = Element.prototype; + var j = function find(r, a) { + var n = []; + var t = a ? b(a) ? a : null : document; + return t ? y(n, t.querySelectorAll(r)) : n; + }; + var H = function findFirst(r, a) { + var n = a ? b(a) ? a : null : document; + return n ? n.querySelector(r) : null; + }; + var B = function is(r, a) { + if (b(r)) { + var n = V.matches || V.msMatchesSelector; + return n.call(r, a); } return false; }; - var y = function contents(r) { - return r ? u(r.childNodes) : []; + var k = function contents(r) { + return r ? S(r.childNodes) : []; }; - var S = function parent(r) { + var F = function parent(r) { return r ? r.parentElement : null; }; - var C = function closest(r, e) { - if (isElement(r)) { - var a = h.closest; - if (a) { - return a.call(r, e); + var q = function closest(r, a) { + if (b(r)) { + var n = V.closest; + if (n) { + return n.call(r, a); } do { - if (m(r, e)) { + if (B(r, a)) { return r; } - r = S(r); + r = F(r); } while (r); } return null; }; - var O = function liesBetween(r, e, a) { - var t = r && C(r, e); - var n = r && w(a, t); - return t && n ? t === r || n === r || C(C(r, a), e) !== t : false; + var U = function liesBetween(r, a, n) { + var t = r && q(r, a); + var e = r && H(n, t); + return t && e ? t === r || e === r || q(q(r, n), a) !== t : false; }; - var x = function before(r, e, a) { - if (a) { - var t = e; - var n; + var Y = function before(r, a, n) { + if (n) { + var t = a; + var e; if (r) { - if (isArrayLike(a)) { - n = document.createDocumentFragment(); - each(a, (function(r) { + if (h(n)) { + e = document.createDocumentFragment(); + each(n, (function(r) { if (r === t) { t = r.previousSibling; } - n.appendChild(r); + e.appendChild(r); })); } else { - n = a; + e = n; } - if (e) { + if (a) { if (!t) { t = r.firstChild; - } else if (t !== e) { + } else if (t !== a) { t = t.nextSibling; } } - r.insertBefore(n, t || null); + r.insertBefore(e, t || null); } } }; - var A = function appendChildren(r, e) { - x(r, null, e); + var N = function appendChildren(r, a) { + Y(r, null, a); }; - var E = function prependChildren(r, e) { - x(r, r && r.firstChild, e); + var W = function prependChildren(r, a) { + Y(r, r && r.firstChild, a); }; - var D = function insertBefore(r, e) { - x(S(r), r, e); + var G = function insertBefore(r, a) { + Y(F(r), r, a); }; - var L = function insertAfter(r, e) { - x(S(r), r && r.nextSibling, e); + var X = function insertAfter(r, a) { + Y(F(r), r && r.nextSibling, a); }; - var P = function removeElements(r) { - if (isArrayLike(r)) { - each(u(r), (function(r) { + var $ = function removeElements(r) { + if (h(r)) { + each(S(r), (function(r) { return removeElements(r); })); } else if (r) { - var e = S(r); - if (e) { - e.removeChild(r); + var a = F(r); + if (a) { + a.removeChild(r); } } }; - var T = function createDiv(r) { - var e = document.createElement("div"); + var J = function createDiv(r) { + var a = document.createElement("div"); if (r) { - attr(e, "class", r); + T(a, "class", r); } - return e; + return a; }; - var z = function createDOM(r) { - var e = T(); - e.innerHTML = r.trim(); - return each(y(e), (function(r) { - return P(r); + var K = function createDOM(r) { + var a = J(); + a.innerHTML = r.trim(); + return each(k(a), (function(r) { + return $(r); })); }; - var j = function firstLetterToUpper(r) { + var Z = function firstLetterToUpper(r) { return r.charAt(0).toUpperCase() + r.slice(1); }; - var I = function getDummyStyle() { - return T().style; + var Q = function getDummyStyle() { + return J().style; }; - var M = [ "-webkit-", "-moz-", "-o-", "-ms-" ]; - var R = [ "WebKit", "Moz", "O", "MS", "webkit", "moz", "o", "ms" ]; - var F = {}; - var H = {}; - var N = function cssProperty(r) { - var e = H[r]; - if (c(H, r)) { - return e; + var rr = [ "-webkit-", "-moz-", "-o-", "-ms-" ]; + var ar = [ "WebKit", "Moz", "O", "MS", "webkit", "moz", "o", "ms" ]; + var nr = {}; + var tr = {}; + var er = function cssProperty(r) { + var a = tr[r]; + if (x(tr, r)) { + return a; } - var a = j(r); - var t = I(); - each(M, (function(n) { - var i = n.replace(/-/g, ""); - var v = [ r, n + r, i + a, j(i) + a ]; - return !(e = v.find((function(r) { + var n = Z(r); + var t = Q(); + each(rr, (function(e) { + var i = e.replace(/-/g, ""); + var v = [ r, e + r, i + n, Z(i) + n ]; + return !(a = v.find((function(r) { return void 0 !== t[r]; }))); })); - return H[r] = e || ""; + return tr[r] = a || ""; }; - var V = function jsAPI(r) { - var e = F[r] || window[r]; - if (c(F, r)) { - return e; + var ir = function jsAPI(r) { + var a = nr[r] || window[r]; + if (x(nr, r)) { + return a; } - each(R, (function(a) { - e = e || window[a + j(r)]; - return !e; + each(ar, (function(n) { + a = a || window[n + Z(r)]; + return !a; })); - F[r] = e; - return e; + nr[r] = a; + return a; }; - var U = V("MutationObserver"); - var k = V("IntersectionObserver"); - var B = V("ResizeObserver"); - var q = V("cancelAnimationFrame"); - var Y = V("requestAnimationFrame"); - var W = /[^\x20\t\r\n\f]+/g; - var G = function classListAction(r, e, a) { + var vr = ir("MutationObserver"); + var or = ir("IntersectionObserver"); + var ur = ir("ResizeObserver"); + var fr = ir("cancelAnimationFrame"); + var lr = ir("requestAnimationFrame"); + var cr = /[^\x20\t\r\n\f]+/g; + var sr = function classListAction(r, a, n) { var t; - var n = 0; + var e = 0; var i = false; - if (r && e && isString(e)) { - var v = e.match(W) || []; + if (r && a && l(a)) { + var v = a.match(cr) || []; i = v.length > 0; - while (t = v[n++]) { - i = !!a(r.classList, t) && i; + while (t = v[e++]) { + i = !!n(r.classList, t) && i; } } return i; }; - var X = function hasClass(r, e) { - return G(r, e, (function(r, e) { - return r.contains(e); + var dr = function hasClass(r, a) { + return sr(r, a, (function(r, a) { + return r.contains(a); })); }; - var $ = function removeClass(r, e) { - G(r, e, (function(r, e) { - return r.remove(e); + var gr = function removeClass(r, a) { + sr(r, a, (function(r, a) { + return r.remove(a); })); }; - var J = function addClass(r, e) { - G(r, e, (function(r, e) { - return r.add(e); + var hr = function addClass(r, a) { + sr(r, a, (function(r, a) { + return r.add(a); })); - return $.bind(0, r, e); + return gr.bind(0, r, a); }; - var K = function equal(r, e, a, t) { - if (r && e) { - var n = true; - each(a, (function(a) { - var i = t ? t(r[a]) : r[a]; - var v = t ? t(e[a]) : e[a]; + var pr = function equal(r, a, n, t) { + if (r && a) { + var e = true; + each(n, (function(n) { + var i = t ? t(r[n]) : r[n]; + var v = t ? t(a[n]) : a[n]; if (i !== v) { - n = false; + e = false; } })); - return n; + return e; } return false; }; - var Z = function equalWH(r, e) { - return K(r, e, [ "w", "h" ]); + var _r = function equalWH(r, a) { + return pr(r, a, [ "w", "h" ]); }; - var Q = function equalXY(r, e) { - return K(r, e, [ "x", "y" ]); + var wr = function equalXY(r, a) { + return pr(r, a, [ "x", "y" ]); }; - var rr = function equalTRBL(r, e) { - return K(r, e, [ "t", "r", "b", "l" ]); + var br = function equalTRBL(r, a) { + return pr(r, a, [ "t", "r", "b", "l" ]); }; - var er = function equalBCRWH(r, e, a) { - return K(r, e, [ "width", "height" ], a && function(r) { + var mr = function equalBCRWH(r, a, n) { + return pr(r, a, [ "width", "height" ], n && function(r) { return Math.round(r); }); }; - var ar = function clearTimeouts(r) { + var yr = function clearTimeouts(r) { r && window.clearTimeout(r); - r && q(r); + r && fr(r); }; - var tr = function noop() {}; - var nr = function debounce(r, e) { - var a; - var t; + var Sr = function noop() {}; + var Cr = function debounce(r, a) { var n; + var t; + var e; var i; - var v = e || {}, o = v.p, f = v._, s = v.m; + var v = a || {}, o = v.p, u = v._, l = v.m; var c = window.setTimeout; - var l = function invokeFunctionToDebounce(e) { - ar(a); - ar(t); - t = a = n = void 0; - r.apply(this, e); + var d = function invokeFunctionToDebounce(a) { + yr(n); + yr(t); + t = n = e = void 0; + r.apply(this, a); }; - var d = function mergeParms(r) { - return s && n ? s(n, r) : r; + var g = function mergeParms(r) { + return l && e ? l(e, r) : r; }; - var g = function flush() { - if (a) { - l(d(i) || i); + var h = function flush() { + if (n) { + d(g(i) || i); } }; var p = function debouncedFn() { - var r = u(arguments); - var e = isFunction(o) ? o() : o; - var v = isNumber(e) && e >= 0; + var r = S(arguments); + var a = s(o) ? o() : o; + var v = f(a) && a >= 0; if (v) { - var s = isFunction(f) ? f() : f; - var p = isNumber(s) && s >= 0; - var h = e > 0 ? c : Y; - var b = d(r); - var w = b || r; - var m = l.bind(0, w); - ar(a); - a = h(m, e); + var l = s(u) ? u() : u; + var p = f(l) && l >= 0; + var w = a > 0 ? c : lr; + var b = g(r); + var m = b || r; + var y = d.bind(0, m); + yr(n); + n = w(y, a); if (p && !t) { - t = c(g, s); + t = c(h, l); } - n = i = w; + e = i = m; } else { - l(r); + d(r); } }; - p.S = g; + p.S = h; return p; }; - var ir = { + var Or = { opacity: 1, zindex: 1 }; - var vr = function parseToZeroOrNumber(r, e) { - var a = e ? parseFloat(r) : parseInt(r, 10); - return Number.isNaN(a) ? 0 : a; + var xr = function parseToZeroOrNumber(r, a) { + var n = a ? parseFloat(r) : parseInt(r, 10); + return n === n ? n : 0; }; - var or = function adaptCSSVal(r, e) { - return !ir[r.toLowerCase()] && isNumber(e) ? e + "px" : e; + var Er = function adaptCSSVal(r, a) { + return !Or[r.toLowerCase()] && f(a) ? a + "px" : a; }; - var ur = function getCSSVal(r, e, a) { - return null != e ? e[a] || e.getPropertyValue(a) : r.style[a]; + var zr = function getCSSVal(r, a, n) { + return null != a ? a[n] || a.getPropertyValue(n) : r.style[n]; }; - var fr = function setCSSVal(r, e, a) { + var Ar = function setCSSVal(r, a, n) { try { if (r) { var t = r.style; - if (!isUndefined(t[e])) { - t[e] = or(e, a); + if (!v(t[a])) { + t[a] = Er(a, n); } else { - t.setProperty(e, a); + t.setProperty(a, n); } } - } catch (n) {} + } catch (e) {} }; - var sr = function topRightBottomLeft(r, e, a) { - var t = e ? e + "-" : ""; - var n = a ? "-" + a : ""; - var i = t + "top" + n; - var v = t + "right" + n; - var o = t + "bottom" + n; - var u = t + "left" + n; + var Pr = function topRightBottomLeft(r, a, n) { + var t = a ? a + "-" : ""; + var e = n ? "-" + n : ""; + var i = t + "top" + e; + var v = t + "right" + e; + var o = t + "bottom" + e; + var u = t + "left" + e; var f = style(r, [ i, v, o, u ]); return { - t: vr(f[i]), - r: vr(f[v]), - b: vr(f[o]), - l: vr(f[u]) + t: xr(f[i]), + r: xr(f[v]), + b: xr(f[o]), + l: xr(f[u]) }; }; - var cr = { + var Tr = { w: 0, h: 0 }; - var lr = function windowSize() { + var Lr = function windowSize() { return { w: window.innerWidth, h: window.innerHeight }; }; - var dr = function offsetSize(r) { + var Ir = function offsetSize(r) { return r ? { w: r.offsetWidth, h: r.offsetHeight - } : cr; + } : Tr; }; - var gr = function clientSize(r) { + var Dr = function clientSize(r) { return r ? { w: r.clientWidth, h: r.clientHeight - } : cr; + } : Tr; }; - var pr = function scrollSize(r) { + var Mr = function scrollSize(r) { return r ? { w: r.scrollWidth, h: r.scrollHeight - } : cr; + } : Tr; }; - var hr = function fractionalSize(r) { - var e = parseFloat(style(r, "height")) || 0; + var Rr = function fractionalSize(r) { var a = parseFloat(style(r, "height")) || 0; + var n = parseFloat(style(r, "height")) || 0; return { - w: a - Math.round(a), - h: e - Math.round(e) + w: n - Math.round(n), + h: a - Math.round(a) }; }; - var _r = function getBoundingClientRect(r) { + var Vr = function getBoundingClientRect(r) { return r.getBoundingClientRect(); }; - var br; - var wr = function supportPassiveEvents() { - if (isUndefined(br)) { - br = false; + var jr; + var Hr = function supportPassiveEvents() { + if (v(jr)) { + jr = false; try { window.addEventListener("test", null, Object.defineProperty({}, "passive", { get: function get() { - br = true; + jr = true; } })); } catch (r) {} } - return br; + return jr; }; - var mr = function splitEventNames(r) { + var Br = function splitEventNames(r) { return r.split(" "); }; - var yr = function off(r, e, a, t) { - each(mr(e), (function(e) { - r.removeEventListener(e, a, t); + var kr = function off(r, a, n, t) { + each(Br(a), (function(a) { + r.removeEventListener(a, n, t); })); }; - var Sr = function on(r, e, a, t) { - var n = wr(); - var i = n && t && t.C || false; + var Fr = function on(r, a, n, t) { + var e = Hr(); + var i = e && t && t.C || false; var v = t && t.O || false; - var u = t && t.A || false; - var f = []; - var c = n ? { + var o = t && t.A || false; + var u = []; + var f = e ? { passive: i, capture: v } : v; - each(mr(e), (function(e) { - var t = u ? function(n) { - r.removeEventListener(e, t, v); - a && a(n); - } : a; - o(f, yr.bind(null, r, e, t, v)); - r.addEventListener(e, t, c); + each(Br(a), (function(a) { + var t = o ? function(e) { + r.removeEventListener(a, t, v); + n && n(e); + } : n; + y(u, kr.bind(null, r, a, t, v)); + r.addEventListener(a, t, f); })); - return s.bind(0, f); + return O.bind(0, u); }; - var Cr = function stopPropagation(r) { + var qr = function stopPropagation(r) { return r.stopPropagation(); }; - var Or = function preventDefault(r) { + var Ur = function preventDefault(r) { return r.preventDefault(); }; - var xr = function stopAndPrevent(r) { - return Cr(r) || Or(r); + var Yr = function stopAndPrevent(r) { + return qr(r) || Ur(r); }; - var Ar = { + var Nr = { x: 0, y: 0 }; - var Er = function absoluteCoordinates(r) { - var e = r ? _r(r) : 0; - return e ? { - x: e.left + window.pageYOffset, - y: e.top + window.pageXOffset - } : Ar; + var Wr = function absoluteCoordinates(r) { + var a = r ? Vr(r) : 0; + return a ? { + x: a.left + window.pageYOffset, + y: a.top + window.pageXOffset + } : Nr; }; - var Dr = function manageListener(r, e) { - each(isArray(e) ? e : [ e ], r); + var Gr = function manageListener(r, a) { + each(d(a) ? a : [ a ], r); }; - var Lr = function createEventListenerHub(r) { - function removeEvent(r, a) { + var Xr = function createEventListenerHub(r) { + var a = new Map; + var n = function removeEvent(r, n) { if (r) { - var t = e.get(r); - Dr((function(r) { + var t = a.get(r); + Gr((function(r) { if (t) { t[r ? "delete" : "clear"](r); } - }), a); + }), n); } else { - e.forEach((function(r) { + a.forEach((function(r) { r.clear(); })); - e.clear(); + a.clear(); } - } - function addEvent(r, a) { - var t = e.get(r) || new Set; - e.set(r, t); - Dr((function(r) { - r && t.add(r); - }), a); - return removeEvent.bind(0, r, a); - } - function triggerEvent(r, a) { - var t = e.get(r); - each(u(t), (function(r) { - if (a && !f(a)) { - r.apply(0, a); + }; + var t = function addEvent(r, t) { + var e = a.get(r) || new Set; + a.set(r, e); + Gr((function(r) { + r && e.add(r); + }), t); + return n.bind(0, r, t); + }; + var e = function triggerEvent(r, n) { + var t = a.get(r); + each(S(t), (function(r) { + if (n && !C(n)) { + r.apply(0, n); } else { r(); } })); - } - var e = new Map; - var a = l(r); - each(a, (function(e) { - addEvent(e, r[e]); + }; + var i = E(r); + each(i, (function(a) { + t(a, r[a]); })); - return [ addEvent, removeEvent, triggerEvent ]; + return [ t, n, e ]; }; - var Pr = function getPropByPath(r, e) { - return r ? e.split(".").reduce((function(r, e) { - return r && c(r, e) ? r[e] : void 0; + var $r = function getPropByPath(r, a) { + return r ? a.split(".").reduce((function(r, a) { + return r && x(r, a) ? r[a] : void 0; }), r) : void 0; }; - var Tr = function createOptionCheck(r, e, a) { + var Jr = function createOptionCheck(r, a, n) { return function(t) { - return [ Pr(r, t), a || void 0 !== Pr(e, t) ]; + return [ $r(r, t), n || void 0 !== $r(a, t) ]; }; }; - var zr = function createState(r) { - var e = r; + var Kr = function createState(r) { + var a = r; return [ function() { - return e; + return a; }, function(r) { - e = assignDeep({}, e, r); + a = z({}, a, r); } ]; }; - var jr = "os-environment"; - var Ir = jr + "-flexbox-glue"; - var Mr = Ir + "-max"; - var Rr = "data-overlayscrollbars"; - var Fr = Rr + "-overflow-x"; - var Hr = Rr + "-overflow-y"; - var Nr = "overflowVisible"; - var Vr = "viewportStyled"; - var Ur = "os-padding"; - var kr = "os-viewport"; - var Br = kr + "-arrange"; - var qr = "os-content"; - var Yr = kr + "-scrollbar-styled"; - var Wr = "os-overflow-visible"; - var Gr = "os-size-observer"; - var Xr = Gr + "-appear"; - var $r = Gr + "-listener"; - var Jr = $r + "-scroll"; - var Kr = $r + "-item"; - var Zr = Kr + "-final"; - var Qr = "os-trinsic-observer"; - var re = "os-scrollbar"; - var ee = re + "-horizontal"; - var ae = re + "-vertical"; - var te = "os-scrollbar-track"; - var ne = "os-scrollbar-handle"; - var ie = function opsStringify(r) { - return JSON.stringify(r, (function(r, e) { - if (isFunction(e)) { + var Zr = "os-environment"; + var Qr = Zr + "-flexbox-glue"; + var ra = Qr + "-max"; + var aa = "data-overlayscrollbars"; + var na = aa + "-overflow-x"; + var ta = aa + "-overflow-y"; + var ea = "overflowVisible"; + var ia = "viewportStyled"; + var va = "os-padding"; + var oa = "os-viewport"; + var ua = oa + "-arrange"; + var fa = "os-content"; + var la = oa + "-scrollbar-styled"; + var ca = "os-overflow-visible"; + var sa = "os-size-observer"; + var da = sa + "-appear"; + var ga = sa + "-listener"; + var ha = ga + "-scroll"; + var pa = ga + "-item"; + var _a = pa + "-final"; + var wa = "os-trinsic-observer"; + var ba = "os-scrollbar"; + var ma = ba + "-horizontal"; + var ya = ba + "-vertical"; + var Sa = "os-scrollbar-track"; + var Ca = "os-scrollbar-handle"; + var Oa = function opsStringify(r) { + return JSON.stringify(r, (function(r, a) { + if (s(a)) { throw new Error; } - return e; + return a; })); }; - var ve = { + var xa = { paddingAbsolute: false, updating: { elementEvents: [ [ "img", "load" ] ], @@ -750,140 +746,140 @@ touch: true } }; - var oe = function getOptionsDiff(r, e) { - var a = {}; - var t = l(e).concat(l(r)); + var Ea = function getOptionsDiff(r, a) { + var n = {}; + var t = E(a).concat(E(r)); each(t, (function(t) { - var n = r[t]; - var i = e[t]; - if (isObject(n) && isObject(i)) { - assignDeep(a[t] = {}, getOptionsDiff(n, i)); - } else if (c(e, t) && i !== n) { + var e = r[t]; + var i = a[t]; + if (g(e) && g(i)) { + z(n[t] = {}, getOptionsDiff(e, i)); + } else if (x(a, t) && i !== e) { var v = true; - if (isArray(n) || isArray(i)) { + if (d(e) || d(i)) { try { - if (ie(n) === ie(i)) { + if (Oa(e) === Oa(i)) { v = false; } } catch (o) {} } if (v) { - a[t] = i; + n[t] = i; } } })); + return n; + }; + var za; + var Aa = Math.abs, Pa = Math.round; + var Ta = function diffBiggerThanOne(r, a) { + var n = Aa(r); + var t = Aa(a); + return !(n === t || n + 1 === t || n - 1 === t); + }; + var La = function getNativeScrollbarSize(r, a, n) { + N(r, a); + var t = Dr(a); + var e = Ir(a); + var i = Rr(n); + return { + x: e.h - t.h + i.h, + y: e.w - t.w + i.w + }; + }; + var Ia = function getNativeScrollbarsHiding(r) { + var a = false; + var n = hr(r, la); + try { + a = "none" === style(r, er("scrollbar-width")) || "none" === window.getComputedStyle(r, "::-webkit-scrollbar").getPropertyValue("display"); + } catch (t) {} + n(); return a; }; - var ue; - var fe = Math.abs, se = Math.round; - var ce = function diffBiggerThanOne(r, e) { - var a = fe(r); - var t = fe(e); - return !(a === t || a + 1 === t || a - 1 === t); - }; - var le = function getNativeScrollbarSize(r, e, a) { - A(r, e); - var t = gr(e); - var n = dr(e); - var i = hr(a); - return { - x: n.h - t.h + i.h, - y: n.w - t.w + i.w - }; - }; - var de = function getNativeScrollbarsHiding(r) { - var e = false; - var a = J(r, Yr); - try { - e = "none" === style(r, N("scrollbar-width")) || "none" === window.getComputedStyle(r, "::-webkit-scrollbar").getPropertyValue("display"); - } catch (t) {} - a(); - return e; - }; - var ge = function getRtlScrollBehavior(r, e) { - var a = "hidden"; + var Da = function getRtlScrollBehavior(r, a) { + var n = "hidden"; style(r, { - overflowX: a, - overflowY: a, + overflowX: n, + overflowY: n, direction: "rtl" }); - scrollLeft(r, 0); - var t = Er(r); - var n = Er(e); - scrollLeft(r, -999); - var i = Er(e); + M(r, 0); + var t = Wr(r); + var e = Wr(a); + M(r, -999); + var i = Wr(a); return { - i: t.x === n.x, - n: n.x !== i.x + i: t.x === e.x, + n: e.x !== i.x }; }; - var pe = function getFlexboxGlue(r, e) { - var a = J(r, Ir); - var t = _r(r); - var n = _r(e); - var i = er(n, t, true); - var v = J(r, Mr); - var o = _r(r); - var u = _r(e); - var f = er(u, o, true); - a(); + var Ma = function getFlexboxGlue(r, a) { + var n = hr(r, Qr); + var t = Vr(r); + var e = Vr(a); + var i = mr(e, t, true); + var v = hr(r, ra); + var o = Vr(r); + var u = Vr(a); + var f = mr(u, o, true); + n(); v(); return i && f; }; - var he = function getWindowDPR() { + var Ra = function getWindowDPR() { var r = window.screen.deviceXDPI || 0; - var e = window.screen.logicalXDPI || 1; - return window.devicePixelRatio || r / e; + var a = window.screen.logicalXDPI || 1; + return window.devicePixelRatio || r / a; }; - var _e = function createEnvironment() { - var r = document, e = r.body; - var a = z('
'); - var t = a[0]; - var n = t.firstChild; - var i = Lr(), v = i[0], o = i[2]; - var u = createCache({ - v: le(e, t, n), - o: Q - }), f = u[0], s = u[1]; - var c = s(), l = c[0]; - var d = de(t); - var g = { - x: 0 === l.x, - y: 0 === l.y - }; + var Va = function createEnvironment() { + var r = document, n = r.body; + var t = K('
'); + var e = t[0]; + var i = e.firstChild; + var v = Xr(), o = v[0], u = v[2]; + var f = a({ + o: La(n, e, i), + u: wr + }), l = f[0], c = f[1]; + var s = c(), d = s[0]; + var g = Ia(e); var h = { - D: !d, - L: false + x: 0 === d.x, + y: 0 === d.y }; - var b = assignDeep({}, ve); - var w = { - P: l, - T: g, - j: d, - I: "-1" === style(t, "zIndex"), - M: ge(t, n), - R: pe(t, n), - F: function _addListener(r) { - return v("_", r); - }, - H: assignDeep.bind(0, {}, h), - N: function _setInitializationStrategy(r) { - assignDeep(h, r); - }, - V: assignDeep.bind(0, {}, b), - U: function _setDefaultOptions(r) { - assignDeep(b, r); - }, - k: assignDeep({}, h), - B: assignDeep({}, b) + var p = { + P: !g, + T: false }; - p(t, "style"); - P(t); - if (!d && (!g.x || !g.y)) { - var m = lr(); - var y = he(); + var w = z({}, xa); + var b = { + L: d, + I: h, + D: g, + M: "-1" === style(e, "zIndex"), + R: Da(e, i), + V: Ma(e, i), + j: function _addListener(r) { + return o("_", r); + }, + H: z.bind(0, {}, p), + B: function _setInitializationStrategy(r) { + z(p, r); + }, + k: z.bind(0, {}, w), + F: function _setDefaultOptions(r) { + z(w, r); + }, + q: z({}, p), + U: z({}, w) + }; + D(e, "style"); + $(e); + if (!g && (!h.x || !h.y)) { + var m = Lr(); + var y = Ra(); window.addEventListener("resize", (function() { - var r = lr(); + var r = Lr(); var a = { w: r.w - m.w, h: r.h - m.h @@ -891,72 +887,72 @@ if (0 === a.w && 0 === a.h) { return; } - var i = { - w: fe(a.w), - h: fe(a.h) + var t = { + w: Aa(a.w), + h: Aa(a.h) }; var v = { - w: fe(se(r.w / (m.w / 100))), - h: fe(se(r.h / (m.h / 100))) + w: Aa(Pa(r.w / (m.w / 100))), + h: Aa(Pa(r.h / (m.h / 100))) }; - var u = he(); - var s = i.w > 2 && i.h > 2; - var c = !ce(v.w, v.h); - var l = u !== y && y > 0; - var d = s && c && l; + var o = Ra(); + var f = t.w > 2 && t.h > 2; + var c = !Ta(v.w, v.h); + var s = o !== y && y > 0; + var d = f && c && s; if (d) { - var g = f(le(e, t, n)), p = g[0], h = g[1]; - assignDeep(ue.P, p); - P(t); - if (h) { - o("_"); + var g = l(La(n, e, i)), h = g[0], p = g[1]; + z(za.L, h); + $(e); + if (p) { + u("_"); } } m = r; - y = u; + y = o; })); } - return w; + return b; }; - var be = function getEnvironment() { - if (!ue) { - ue = _e(); + var ja = function getEnvironment() { + if (!za) { + za = Va(); } - return ue; + return za; }; - var we = {}; - var me = function getPlugins() { - return assignDeep({}, we); + var Ha = {}; + var Ba = function getPlugins() { + return z({}, Ha); }; - var ye = function addPlugin(r) { - return each(isArray(r) ? r : [ r ], (function(r) { - each(l(r), (function(e) { - we[e] = r[e]; + var ka = function addPlugin(r) { + return each(d(r) ? r : [ r ], (function(r) { + each(E(r), (function(a) { + Ha[a] = r[a]; })); })); }; - var Se = { + var Fa = { exports: {} }; (function(r) { function _extends() { r.exports = _extends = Object.assign ? Object.assign.bind() : function(r) { - for (var e = 1; e < arguments.length; e++) { - var a = arguments[e]; - for (var t in a) { - if (Object.prototype.hasOwnProperty.call(a, t)) { - r[t] = a[t]; + for (var a = 1; a < arguments.length; a++) { + var n = arguments[a]; + for (var t in n) { + if (Object.prototype.hasOwnProperty.call(n, t)) { + r[t] = n[t]; } } } return r; - }, r.exports.g = true, r.exports["default"] = r.exports; + }, r.exports.v = true, r.exports["default"] = r.exports; return _extends.apply(this, arguments); } - r.exports = _extends, r.exports.g = true, r.exports["default"] = r.exports; - })(Se); - var Ce = getDefaultExportFromCjs(Se.exports); - var Oe = { + r.exports = _extends, r.exports.v = true, r.exports["default"] = r.exports; + })(Fa); + var qa = getDefaultExportFromCjs(Fa.exports); + var Ua = { boolean: "__TPL_boolean_TYPE__", number: "__TPL_number_TYPE__", string: "__TPL_string_TYPE__", @@ -965,195 +961,195 @@ function: "__TPL_function_TYPE__", null: "__TPL_null_TYPE__" }; - var xe = function validateRecursive(r, e, a, t) { - var n = {}; - var v = Ce({}, e); - var u = l(r).filter((function(r) { - return c(e, r); + var Ya = function validateRecursive(r, a, n, t) { + var e = {}; + var i = qa({}, a); + var o = E(r).filter((function(r) { + return x(a, r); })); - each(u, (function(u) { - var f = e[u]; - var s = r[u]; - var c = isPlainObject(s); - var l = t ? t + "." : ""; - if (c && isPlainObject(f)) { - var d = validateRecursive(s, f, a, l + u), g = d[0], p = d[1]; - n[u] = g; - v[u] = p; - each([ v, n ], (function(r) { - if (isEmptyObject(r[u])) { - delete r[u]; + each(o, (function(o) { + var f = a[o]; + var c = r[o]; + var s = p(c); + var g = t ? t + "." : ""; + if (s && p(f)) { + var h = validateRecursive(c, f, n, g + o), w = h[0], b = h[1]; + e[o] = w; + i[o] = b; + each([ i, e ], (function(r) { + if (A(r[o])) { + delete r[o]; } })); - } else if (!c) { - var h = false; - var b = []; - var w = []; - var m = i(f); - var y = !isArray(s) ? [ s ] : s; - each(y, (function(r) { - var e; - each(Oe, (function(a, t) { - if (a === r) { - e = t; + } else if (!s) { + var m = false; + var S = []; + var C = []; + var O = u(f); + var x = !d(c) ? [ c ] : c; + each(x, (function(r) { + var a; + each(Ua, (function(n, t) { + if (n === r) { + a = t; } })); - var a = isUndefined(e); - if (a && isString(f)) { + var n = v(a); + if (n && l(f)) { var t = r.split(" "); - h = !!t.find((function(r) { + m = !!t.find((function(r) { return r === f; })); - o(b, t); + y(S, t); } else { - h = Oe[m] === r; + m = Ua[O] === r; } - o(w, a ? Oe.string : e); - return !h; + y(C, n ? Ua.string : a); + return !m; })); - if (h) { - n[u] = f; - } else if (a) { - console.warn('The option "' + l + u + "\" wasn't set, because it doesn't accept the type [ " + m.toUpperCase() + ' ] with the value of "' + f + '".\r\n' + "Accepted types are: [ " + w.join(", ").toUpperCase() + " ].\r\n" + (b.length > 0 ? "\r\nValid strings are: [ " + b.join(", ") + " ]." : "")); + if (m) { + e[o] = f; + } else if (n) { + console.warn('The option "' + g + o + "\" wasn't set, because it doesn't accept the type [ " + O.toUpperCase() + ' ] with the value of "' + f + '".\r\n' + "Accepted types are: [ " + C.join(", ").toUpperCase() + " ].\r\n" + (S.length > 0 ? "\r\nValid strings are: [ " + S.join(", ") + " ]." : "")); } - delete v[u]; + delete i[o]; } })); - return [ n, v ]; + return [ e, i ]; }; - var Ae = function validateOptions(r, e, a) { - return xe(r, e, a); + var Na = function validateOptions(r, a, n) { + return Ya(r, a, n); }; - var Ee; - var De = Oe.number; - var Le = Oe.boolean; - var Pe = [ Oe.array, Oe.null ]; - var Te = "hidden scroll visible visible-hidden"; - var ze = "visible hidden auto"; - var je = "never scroll leavemove"; - var Ie = { - paddingAbsolute: Le, + var Wa; + var Ga = Ua.number; + var Xa = Ua.boolean; + var $a = [ Ua.array, Ua.null ]; + var Ja = "hidden scroll visible visible-hidden"; + var Ka = "visible hidden auto"; + var Za = "never scroll leavemove"; + var Qa = { + paddingAbsolute: Xa, updating: { - elementEvents: Pe, - attributes: Pe, - debounce: [ Oe.number, Oe.array, Oe.null ], - ignoreMutation: [ Oe.function, Oe.null ] + elementEvents: $a, + attributes: $a, + debounce: [ Ua.number, Ua.array, Ua.null ], + ignoreMutation: [ Ua.function, Ua.null ] }, overflow: { - x: Te, - y: Te + x: Ja, + y: Ja }, scrollbars: { - visibility: ze, - autoHide: je, - autoHideDelay: De, - dragScroll: Le, - clickScroll: Le, - touch: Le + visibility: Ka, + autoHide: Za, + autoHideDelay: Ga, + dragScroll: Xa, + clickScroll: Xa, + touch: Xa }, nativeScrollbarsOverlaid: { - show: Le, - initialize: Le + show: Xa, + initialize: Xa } }; - var Me = "__osOptionsValidationPlugin"; - var Re = (Ee = {}, Ee[Me] = { - q: function _(r, e) { - var a = Ae(Ie, r, e), t = a[0], n = a[1]; - return Ce({}, n, t); + var rn = "__osOptionsValidationPlugin"; + var an = (Wa = {}, Wa[rn] = { + Y: function _(r, a) { + var n = Na(Qa, r, a), t = n[0], e = n[1]; + return qa({}, e, t); } - }, Ee); - var Fe; - var He = 3333333; - var Ne = "scroll"; - var Ve = "__osSizeObserverPlugin"; - var Ue = (Fe = {}, Fe[Ve] = { - q: function _(r, e, a) { - var t = z('
'); - A(r, t); - J(r, Jr); - var n = t[0]; - var i = n.lastChild; - var v = n.firstChild; - var u = null == v ? void 0 : v.firstChild; - var f = dr(n); - var s = f; - var c = false; - var l; - var d = function reset() { - scrollLeft(v, He); - scrollTop(v, He); - scrollLeft(i, He); - scrollTop(i, He); + }, Wa); + var nn; + var tn = 3333333; + var en = "scroll"; + var vn = "__osSizeObserverPlugin"; + var un = (nn = {}, nn[vn] = { + Y: function _(r, a, n) { + var t = K('
'); + N(r, t); + hr(r, ha); + var e = t[0]; + var i = e.lastChild; + var v = e.firstChild; + var o = null == v ? void 0 : v.firstChild; + var u = Ir(e); + var f = u; + var l = false; + var c; + var s = function reset() { + M(v, tn); + R(v, tn); + M(i, tn); + R(i, tn); }; - var g = function onResized(r) { - l = 0; - if (c) { - f = s; - e(true === r); + var d = function onResized(r) { + c = 0; + if (l) { + u = f; + a(true === r); } }; - var p = function onScroll(r) { - s = dr(n); - c = !r || !Z(s, f); + var g = function onScroll(r) { + f = Ir(e); + l = !r || !_r(f, u); if (r) { - xr(r); - if (c && !l) { - q(l); - l = Y(g); + Yr(r); + if (l && !c) { + fr(c); + c = lr(d); } } else { - g(false === r); + d(false === r); } - d(); + s(); }; - var h = o([], [ Sr(v, Ne, p), Sr(i, Ne, p) ]); - style(u, { - width: He, - height: He + var h = y([], [ Fr(v, en, g), Fr(i, en, g) ]); + style(o, { + width: tn, + height: tn }); - d(); - return [ a ? p.bind(0, false) : d, h ]; + s(); + return [ n ? g.bind(0, false) : s, h ]; } - }, Fe); - var ke; - var Be = 0; - var qe = "__osScrollbarsHidingPlugin"; - var Ye = (ke = {}, ke[qe] = { - Y: function _createUniqueViewportArrangeElement() { - var r = be(), e = r.j, a = r.T, t = r.I; - var n = !t && !e && (a.x || a.y); - var i = n ? document.createElement("style") : false; + }, nn); + var fn; + var ln = 0; + var cn = "__osScrollbarsHidingPlugin"; + var sn = (fn = {}, fn[cn] = { + N: function _createUniqueViewportArrangeElement() { + var r = ja(), a = r.D, n = r.I, t = r.M; + var e = !t && !a && (n.x || n.y); + var i = e ? document.createElement("style") : false; if (i) { - attr(i, "id", Br + "-" + Be); - Be++; + T(i, "id", ua + "-" + ln); + ln++; } return i; }, - W: function _overflowUpdateSegment(r, e, a, t, n, i) { - var v = be(), o = v.R; - var u = function arrangeViewport(n, i, v, o) { + W: function _overflowUpdateSegment(r, a, n, t, e, i) { + var v = ja(), o = v.V; + var u = function arrangeViewport(e, i, v, o) { if (r) { var u = t(), f = u.G; - var s = n.X, c = n.$; - var l = c.x, d = c.y; - var g = s.x, p = s.y; - var h = o ? "paddingRight" : "paddingLeft"; - var b = f[h]; - var w = f.paddingTop; + var l = e.X, c = e.$; + var s = c.x, d = c.y; + var g = l.x, h = l.y; + var p = o ? "paddingRight" : "paddingLeft"; + var w = f[p]; + var b = f.paddingTop; var m = i.w + v.w; var y = i.h + v.h; var S = { - w: p && d ? p + m - b + "px" : "", - h: g && l ? g + y - w + "px" : "" + w: h && d ? h + m - w + "px" : "", + h: g && s ? g + y - b + "px" : "" }; - if (a) { - var C = a.sheet; + if (n) { + var C = n.sheet; if (C) { var O = C.cssRules; if (O) { if (!O.length) { - C.insertRule("#" + attr(a, "id") + " + ." + Br + "::before {}", 0); + C.insertRule("#" + T(n, "id") + " + ." + ua + "::before {}", 0); } var x = O[0].style; x.width = S.w; @@ -1161,7 +1157,7 @@ } } } else { - style(e, { + style(a, { "--os-vaw": S.w, "--os-vah": S.h }); @@ -1169,417 +1165,417 @@ } return r; }; - var f = function undoViewportArrange(a, v, u) { + var f = function undoViewportArrange(n, v, u) { if (r) { - var f = u || n(a); - var s = t(), c = s.G; - var d = f.$; - var g = d.x, p = d.y; + var f = u || e(n); + var l = t(), c = l.G; + var s = f.$; + var d = s.x, g = s.y; var h = {}; - var b = function assignProps(r) { + var p = function assignProps(r) { return each(r.split(" "), (function(r) { h[r] = c[r]; })); }; + if (d) { + p("marginBottom paddingTop paddingBottom"); + } if (g) { - b("marginBottom paddingTop paddingBottom"); + p("marginLeft marginRight paddingLeft paddingRight"); } - if (p) { - b("marginLeft marginRight paddingLeft paddingRight"); - } - var w = style(e, l(h)); - $(e, Br); + var w = style(a, E(h)); + gr(a, ua); if (!o) { h.height = ""; } - style(e, h); + style(a, h); return [ function() { i(f, v, r, w); - style(e, w); - J(e, Br); + style(a, w); + hr(a, ua); }, f ]; } - return [ tr ]; + return [ Sr ]; }; return [ u, f ]; } - }, ke); - var We = function resolveInitialization(r, e) { - return isFunction(r) ? r.apply(0, e) : r; + }, fn); + var dn = function resolveInitialization(r, a) { + return s(r) ? r.apply(0, a) : r; }; - var Ge = function staticInitializationElement(r, e, a, t) { - return We(t || We(a, r), r) || e.apply(0, r); + var gn = function staticInitializationElement(r, a, n, t) { + return dn(t || dn(n, r), r) || a.apply(0, r); }; - var Xe = function dynamicInitializationElement(r, e, a, t) { - var n = We(t, r); - if (isNull(n) || isUndefined(n)) { - n = We(a, r); + var hn = function dynamicInitializationElement(r, a, n, t) { + var e = dn(t, r); + if (o(e) || v(e)) { + e = dn(n, r); } - return true === n || isNull(n) || isUndefined(n) ? e.apply(0, r) : n; + return true === e || o(e) || v(e) ? a.apply(0, r) : e; }; - var $e = T.bind(0, ""); - var Je = function unwrap(r) { - A(S(r), y(r)); - P(r); + var pn = J.bind(0, ""); + var _n = function unwrap(r) { + N(F(r), k(r)); + $(r); }; - var Ke = function addDataAttrHost(r, e) { - attr(r, Rr, e); - return p.bind(0, r, Rr); + var wn = function addDataAttrHost(r, a) { + T(r, aa, a); + return D.bind(0, r, aa); }; - var Ze = function createStructureSetupElements(r) { - var e = be(), a = e.H, t = e.j; - var n = me()[qe]; - var i = n && n.Y; - var u = a(), f = u.J, c = u.K, h = u.D, b = u.L; - var w = isHTMLElement(r); - var C = r; - var O = w ? r : C.target; - var x = m(O, "textarea"); - var E = !x && m(O, "body"); - var T = O.ownerDocument; - var z = T.body; - var j = T.defaultView; - var I = !!B && !x && t; - var M = Ge.bind(0, [ O ]); - var R = Xe.bind(0, [ O ]); - var F = [ M($e, c, C.viewport), M($e, c), M($e) ].filter((function(r) { - return !I ? r !== O : true; + var bn = function createStructureSetupElements(r) { + var a = ja(), n = a.H, t = a.D; + var e = Ba()[cn]; + var i = e && e.N; + var v = n(), o = v.J, u = v.K, f = v.P, l = v.T; + var c = w(r); + var s = r; + var d = c ? r : s.target; + var g = B(d, "textarea"); + var h = !g && B(d, "body"); + var p = d.ownerDocument; + var b = p.body; + var S = p.defaultView; + var C = !!ur && !g && t; + var x = gn.bind(0, [ d ]); + var z = hn.bind(0, [ d ]); + var A = [ x(pn, u, s.viewport), x(pn, u), x(pn) ].filter((function(r) { + return !C ? r !== d : true; }))[0]; - var H = F === O; - var N = { - Z: O, - J: x ? M($e, f, C.host) : O, - K: F, - D: !H && R($e, h, C.padding), - L: !H && R($e, b, C.content), - rr: !H && !t && i && i(), - er: j, - ar: T, - tr: S(z), - nr: z, - ir: x, - vr: E, - ur: w, - sr: H, - cr: function _viewportHasClass(r, e) { - return H ? g(F, Rr, e) : X(F, r); + var P = A === d; + var T = { + Z: d, + J: g ? x(pn, o, s.host) : d, + K: A, + P: !P && z(pn, f, s.padding), + T: !P && z(pn, l, s.content), + rr: !P && !t && i && i(), + ar: S, + nr: p, + tr: F(b), + er: b, + ir: g, + vr: h, + ur: c, + lr: P, + cr: function _viewportHasClass(r, a) { + return P ? I(A, aa, a) : dr(A, r); }, - lr: function _viewportAddRemoveClass(r, e, a) { - return H ? d(F, Rr, e, a) : (a ? J : $)(F, r); + sr: function _viewportAddRemoveClass(r, a, n) { + return P ? L(A, aa, a, n) : (n ? hr : gr)(A, r); } }; - var V = l(N).reduce((function(r, e) { - var a = N[e]; - return o(r, a && !S(a) ? a : false); + var M = E(T).reduce((function(r, a) { + var n = T[a]; + return y(r, n && !F(n) ? n : false); }), []); - var U = function elementIsGenerated(r) { - return r ? v(V, r) > -1 : null; + var R = function elementIsGenerated(r) { + return r ? m(M, r) > -1 : null; }; - var k = N.Z, q = N.J, Y = N.D, W = N.K, G = N.L, K = N.rr; - var Z = []; - var Q = x && U(q); - var rr = x ? k : y([ G, W, Y, q, k ].find((function(r) { - return false === U(r); + var V = T.Z, j = T.J, H = T.P, q = T.K, U = T.T, Y = T.rr; + var W = []; + var J = g && R(j); + var K = g ? V : k([ U, q, H, j, V ].find((function(r) { + return false === R(r); }))); - var er = G || W; - var ar = function appendElements() { - var r = Ke(q, H ? "viewport" : "host"); - var e = J(Y, Ur); - var a = J(W, !H && kr); - var n = J(G, qr); - if (Q) { - L(k, q); - o(Z, (function() { - L(q, k); - P(q); + var Z = U || q; + var Q = function appendElements() { + var r = wn(j, P ? "viewport" : "host"); + var a = hr(H, va); + var n = hr(q, !P && oa); + var e = hr(U, fa); + if (J) { + X(V, j); + y(W, (function() { + X(j, V); + $(j); })); } - A(er, rr); - A(q, Y); - A(Y || q, !H && W); - A(W, G); - o(Z, (function() { + N(Z, K); + N(j, H); + N(H || j, !P && q); + N(q, U); + y(W, (function() { r(); - p(W, Fr); - p(W, Hr); - if (U(G)) { - Je(G); + D(q, na); + D(q, ta); + if (R(U)) { + _n(U); } - if (U(W)) { - Je(W); + if (R(q)) { + _n(q); } - if (U(Y)) { - Je(Y); + if (R(H)) { + _n(H); } - e(); a(); n(); + e(); })); - if (t && !H) { - o(Z, $.bind(0, W, Yr)); + if (t && !P) { + y(W, gr.bind(0, q, la)); } - if (K) { - D(W, K); - o(Z, P.bind(0, K)); + if (Y) { + G(q, Y); + y(W, $.bind(0, Y)); } }; - return [ N, ar, s.bind(0, Z) ]; + return [ T, Q, O.bind(0, W) ]; }; - var Qe = function createTrinsicUpdate(r, e) { - var a = r.L; - var t = e[0]; + var mn = function createTrinsicUpdate(r, a) { + var n = r.T; + var t = a[0]; return function(r) { - var e = be(), n = e.R; + var a = ja(), e = a.V; var i = t(), v = i.dr; var o = r.gr; - var u = (a || !n) && o; + var u = (n || !e) && o; if (u) { - style(a, { + style(n, { height: v ? "" : "100%" }); } return { - pr: u, - hr: u + hr: u, + pr: u }; }; }; - var ra = function createPaddingUpdate(r, e) { - var a = e[0], t = e[1]; - var n = r.J, i = r.D, v = r.K, o = r.sr; - var u = createCache({ - o: rr, - v: sr() - }, sr.bind(0, n, "padding", "")), f = u[0], s = u[1]; - return function(r, e, n) { - var u = s(n), c = u[0], l = u[1]; - var d = be(), g = d.j, p = d.R; - var h = a(), b = h._r; - var w = r.pr, m = r.hr, y = r.br; - var S = e("paddingAbsolute"), C = S[0], O = S[1]; - var x = !p && m; - if (w || l || x) { - var A = f(n); - c = A[0]; - l = A[1]; + var yn = function createPaddingUpdate(r, n) { + var t = n[0], e = n[1]; + var i = r.J, v = r.P, o = r.K, u = r.lr; + var f = a({ + u: br, + o: Pr() + }, Pr.bind(0, i, "padding", "")), l = f[0], c = f[1]; + return function(r, a, n) { + var i = c(n), f = i[0], s = i[1]; + var d = ja(), g = d.D, h = d.V; + var p = t(), w = p._r; + var b = r.hr, m = r.pr, y = r.wr; + var S = a("paddingAbsolute"), C = S[0], O = S[1]; + var x = !h && m; + if (b || s || x) { + var E = l(n); + f = E[0]; + s = E[1]; } - var E = !o && (O || y || l); - if (E) { - var D = !C || !i && !g; - var L = c.r + c.l; - var P = c.t + c.b; - var T = { - marginRight: D && !b ? -L : 0, - marginBottom: D ? -P : 0, - marginLeft: D && b ? -L : 0, - top: D ? -c.t : 0, - right: D ? b ? -c.r : "auto" : 0, - left: D ? b ? "auto" : -c.l : 0, - width: D ? "calc(100% + " + L + "px)" : "" + var A = !u && (O || y || s); + if (A) { + var P = !C || !v && !g; + var T = f.r + f.l; + var L = f.t + f.b; + var I = { + marginRight: P && !w ? -T : 0, + marginBottom: P ? -L : 0, + marginLeft: P && w ? -T : 0, + top: P ? -f.t : 0, + right: P ? w ? -f.r : "auto" : 0, + left: P ? w ? "auto" : -f.l : 0, + width: P ? "calc(100% + " + T + "px)" : "" }; - var z = { - paddingTop: D ? c.t : 0, - paddingRight: D ? c.r : 0, - paddingBottom: D ? c.b : 0, - paddingLeft: D ? c.l : 0 + var D = { + paddingTop: P ? f.t : 0, + paddingRight: P ? f.r : 0, + paddingBottom: P ? f.b : 0, + paddingLeft: P ? f.l : 0 }; - style(i || v, T); - style(v, z); - t({ - D: c, - wr: !D, - G: i ? z : assignDeep({}, T, z) + style(v || o, I); + style(o, D); + e({ + P: f, + br: !P, + G: v ? D : z({}, I, D) }); } return { - mr: E + mr: A }; }; }; - var ea = Math.max; - var aa = "visible"; - var ta = "hidden"; - var na = 42; - var ia = { - o: Z, - v: { + var Sn = Math.max; + var Cn = "visible"; + var On = "hidden"; + var xn = 42; + var En = { + u: _r, + o: { w: 0, h: 0 } }; - var va = { - o: Q, - v: { - x: ta, - y: ta + var zn = { + u: wr, + o: { + x: On, + y: On } }; - var oa = function getOverflowAmount(r, e, a) { + var An = function getOverflowAmount(r, a, n) { var t = window.devicePixelRatio % 1 !== 0 ? 1 : 0; - var n = { - w: ea(0, r.w - e.w - ea(0, a.w)), - h: ea(0, r.h - e.h - ea(0, a.h)) + var e = { + w: Sn(0, r.w - a.w - Sn(0, n.w)), + h: Sn(0, r.h - a.h - Sn(0, n.h)) }; return { - w: n.w > t ? n.w : 0, - h: n.h > t ? n.h : 0 + w: e.w > t ? e.w : 0, + h: e.h > t ? e.h : 0 }; }; - var ua = function conditionalClass(r, e, a) { - return a ? J(r, e) : $(r, e); + var Pn = function conditionalClass(r, a, n) { + return n ? hr(r, a) : gr(r, a); }; - var fa = function overflowIsVisible(r) { - return 0 === r.indexOf(aa); + var Tn = function overflowIsVisible(r) { + return 0 === r.indexOf(Cn); }; - var sa = function createOverflowUpdate(r, e) { - var a = e[0], t = e[1]; - var n = r.J, i = r.D, v = r.K, o = r.rr, u = r.sr, f = r.lr; - var s = be(), c = s.P, l = s.R, g = s.j, p = s.T; - var h = me()[qe]; - var b = !u && !g && (p.x || p.y); - var w = createCache(ia, hr.bind(0, v)), m = w[0], y = w[1]; - var S = createCache(ia, pr.bind(0, v)), C = S[0], O = S[1]; - var x = createCache(ia), A = x[0], E = x[1]; - var D = createCache(va), L = D[0]; - var P = function fixFlexboxGlue(r, e) { - style(v, { + var Ln = function createOverflowUpdate(r, n) { + var t = n[0], e = n[1]; + var i = r.J, v = r.P, o = r.K, u = r.rr, f = r.lr, l = r.sr; + var c = ja(), s = c.L, d = c.V, g = c.D, h = c.I; + var p = Ba()[cn]; + var w = !f && !g && (h.x || h.y); + var b = a(En, Rr.bind(0, o)), m = b[0], y = b[1]; + var S = a(En, Mr.bind(0, o)), C = S[0], O = S[1]; + var x = a(En), E = x[0], z = x[1]; + var A = a(zn), P = A[0]; + var I = function fixFlexboxGlue(r, a) { + style(o, { height: "" }); - if (e) { - var t = a(), i = t.wr, o = t.D; + if (a) { + var n = t(), e = n.br, v = n.P; var u = r.yr, f = r.X; - var s = hr(n); - var c = gr(n); - var l = "content-box" === style(v, "boxSizing"); - var d = i || l ? o.b + o.t : 0; - var g = !(p.x && l); - style(v, { - height: c.h + s.h + (u.x && g ? f.x : 0) - d + var l = Rr(i); + var c = Dr(i); + var s = "content-box" === style(o, "boxSizing"); + var d = e || s ? v.b + v.t : 0; + var g = !(h.x && s); + style(o, { + height: c.h + l.h + (u.x && g ? f.x : 0) - d }); } }; - var T = function getViewportOverflowState(r, e) { - var a = !g && !r ? na : 0; - var t = function getStatePerAxis(r, t, n) { - var i = style(v, r); - var o = e ? e[r] : i; - var u = "scroll" === o; - var f = t ? a : n; - var s = u && !g ? f : 0; - var c = t && !!a; - return [ i, u, s, c ]; + var D = function getViewportOverflowState(r, a) { + var n = !g && !r ? xn : 0; + var t = function getStatePerAxis(r, t, e) { + var i = style(o, r); + var v = a ? a[r] : i; + var u = "scroll" === v; + var f = t ? n : e; + var l = u && !g ? f : 0; + var c = t && !!n; + return [ i, u, l, c ]; }; - var n = t("overflowX", p.x, c.x), i = n[0], o = n[1], u = n[2], f = n[3]; - var s = t("overflowY", p.y, c.y), l = s[0], d = s[1], h = s[2], b = s[3]; + var e = t("overflowX", h.x, s.x), i = e[0], v = e[1], u = e[2], f = e[3]; + var l = t("overflowY", h.y, s.y), c = l[0], d = l[1], p = l[2], w = l[3]; return { Sr: { x: i, - y: l + y: c }, yr: { - x: o, + x: v, y: d }, X: { x: u, - y: h + y: p }, $: { x: f, - y: b + y: w } }; }; - var z = function setViewportOverflowState(r, e, a, t) { - var n = function setAxisOverflowStyle(r, e) { - var a = fa(r); - var t = e && a && r.replace(aa + "-", "") || ""; - return [ e && !a ? r : "", fa(t) ? "hidden" : t ]; + var M = function setViewportOverflowState(r, a, n, t) { + var e = function setAxisOverflowStyle(r, a) { + var n = Tn(r); + var t = a && n && r.replace(Cn + "-", "") || ""; + return [ a && !n ? r : "", Tn(t) ? "hidden" : t ]; }; - var i = n(a.x, e.x), v = i[0], o = i[1]; - var u = n(a.y, e.y), f = u[0], s = u[1]; + var i = e(n.x, a.x), v = i[0], o = i[1]; + var u = e(n.y, a.y), f = u[0], l = u[1]; t.overflowX = o && f ? o : v; - t.overflowY = s && v ? s : f; - return T(r, t); + t.overflowY = l && v ? l : f; + return D(r, t); }; - var j = function hideNativeScrollbars(r, e, t, n) { + var R = function hideNativeScrollbars(r, a, n, e) { var i = r.X, v = r.$; var o = v.x, u = v.y; - var f = i.x, s = i.y; - var c = a(), l = c.G; - var d = e ? "marginLeft" : "marginRight"; - var g = e ? "paddingLeft" : "paddingRight"; - var p = l[d]; - var h = l.marginBottom; - var b = l[g]; - var w = l.paddingBottom; - n.width = "calc(100% + " + (s + -1 * p) + "px)"; - n[d] = -s + p; - n.marginBottom = -f + h; - if (t) { - n[g] = b + (u ? s : 0); - n.paddingBottom = w + (o ? f : 0); + var f = i.x, l = i.y; + var c = t(), s = c.G; + var d = a ? "marginLeft" : "marginRight"; + var g = a ? "paddingLeft" : "paddingRight"; + var h = s[d]; + var p = s.marginBottom; + var w = s[g]; + var b = s.paddingBottom; + e.width = "calc(100% + " + (l + -1 * h) + "px)"; + e[d] = -l + h; + e.marginBottom = -f + p; + if (n) { + e[g] = w + (u ? l : 0); + e.paddingBottom = b + (o ? f : 0); } }; - var I = h ? h.W(b, v, o, a, T, j) : [ function() { - return b; + var V = p ? p.W(w, o, u, t, D, R) : [ function() { + return w; }, function() { - return [ tr ]; - } ], M = I[0], R = I[1]; - return function(r, e, o) { - var s = r.pr, c = r.Cr, h = r.hr, b = r.mr, w = r.gr, S = r.br; - var x = a(), D = x.dr, I = x._r; - var F = e("nativeScrollbarsOverlaid.show"), H = F[0], N = F[1]; - var V = e("overflow"), U = V[0], k = V[1]; - var B = H && p.x && p.y; - var q = !u && !l && (s || h || c || N || w); - var Y = fa(U.x); - var W = fa(U.y); - var G = Y || W; - var X = y(o); - var $ = O(o); - var J = E(o); - var K; - if (N && g) { - f(Yr, Vr, !B); + return [ Sr ]; + } ], j = V[0], H = V[1]; + return function(r, a, n) { + var u = r.hr, c = r.Cr, s = r.pr, p = r.mr, w = r.gr, b = r.wr; + var S = t(), x = S.dr, A = S._r; + var V = a("nativeScrollbarsOverlaid.show"), B = V[0], k = V[1]; + var F = a("overflow"), q = F[0], U = F[1]; + var Y = B && h.x && h.y; + var N = !f && !d && (u || s || c || k || w); + var W = Tn(q.x); + var G = Tn(q.y); + var X = W || G; + var $ = y(n); + var J = O(n); + var K = z(n); + var Z; + if (k && g) { + l(la, ia, !Y); } - if (q) { - K = T(B); - P(K, D); + if (N) { + Z = D(Y); + I(Z, x); } - if (s || b || h || S || N) { - if (G) { - f(Wr, Nr, false); + if (u || p || s || b || k) { + if (X) { + l(ca, ea, false); } - var Z = R(B, I, K), Q = Z[0], rr = Z[1]; - var er = X = m(o), ar = er[0], tr = er[1]; - var nr = $ = C(o), ir = nr[0], vr = nr[1]; - var or = gr(v); - var ur = ir; - var fr = or; - Q(); - if ((vr || tr || N) && rr && !B && M(rr, ir, ar, I)) { - fr = gr(v); - ur = pr(v); + var Q = H(Y, A, Z), rr = Q[0], ar = Q[1]; + var nr = $ = m(n), tr = nr[0], er = nr[1]; + var ir = J = C(n), vr = ir[0], or = ir[1]; + var ur = Dr(o); + var fr = vr; + var lr = ur; + rr(); + if ((or || er || k) && ar && !Y && j(ar, vr, tr, A)) { + lr = Dr(o); + fr = Mr(o); } - J = A(oa({ - w: ea(ir.w, ur.w), - h: ea(ir.h, ur.h) + K = E(An({ + w: Sn(vr.w, fr.w), + h: Sn(vr.h, fr.h) }, { - w: fr.w + ea(0, or.w - ir.w), - h: fr.h + ea(0, or.h - ir.h) - }, ar), o); + w: lr.w + Sn(0, ur.w - vr.w), + h: lr.h + Sn(0, ur.h - vr.h) + }, tr), n); } - var sr = J, cr = sr[0], lr = sr[1]; - var dr = $, hr = dr[0], _r = dr[1]; - var br = X, wr = br[0], mr = br[1]; - var yr = { - x: cr.w > 0, - y: cr.h > 0 + var cr = K, sr = cr[0], dr = cr[1]; + var gr = J, hr = gr[0], pr = gr[1]; + var _r = $, wr = _r[0], br = _r[1]; + var mr = { + x: sr.w > 0, + y: sr.h > 0 }; - var Sr = Y && W && (yr.x || yr.y) || Y && yr.x && !yr.y || W && yr.y && !yr.x; - if (b || S || mr || _r || lr || k || N || q) { - var Cr = { + var yr = W && G && (mr.x || mr.y) || W && mr.x && !mr.y || G && mr.y && !mr.x; + if (p || b || br || pr || dr || U || k || N) { + var Sr = { marginRight: 0, marginBottom: 0, marginLeft: 0, @@ -1587,250 +1583,250 @@ overflowY: "", overflowX: "" }; - var Or = z(B, yr, U, Cr); - var xr = M(Or, hr, wr, I); - if (!u) { - j(Or, I, xr, Cr); + var Cr = M(Y, mr, q, Sr); + var Or = j(Cr, hr, wr, A); + if (!f) { + R(Cr, A, Or, Sr); } - if (q) { - P(Or, D); + if (N) { + I(Cr, x); } - if (u) { - attr(n, Fr, Cr.overflowX); - attr(n, Hr, Cr.overflowY); + if (f) { + T(i, na, Sr.overflowX); + T(i, ta, Sr.overflowY); } else { - style(v, Cr); + style(o, Sr); } } - d(n, Rr, Nr, Sr); - ua(i, Wr, Sr); - !u && ua(v, Wr, G); - var Ar = L(T(B).Sr), Er = Ar[0], Dr = Ar[1]; - t({ + L(i, aa, ea, yr); + Pn(v, ca, yr); + !f && Pn(o, ca, X); + var xr = P(D(Y).Sr), Er = xr[0], zr = xr[1]; + e({ Sr: Er, Or: { - x: cr.w, - y: cr.h + x: sr.w, + y: sr.h }, - Ar: yr + Er: mr }); return { - Er: Dr, - Dr: lr + zr: zr, + Ar: dr }; }; }; - var ca = function prepareUpdateHints(r, e, a) { + var In = function prepareUpdateHints(r, a, n) { var t = {}; - var n = e || {}; - var i = l(r).concat(l(n)); - each(i, (function(e) { - var i = r[e]; - var v = n[e]; - t[e] = !!(a || i || v); + var e = a || {}; + var i = E(r).concat(E(e)); + each(i, (function(a) { + var i = r[a]; + var v = e[a]; + t[a] = !!(n || i || v); })); return t; }; - var la = function createStructureSetupUpdate(r, e) { - var a = r.K; - var t = be(), n = t.j, i = t.T, v = t.R; - var o = !n && (i.x || i.y); - var u = [ Qe(r, e), ra(r, e), sa(r, e) ]; - return function(r, e, t) { - var n = ca(assignDeep({ - pr: false, + var Dn = function createStructureSetupUpdate(r, a) { + var n = r.K; + var t = ja(), e = t.D, i = t.I, v = t.V; + var o = !e && (i.x || i.y); + var u = [ mn(r, a), yn(r, a), Ln(r, a) ]; + return function(r, a, t) { + var e = In(z({ + hr: false, mr: false, - br: false, + wr: false, gr: false, - Dr: false, - Er: false, + Ar: false, + zr: false, Cr: false, - hr: false - }, e), {}, t); + pr: false + }, a), {}, t); var i = o || !v; - var f = i && scrollLeft(a); - var s = i && scrollTop(a); - var c = n; - each(u, (function(e) { - c = ca(c, e(c, r, !!t) || {}, t); + var l = i && M(n); + var c = i && R(n); + var s = e; + each(u, (function(a) { + s = In(s, a(s, r, !!t) || {}, t); })); - if (isNumber(f)) { - scrollLeft(a, f); + if (f(l)) { + M(n, l); } - if (isNumber(s)) { - scrollTop(a, s); + if (f(c)) { + R(n, c); } - return c; + return s; }; }; - var da = "animationstart"; - var ga = "scroll"; - var pa = 3333333; - var ha = function getElmDirectionIsRTL(r) { + var Mn = "animationstart"; + var Rn = "scroll"; + var Vn = 3333333; + var jn = function getElmDirectionIsRTL(r) { return "rtl" === style(r, "direction"); }; - var _a = function domRectHasDimensions(r) { + var Hn = function domRectHasDimensions(r) { return r && (r.height || r.width); }; - var ba = function createSizeObserver(r, e, a) { - var t = a || {}, n = t.Lr, i = void 0 === n ? false : n, v = t.Pr, u = void 0 === v ? false : v; - var f = me()[Ve]; - var c = be(), l = c.M; - var d = z('
'); - var g = d[0]; - var p = g.firstChild; - var h = ha.bind(0, g); - var b = createCache({ - v: void 0, - u: true, - o: function _equal(r, e) { - return !(!r || !_a(r) && _a(e)); + var Bn = function createSizeObserver(r, n, t) { + var e = t || {}, i = e.Pr, v = void 0 === i ? false : i, o = e.Tr, u = void 0 === o ? false : o; + var f = Ba()[vn]; + var l = ja(), s = l.R; + var h = K('
'); + var p = h[0]; + var w = p.firstChild; + var b = jn.bind(0, p); + var m = a({ + o: void 0, + g: true, + u: function _equal(r, a) { + return !(!r || !Hn(r) && Hn(a)); } - }), w = b[0]; - var m = function onSizeChangedCallbackProxy(r) { - var a = isArray(r) && r.length > 0 && isObject(r[0]); - var t = !a && isBoolean(r[0]); - var n = false; - var v = false; + }), S = m[0]; + var C = function onSizeChangedCallbackProxy(r) { + var a = d(r) && r.length > 0 && g(r[0]); + var t = !a && c(r[0]); + var e = false; + var i = false; var o = true; if (a) { - var u = w(r.pop().contentRect), f = u[0], s = u[2]; - var c = _a(f); - var d = _a(s); - n = !s || !c; - v = !d && c; - o = !n; + var u = S(r.pop().contentRect), f = u[0], l = u[2]; + var h = Hn(f); + var w = Hn(l); + e = !l || !h; + i = !w && h; + o = !e; } else if (t) { o = r[1]; } else { - v = true === r; + i = true === r; } - if (i && o) { - var p = t ? r[0] : ha(g); - scrollLeft(g, p ? l.n ? -pa : l.i ? 0 : pa : pa); - scrollTop(g, pa); + if (v && o) { + var b = t ? r[0] : jn(p); + M(p, b ? s.n ? -Vn : s.i ? 0 : Vn : Vn); + R(p, Vn); } - if (!n) { - e({ - pr: !t, - Tr: t ? r : void 0, - Pr: !!v + if (!e) { + n({ + hr: !t, + Lr: t ? r : void 0, + Tr: !!i }); } }; - var y = []; - var S = u ? m : false; - var C; - if (B) { - var O = new B(m); - O.observe(p); - o(y, (function() { - O.disconnect(); + var x = []; + var E = u ? C : false; + var z; + if (ur) { + var A = new ur(C); + A.observe(w); + y(x, (function() { + A.disconnect(); })); } else if (f) { - var x = f.q(p, m, u), A = x[0], D = x[1]; - S = A; - o(y, D); + var P = f.Y(w, C, u), T = P[0], L = P[1]; + E = T; + y(x, L); } - if (i) { - C = createCache({ - v: !h() - }, h); - var L = C, T = L[0]; - o(y, Sr(g, ga, (function(r) { - var e = T(); - var a = e[0], t = e[1]; + if (v) { + z = a({ + o: !b() + }, b); + var I = z, D = I[0]; + y(x, Fr(p, Rn, (function(r) { + var a = D(); + var n = a[0], t = a[1]; if (t) { - $(p, "ltr rtl"); - if (a) { - J(p, "rtl"); + gr(w, "ltr rtl"); + if (n) { + hr(w, "rtl"); } else { - J(p, "ltr"); + hr(w, "ltr"); } - m(e); + C(a); } - xr(r); + Yr(r); }))); } - if (S) { - J(g, Xr); - o(y, Sr(g, da, S, { - A: !!B + if (E) { + hr(p, da); + y(x, Fr(p, Mn, E, { + A: !!ur })); } - E(r, g); + W(r, p); return function() { - s(y); - P(g); + O(x); + $(p); }; }; - var wa = function isHeightIntrinsic(r) { + var kn = function isHeightIntrinsic(r) { return 0 === r.h || r.isIntersecting || r.intersectionRatio > 0; }; - var ma = function createTrinsicObserver(r, e) { - var a = T(Qr); - var t = []; - var n = createCache({ - v: false - }), i = n[0]; - var v = function triggerOnTrinsicChangedCallback(r) { + var Fn = function createTrinsicObserver(r, n) { + var t = J(wa); + var e = []; + var i = a({ + o: false + }), v = i[0]; + var o = function triggerOnTrinsicChangedCallback(r) { if (r) { - var a = i(wa(r)); + var a = v(kn(r)); var t = a[1]; if (t) { - e(a); + n(a); } } }; - if (k) { - var u = new k((function(r) { + if (or) { + var u = new or((function(r) { if (r && r.length > 0) { - v(r.pop()); + o(r.pop()); } }), { root: r }); - u.observe(a); - o(t, (function() { + u.observe(t); + y(e, (function() { u.disconnect(); })); } else { var f = function onSizeChanged() { - var r = dr(a); - v(r); + var r = Ir(t); + o(r); }; - o(t, ba(a, f)); + y(e, Bn(t, f)); f(); } - E(r, a); + W(r, t); return function() { - s(t); - P(a); + O(e); + $(t); }; }; - var ya = function createEventContentChange(r, e, a) { + var qn = function createEventContentChange(r, a, n) { var t; - var n = false; + var e = false; var i = function destroy() { - n = true; + e = true; }; var v = function updateElements(i) { - if (a) { - var v = a.reduce((function(e, a) { - if (a) { - var t = a[0]; - var n = a[1]; - var v = n && t && (i ? i(t) : b(t, r)); - if (v && v.length && n && isString(n)) { - o(e, [ v, n.trim() ], true); + if (n) { + var v = n.reduce((function(a, n) { + if (n) { + var t = n[0]; + var e = n[1]; + var v = e && t && (i ? i(t) : j(t, r)); + if (v && v.length && e && l(e)) { + y(a, [ v, e.trim() ], true); } } - return e; + return a; }), []); each(v, (function(r) { - return each(r[0], (function(a) { + return each(r[0], (function(n) { var i = r[1]; - var v = t.get(a); + var v = t.get(n); if (v) { var o = v[0]; var u = v[1]; @@ -1838,279 +1834,279 @@ u(); } } - var f = Sr(a, i, (function(r) { - if (n) { + var f = Fr(n, i, (function(r) { + if (e) { f(); - t.delete(a); + t.delete(n); } else { - e(r); + a(r); } })); - t.set(a, [ i, f ]); + t.set(n, [ i, f ]); })); })); } }; - if (a) { + if (n) { t = new WeakMap; v(); } return [ i, v ]; }; - var Sa = function createDOMObserver(r, e, a, t) { - var n = false; - var i = t || {}, u = i.zr, s = i.jr, c = i.Ir, l = i.Mr, d = i.Rr, g = i.Fr; - var p = ya(r, nr((function() { - if (n) { - a(true); + var Un = function createDOMObserver(r, a, n, t) { + var e = false; + var i = t || {}, v = i.Ir, o = i.Dr, u = i.Mr, f = i.Rr, c = i.Vr, s = i.jr; + var d = qn(r, Cr((function() { + if (e) { + n(true); } }), { p: 33, _: 99 - }), c), h = p[0], w = p[1]; - var y = u || []; - var S = s || []; - var C = y.concat(S); - var O = function observerCallback(n) { - var i = d || tr; - var u = g || tr; - var s = []; - var c = []; + }), u), g = d[0], h = d[1]; + var p = v || []; + var w = o || []; + var b = p.concat(w); + var S = function observerCallback(e) { + var i = c || Sr; + var v = s || Sr; + var o = []; + var u = []; + var d = false; + var g = false; var p = false; - var h = false; - var y = false; - each(n, (function(a) { - var n = a.attributeName, f = a.target, d = a.type, g = a.oldValue, b = a.addedNodes; - var w = "attributes" === d; - var C = "childList" === d; - var O = r === f; - var x = w && isString(n) ? attr(f, n) : 0; - var A = 0 !== x && g !== x; - var E = v(S, n) > -1 && A; - if (e && !O) { - var D = !w; - var L = w && E; - var P = L && l && m(f, l); - var T = P ? !i(f, n, g, x) : D || L; - var z = T && !u(a, !!P, r, t); - o(c, b); - h = h || z; - y = y || C; + each(e, (function(n) { + var e = n.attributeName, c = n.target, s = n.type, h = n.oldValue, b = n.addedNodes; + var S = "attributes" === s; + var C = "childList" === s; + var O = r === c; + var x = S && l(e) ? T(c, e) : 0; + var E = 0 !== x && h !== x; + var z = m(w, e) > -1 && E; + if (a && !O) { + var A = !S; + var P = S && z; + var L = P && f && B(c, f); + var I = L ? !i(c, e, h, x) : A || P; + var D = I && !v(n, !!L, r, t); + y(u, b); + g = g || D; + p = p || C; } - if (!e && O && A && !i(f, n, g, x)) { - o(s, n); - p = p || E; + if (!a && O && E && !i(c, e, h, x)) { + y(o, e); + d = d || z; } })); - if (y && !f(c)) { - w((function(r) { - return c.reduce((function(e, a) { - o(e, b(r, a)); - return m(a, r) ? o(e, a) : e; + if (p && !C(u)) { + h((function(r) { + return u.reduce((function(a, n) { + y(a, j(r, n)); + return B(n, r) ? y(a, n) : a; }), []); })); } - if (e) { - h && a(false); - } else if (!f(s) || p) { - a(s, p); + if (a) { + g && n(false); + } else if (!C(o) || d) { + n(o, d); } }; - var x = new U(O); - x.observe(r, { + var O = new vr(S); + O.observe(r, { attributes: true, attributeOldValue: true, - attributeFilter: C, - subtree: e, - childList: e, - characterData: e + attributeFilter: b, + subtree: a, + childList: a, + characterData: a }); - n = true; + e = true; return [ function() { - if (n) { - h(); - x.disconnect(); - n = false; + if (e) { + g(); + O.disconnect(); + e = false; } }, function() { - if (n) { - O(x.takeRecords()); + if (e) { + S(O.takeRecords()); } } ]; }; - var Ca = "[" + Rr + "]"; - var Oa = "." + kr; - var xa = [ "tabindex" ]; - var Aa = [ "wrap", "cols", "rows" ]; - var Ea = [ "id", "class", "style", "open" ]; - var Da = function createStructureSetupObservers(r, e, a) { - var t; - var n; + var Yn = "[" + aa + "]"; + var Nn = "." + oa; + var Wn = [ "tabindex" ]; + var Gn = [ "wrap", "cols", "rows" ]; + var Xn = [ "id", "class", "style", "open" ]; + var $n = function createStructureSetupObservers(r, n, t) { + var e; var i; - var o = e[1]; - var u = r.J, f = r.K, s = r.L, c = r.ir, d = r.sr, g = r.cr, h = r.lr; - var b = be(), w = b.j, m = b.R; - var y = createCache({ - o: Z, - v: { + var v; + var o = n[1]; + var u = r.J, c = r.K, g = r.T, h = r.ir, p = r.lr, w = r.cr, b = r.sr; + var y = ja(), S = y.D, C = y.V; + var O = a({ + u: _r, + o: { w: 0, h: 0 } }, (function() { - var r = g(Wr, Nr); - r && h(Wr, Nr); - var e = pr(s); - var a = pr(f); - var t = hr(f); - r && h(Wr, Nr, true); + var r = w(ca, ea); + r && b(ca, ea); + var a = Mr(g); + var n = Mr(c); + var t = Rr(c); + r && b(ca, ea, true); return { - w: a.w + e.w + t.w, - h: a.h + e.h + t.h + w: n.w + a.w + t.w, + h: n.h + a.h + t.h }; - })), S = y[0]; - var C = c ? Aa : Ea.concat(Aa); - var x = nr(a, { + })), x = O[0]; + var z = h ? Gn : Xn.concat(Gn); + var A = Cr(t, { p: function _timeout() { - return t; + return e; }, _: function _maxDelay() { - return n; + return i; }, - m: function _mergeParams(r, e) { - var a = r[0]; - var t = e[0]; - return [ l(a).concat(l(t)).reduce((function(r, e) { - r[e] = a[e] || t[e]; + m: function _mergeParams(r, a) { + var n = r[0]; + var t = a[0]; + return [ E(n).concat(E(t)).reduce((function(r, a) { + r[a] = n[a] || t[a]; return r; }), {}) ]; } }); - var A = function updateViewportAttrsFromHost(r) { - each(r || xa, (function(r) { - if (v(xa, r) > -1) { - var e = attr(u, r); - if (isString(e)) { - attr(f, r, e); + var P = function updateViewportAttrsFromHost(r) { + each(r || Wn, (function(r) { + if (m(Wn, r) > -1) { + var a = T(u, r); + if (l(a)) { + T(c, r, a); } else { - p(f, r); + D(c, r); } } })); }; - var E = function onTrinsicChanged(r) { - var e = r[0], t = r[1]; + var L = function onTrinsicChanged(r) { + var a = r[0], n = r[1]; o({ - dr: e + dr: a }); - a({ - gr: t + t({ + gr: n }); }; - var D = function onSizeChanged(r) { - var e = r.pr, t = r.Tr, n = r.Pr; - var i = !e || n ? a : x; + var I = function onSizeChanged(r) { + var a = r.hr, n = r.Lr, e = r.Tr; + var i = !a || e ? t : A; var v = false; - if (t) { - var u = t[0], f = t[1]; + if (n) { + var u = n[0], f = n[1]; v = f; o({ _r: u }); } i({ - pr: e, - br: v + hr: a, + wr: v }); }; - var L = function onContentMutation(r) { - var e = S(), t = e[1]; - var n = r ? a : x; - if (t) { - n({ - hr: true + var M = function onContentMutation(r) { + var a = x(), n = a[1]; + var e = r ? t : A; + if (n) { + e({ + pr: true }); } }; - var P = function onHostMutation(r, e) { - if (e) { - x({ + var R = function onHostMutation(r, a) { + if (a) { + A({ Cr: true }); - } else if (!d) { - A(r); + } else if (!p) { + P(r); } }; - var T = (s || !m) && ma(u, E); - var z = !d && ba(u, D, { - Pr: true, - Lr: !w + var V = (g || !C) && Fn(u, L); + var j = !p && Bn(u, I, { + Tr: true, + Pr: !S }); - var j = Sa(u, false, P, { - jr: Ea, - zr: Ea.concat(xa) - }), I = j[0]; - var M = d && new B(D.bind(0, { - pr: true + var H = Un(u, false, R, { + Dr: Xn, + Ir: Xn.concat(Wn) + }), B = H[0]; + var k = p && new ur(I.bind(0, { + hr: true })); - M && M.observe(u); - A(); + k && k.observe(u); + P(); return [ function(r) { - var e = r("updating.ignoreMutation"), a = e[0]; - var v = r("updating.attributes"), o = v[0], u = v[1]; - var c = r("updating.elementEvents"), l = c[0], d = c[1]; - var g = r("updating.debounce"), p = g[0], h = g[1]; - var b = d || u; - var w = function ignoreMutationFromOptions(r) { - return isFunction(a) && a(r); + var a = r("updating.ignoreMutation"), n = a[0]; + var t = r("updating.attributes"), o = t[0], u = t[1]; + var l = r("updating.elementEvents"), h = l[0], p = l[1]; + var w = r("updating.debounce"), b = w[0], m = w[1]; + var y = p || u; + var S = function ignoreMutationFromOptions(r) { + return s(n) && n(r); }; - if (b) { - if (i) { - i[1](); - i[0](); + if (y) { + if (v) { + v[1](); + v[0](); } - i = Sa(s || f, true, L, { - jr: C.concat(o || []), - zr: C.concat(o || []), - Ir: l, - Mr: Ca, - Fr: function _ignoreContentChange(r, e) { - var a = r.target, t = r.attributeName; - var n = !e && t ? O(a, Ca, Oa) : false; - return n || !!w(r); + v = Un(g || c, true, M, { + Dr: z.concat(o || []), + Ir: z.concat(o || []), + Mr: h, + Rr: Yn, + jr: function _ignoreContentChange(r, a) { + var n = r.target, t = r.attributeName; + var e = !a && t ? U(n, Yn, Nn) : false; + return e || !!S(r); } }); } - if (h) { - x.S(); - if (isArray(p)) { - var m = p[0]; - var y = p[1]; - t = isNumber(m) ? m : false; - n = isNumber(y) ? y : false; - } else if (isNumber(p)) { - t = p; - n = false; + if (m) { + A.S(); + if (d(b)) { + var C = b[0]; + var O = b[1]; + e = f(C) ? C : false; + i = f(O) ? O : false; + } else if (f(b)) { + e = b; + i = false; } else { - t = false; - n = false; + e = false; + i = false; } } }, function() { - i && i[0](); - T && T(); - z && z(); - M && M.disconnect(); - I(); + v && v[0](); + V && V(); + j && j(); + k && k.disconnect(); + B(); } ]; }; - var La = { - D: { + var Jn = { + P: { t: 0, r: 0, b: 0, l: 0 }, - wr: false, + br: false, G: { marginRight: 0, marginBottom: 0, @@ -2128,229 +2124,229 @@ x: "hidden", y: "hidden" }, - Ar: { + Er: { x: false, y: false }, dr: false, _r: false }; - var Pa = function createStructureSetup(r, e) { - var a = Tr(e, {}); - var t = zr(La); - var n = Lr(), i = n[0], v = n[1], o = n[2]; + var Kn = function createStructureSetup(r, a) { + var n = Jr(a, {}); + var t = Kr(Jn); + var e = Xr(), i = e[0], v = e[1], o = e[2]; var u = t[0]; - var f = Ze(r), s = f[0], c = f[1], l = f[2]; - var d = la(s, t); - var g = Da(s, t, (function(r) { - o("u", [ d(a, r), {}, false ]); - })), p = g[0], h = g[1]; - var b = u.bind(0); - b.Hr = function(r) { + var f = bn(r), l = f[0], c = f[1], s = f[2]; + var d = Dn(l, t); + var g = $n(l, t, (function(r) { + o("u", [ d(n, r), {}, false ]); + })), h = g[0], p = g[1]; + var w = u.bind(0); + w.Hr = function(r) { i("u", r); }; - b.Nr = c; - b.Vr = s; - return [ function(r, a) { - var t = Tr(e, r, a); - p(t); - o("u", [ d(t, {}, a), r, !!a ]); - }, b, function() { + w.Br = c; + w.kr = l; + return [ function(r, n) { + var t = Jr(a, r, n); + h(t); + o("u", [ d(t, {}, n), r, !!n ]); + }, w, function() { v(); - h(); - l(); + p(); + s(); } ]; }; - var Ta = function generateScrollbarDOM(r) { - var e = T(re + " " + r); - var a = T(te); - var t = T(ne); - A(e, a); - A(a, t); + var Zn = function generateScrollbarDOM(r) { + var a = J(ba + " " + r); + var n = J(Sa); + var t = J(Ca); + N(a, n); + N(n, t); return { - Ur: e, - kr: a, - Br: t + Fr: a, + qr: n, + Ur: t }; }; - var za = function createScrollbarsSetupElements(r, e) { - var a = be(), t = a.H; - var n = t(), i = n.qr; - var v = e.Z, o = e.J, u = e.K, f = e.ur; - var s = !f && r.scrollbarsSlot; - var c = Xe([ v, o, u ], (function() { + var Qn = function createScrollbarsSetupElements(r, a) { + var n = ja(), t = n.H; + var e = t(), i = e.Yr; + var v = a.Z, o = a.J, u = a.K, f = a.ur; + var l = !f && r.scrollbarsSlot; + var c = hn([ v, o, u ], (function() { return o; - }), i, s); - var l = Ta(ee); - var d = Ta(ae); - var g = l.Ur; - var p = d.Ur; - var h = function appendElements() { - A(c, g); - A(c, p); + }), i, l); + var s = Zn(ma); + var d = Zn(ya); + var g = s.Fr; + var h = d.Fr; + var p = function appendElements() { + N(c, g); + N(c, h); }; return [ { - Yr: l, + Nr: s, Wr: d - }, h, P.bind(0, [ g, p ]) ]; + }, p, $.bind(0, [ g, h ]) ]; }; - var ja = function createScrollbarsSetup(r, e, a) { - var t = zr({}); - var n = t[0]; - var i = za(r, a), v = i[0], o = i[1], u = i[2]; - var f = n.bind(0); - f.Vr = v; - f.Nr = o; - return [ function(r, a) { - var t = Tr(e, r, a); + var rt = function createScrollbarsSetup(r, a, n) { + var t = Kr({}); + var e = t[0]; + var i = Qn(r, n), v = i[0], o = i[1], u = i[2]; + var f = e.bind(0); + f.kr = v; + f.Br = o; + return [ function(r, n) { + var t = Jr(a, r, n); console.log(t); }, f, function() { u(); } ]; }; - var Ia = new Set; - var Ma = new WeakMap; - var Ra = function addInstance(r, e) { - Ma.set(r, e); - Ia.add(r); + var at = new Set; + var nt = new WeakMap; + var tt = function addInstance(r, a) { + nt.set(r, a); + at.add(r); }; - var Fa = function removeInstance(r) { - Ma.delete(r); - Ia.delete(r); + var et = function removeInstance(r) { + nt.delete(r); + at.delete(r); }; - var Ha = function getInstance(r) { - return Ma.get(r); + var it = function getInstance(r) { + return nt.get(r); }; - var Na = function OverlayScrollbars(r, e, a) { + var vt = function OverlayScrollbars(r, a, n) { var t = false; - var n = be(), i = n.V, v = n.T, o = n.F; - var u = me(); - var f = isHTMLElement(r) ? r : r.target; - var s = Ha(f); - if (s) { - return s; + var e = ja(), i = e.k, v = e.I, o = e.j; + var u = Ba(); + var f = w(r) ? r : r.target; + var l = it(f); + if (l) { + return l; } - var c = u[Me]; + var c = u[rn]; var d = function validateOptions(r) { - var e = r || {}; - var a = c && c.q; - return a ? a(e, true) : e; + var a = r || {}; + var n = c && c.Y; + return n ? n(a, true) : a; }; - var g = assignDeep({}, i(), d(e)); - var p = Lr(a), h = p[0], b = p[1], w = p[2]; - var m = Pa(r, g), y = m[0], S = m[1], C = m[2]; - var O = ja(r, g, S.Vr), x = O[0], A = O[1], E = O[2]; - var D = function update(r, e) { - y(r, e); - x(r, e); + var g = z({}, i(), d(a)); + var h = Xr(n), p = h[0], b = h[1], m = h[2]; + var y = Kn(r, g), S = y[0], C = y[1], O = y[2]; + var x = rt(r, g, C.kr), P = x[0], T = x[1], L = x[2]; + var I = function update(r, a) { + S(r, a); + P(r, a); }; - var L = o(D.bind(0, {}, true)); - var P = function destroy(r) { - Fa(f); + var D = o(I.bind(0, {}, true)); + var M = function destroy(r) { + et(f); + D(); L(); - E(); - C(); + O(); t = true; - w("destroyed", [ T, !!r ]); + m("destroyed", [ R, !!r ]); b(); }; - var T = { + var R = { options: function options(r) { if (r) { - var e = oe(g, d(r)); - if (!isEmptyObject(e)) { - assignDeep(g, e); - D(e); + var a = Ea(g, d(r)); + if (!A(a)) { + z(g, a); + I(a); } } - return assignDeep({}, g); + return z({}, g); }, - on: h, - off: function off(r, e) { - r && e && b(r, e); + on: p, + off: function off(r, a) { + r && a && b(r, a); }, state: function state() { - var r = S(), e = r.Or, a = r.Sr, n = r.Ar, i = r.D, v = r.wr; - return assignDeep({}, { - overflowAmount: e, - overflowStyle: a, - hasOverflow: n, + var r = C(), a = r.Or, n = r.Sr, e = r.Er, i = r.P, v = r.br; + return z({}, { + overflowAmount: a, + overflowStyle: n, + hasOverflow: e, padding: i, paddingAbsolute: v, destroyed: t }); }, elements: function elements() { - var r = S.Vr, e = r.Z, a = r.J, t = r.D, n = r.K, i = r.L; - return assignDeep({}, { - target: e, - host: a, - padding: t || n, - viewport: n, - content: i || n + var r = C.kr, a = r.Z, n = r.J, t = r.P, e = r.K, i = r.T; + return z({}, { + target: a, + host: n, + padding: t || e, + viewport: e, + content: i || e }); }, update: function update(r) { - D({}, r); - return T; + I({}, r); + return R; }, - destroy: P.bind(0) + destroy: M.bind(0) }; - each(l(u), (function(r) { - var e = u[r]; - if (isFunction(e)) { - e(OverlayScrollbars, T); + each(E(u), (function(r) { + var a = u[r]; + if (s(a)) { + a(OverlayScrollbars, R); } })); if (v.x && v.y && !g.nativeScrollbarsOverlaid.initialize) { - P(true); - return T; + M(true); + return R; } - S.Nr(); - A.Nr(); - Ra(f, T); - w("initialized", [ T ]); - S.Hr((function(r, e, a) { - var t = r.pr, n = r.br, i = r.gr, v = r.Dr, o = r.Er, u = r.hr, f = r.Cr; - w("updated", [ T, { + C.Br(); + T.Br(); + tt(f, R); + m("initialized", [ R ]); + C.Hr((function(r, a, n) { + var t = r.hr, e = r.wr, i = r.gr, v = r.Ar, o = r.zr, u = r.pr, f = r.Cr; + m("updated", [ R, { updateHints: { sizeChanged: t, - directionChanged: n, + directionChanged: e, heightIntrinsicChanged: i, overflowAmountChanged: v, overflowStyleChanged: o, contentMutation: u, hostMutation: f }, - changedOptions: e, - force: a + changedOptions: a, + force: n } ]); })); - return T.update(true); + return R.update(true); }; - Na.plugin = ye; - Na.env = function() { - var r = be(), e = r.P, a = r.T, t = r.j, n = r.M, i = r.R, v = r.I, o = r.k, u = r.B, f = r.H, s = r.N, c = r.V, l = r.U; - return assignDeep({}, { - scrollbarsSize: e, - scrollbarsOverlaid: a, + vt.plugin = ka; + vt.env = function() { + var r = ja(), a = r.L, n = r.I, t = r.D, e = r.R, i = r.V, v = r.M, o = r.q, u = r.U, f = r.H, l = r.B, c = r.k, s = r.F; + return z({}, { + scrollbarsSize: a, + scrollbarsOverlaid: n, scrollbarsHiding: t, - rtlScrollBehavior: n, + rtlScrollBehavior: e, flexboxGlue: i, cssCustomProperties: v, defaultInitializationStrategy: o, defaultDefaultOptions: u, getInitializationStrategy: f, - setInitializationStrategy: s, + setInitializationStrategy: l, getDefaultOptions: c, - setDefaultOptions: l + setDefaultOptions: s }); }; - r.OverlayScrollbars = Na; - r.optionsValidationPlugin = Re; - r.scrollbarsHidingPlugin = Ye; - r.sizeObserverPlugin = Ue; - Object.defineProperty(r, "g", { + r.OverlayScrollbars = vt; + r.optionsValidationPlugin = an; + r.scrollbarsHidingPlugin = sn; + r.sizeObserverPlugin = un; + Object.defineProperty(r, "v", { value: true }); })); diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 4743d93..7cabcad 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/cache.ts","../src/support/utils/types.ts","../src/support/utils/array.ts","../src/support/utils/object.ts","../src/support/dom/attribute.ts","../src/support/dom/style.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../src/support/dom/class.ts","../src/support/utils/equal.ts","../src/support/utils/function.ts","../src/support/dom/dimensions.ts","../src/support/dom/events.ts","../src/support/dom/offset.ts","../src/support/eventListeners.ts","../src/setups/setups.ts","../src/classnames.ts","../src/options.ts","../src/environment.ts","../src/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/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\nexport function createCache(options: CacheOptions): CacheContextual;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update: CacheUpdater\r\n): Cache;\r\nexport function createCache(\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n}\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport const type: (obj: any) => string = (obj) =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: any[]) => any {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instanceofObj = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isElement(obj: any): obj is Element {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n}\r\n","import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n if (Array.from && arr) {\r\n return Array.from(arr);\r\n }\r\n const result: T[] = [];\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param 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 = (\r\n arr: ArrayLike | Set,\r\n args?: any[],\r\n keep?: boolean\r\n): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n if (arr instanceof Set) {\r\n arr.forEach(runFn);\r\n !keep && arr.clear();\r\n } else {\r\n each(arr, runFn);\r\n !keep && (arr as any[]).splice && (arr as any[]).splice(0, arr.length);\r\n }\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W\r\n): T & U & V & W;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X\r\n): T & U & V & W & X;\r\nexport function assignDeep(\r\n target: T,\r\n object1: U,\r\n object2: V,\r\n object3: W,\r\n object4: X,\r\n object5: Y\r\n): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { from } from 'support/utils/array';\r\nimport { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n): void;\r\nexport function attr(\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollLeft(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined): number;\r\nexport function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void;\r\nexport function scrollTop(\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | false | null | undefined): string;\r\nexport function val(elm: HTMLInputElement | false | null | undefined, value: string): void;\r\nexport function val(\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n /* istanbul ignore next */\r\n return Number.isNaN(num) ? 0 : num;\r\n};\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, 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: function () {\r\n passiveEventsSupport = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n }\r\n return passiveEventsSupport;\r\n};\r\nconst splitEventNames = (eventNames: string) => eventNames.split(' ');\r\n\r\nexport interface OnOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\n/**\r\n * Removes the passed event listener for the passed events with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const off = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(splitEventNames(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed eventnames with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const on = (\r\n target: EventTarget,\r\n eventNames: string,\r\n listener: (event: T) => any,\r\n options?: OnOptions\r\n): (() => void) => {\r\n const doSupportPassiveEvents = supportPassiveEvents();\r\n const passive = (doSupportPassiveEvents && options && options._passive) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (\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\r\n const events = new Map>();\r\n\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener[]\r\n ): void;\r\n function removeEvent(\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n }\r\n\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener[]\r\n ): () => void;\r\n function addEvent(\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n }\r\n\r\n function triggerEvent(name: Name, args?: EventMap[Name]): void {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n }\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [\r\n typeof addEvent,\r\n typeof removeEvent,\r\n typeof triggerEvent\r\n ];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, PartialOptions } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n PartialOptions, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { PartialOptions } from 'typings';\r\nimport type { Plugin } from 'plugins';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\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 stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]\r\n );\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import { keys, attr, WH, style, addClass, removeClass, noop, each } from 'support';\r\nimport { getEnvironment } from 'environment';\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 { 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(): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: 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};\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: () => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = getEnvironment();\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n const { _flexboxGlue } = getEnvironment();\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 },\r\n};\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEachAndClear,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false | null | undefined;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarsHiding } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarsHiding;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n hostInitializationStrategy,\r\n targetStructureInitialization.host\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEachAndClear.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [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 _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [updateStructure(checkOptionsFallback, updateHints), {}, false]);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\r\n );\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n Plugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(osPlugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, withdrawn: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","isUndefined","obj","undefined","isNull","isNumber","isString","isBoolean","isFunction","isArray","Array","isObject","isArrayLike","length","lengthCorrectFormat","isPlainObject","type","key","cstr","ctor","ctorProto","prototype","hasOwnConstructor","hasOwnProperty","call","hasIsPrototypeOf","isHTMLElement","instanceofObj","window","HTMLElement","nodeType","ElementNodeType","isElement","Element","each","source","callback","i","Object","keys","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","elm","value","attr","attrName","getAttribute","setAttribute","scrollLeft","scrollTop","style","styles","getSingleStyle","getStyles","getStylesResult","computedStyle","getComputedStyle","getCSSVal","reduce","result","setCSSVal","Node","ELEMENT_NODE","toString","replace","toLowerCase","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","Set","forEach","isEmptyArray","runEachAndClear","args","keep","runFn","fn","clear","splice","prop","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","Number","isNaN","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","removeEvent","eventSet","events","currListener","addEvent","set","triggerEvent","event","Map","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarsSize","_nativeScrollbarsOverlaid","_nativeScrollbarsHiding","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","_updateNativeScrollba","scrollbarSizeChanged","getEnvironment","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","_validateRecursive","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","_validateOptions","_optionsValidationPlu","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","_sizeObserverPlugin","contentArrangeCounter","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","_getEnvironment","_nativeScrollbarStyling","_nativeScrollbarIsOverlaid","create","_overflowUpdateSegment","doViewportArrange","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","_getEnvironment2","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","_getState","_viewportPaddingStyle","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","_getState2","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_scrollbarsHidingPlug","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getInitializationStr","hostInitializationStrategy","_host","viewportInitializationStrategy","_viewport","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowStyleCache","_createCache4","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","_ref","_hostMutation","_getState3","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_ref$_direction","_direction","observeDirectionChange","_ref$_appear","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","_sizeObserverPlugin$_","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","_createEventContentCh","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","updateObservers","_createStructureSetup2","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","environmentScrollbarSlot","_scrollbarsSlot","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","_createScrollbarsSetu","scrollbarsSetupState","log","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","_structureState","pluginInstance","sizeChanged","hostMutation","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/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/environment.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/initialization.ts","../src/setups/structureSetup/structureSetup.elements.ts","../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","../src/setups/structureSetup/structureSetup.update.ts","../src/observers/sizeObserver.ts","../src/observers/trinsicObserver.ts","../src/observers/domObserver.ts","../src/setups/structureSetup/structureSetup.observers.ts","../src/setups/structureSetup/structureSetup.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","../src/setups/scrollbarsSetup/scrollbarsSetup.ts","../src/instances.ts","../src/overlayscrollbars.ts"],"sourcesContent":["import { isArrayLike, isString } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | null | undefined;\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | unknown\r\n): Array | ReadonlyArray | null | undefined;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null | undefined,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | unknown\r\n): ArrayLike | null | undefined;\r\nexport function each(\r\n obj: PlainObject,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject;\r\nexport function each(\r\n obj: PlainObject | null | undefined,\r\n callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown\r\n): PlainObject | null | undefined;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined,\r\n callback: (value: T, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: T[], item: T, fromIndex?: number): number =>\r\n arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => {\r\n const original = Array.from;\r\n const result: T[] = [];\r\n\r\n if (original && arr) {\r\n return original(arr);\r\n }\r\n\r\n if (arr instanceof Set) {\r\n arr.forEach((value) => {\r\n push(result, value);\r\n });\r\n } else {\r\n each(arr, (elm) => {\r\n push(result, elm);\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean =>\r\n !!array && array.length === 0;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\r\n};\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray, isUndefined } from 'support/utils/types';\r\nimport { PlainObject, StyleObject } from 'typings';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst cssNumber = {\r\n // animationiterationcount: 1,\r\n // columncount: 1,\r\n // fillopacity: 1,\r\n // flexgrow: 1,\r\n // flexshrink: 1,\r\n // fontweight: 1,\r\n // lineheight: 1,\r\n // order: 1,\r\n // orphans: 1,\r\n // widows: 1,\r\n // zoom: 1,\r\n opacity: 1,\r\n zindex: 1,\r\n};\r\n\r\nconst parseToZeroOrNumber = (value: string, toFloat?: boolean): number => {\r\n /* istanbul ignore next */\r\n const num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n // num === num means num is not NaN\r\n /* istanbul ignore next */\r\n return num === num ? num : 0; // eslint-disable-line no-self-compare\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number =>\r\n !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val;\r\n\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null\r\n ? computedStyle[prop] || computedStyle.getPropertyValue(prop)\r\n : elm.style[prop];\r\n\r\nconst setCSSVal = (\r\n elm: HTMLElement | false | null | undefined,\r\n prop: string,\r\n val: string | number\r\n): void => {\r\n try {\r\n if (elm) {\r\n const { style: elmStyle } = elm;\r\n if (!isUndefined(elmStyle[prop])) {\r\n elmStyle[prop] = adaptCSSVal(prop, val);\r\n } else {\r\n elmStyle.setProperty(prop, val as string);\r\n }\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject\r\n): void;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: string\r\n): string;\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: Array | string\r\n): { [key: string]: string };\r\nexport function style(\r\n elm: HTMLElement | false | null | undefined,\r\n styles: StyleObject | Array | string\r\n): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | false | null | undefined): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElement | false | null | undefined,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}`;\r\n const right = `${finalPrefix}right${finalSuffix}`;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}`;\r\n const left = `${finalPrefix}left${finalSuffix}`;\r\n const result = style(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n","export interface CacheOptions {\r\n // initial value of _value.\r\n _initialValue: Value;\r\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\r\n _equal?: EqualCachePropFunction;\r\n // If true always updates _value and _previous, otherwise they update only when they changed.\r\n _alwaysUpdateValues?: boolean;\r\n}\r\n\r\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\r\n\r\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\r\n\r\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\r\n\r\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\r\n\r\nexport type UpdateCache = (force?: boolean) => CacheValues;\r\n\r\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\r\n\r\nexport type Cache = [UpdateCache, GetCurrentCache];\r\n\r\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\r\n\r\ntype CreateCache = {\r\n (options: CacheOptions): CacheContextual;\r\n (options: CacheOptions, update: CacheUpdater): Cache;\r\n (options: CacheOptions, update?: CacheUpdater):\r\n | CacheContextual\r\n | Cache;\r\n};\r\n\r\nexport const createCache: CreateCache = (\r\n options: CacheOptions,\r\n update?: CacheUpdater\r\n): CacheContextual | Cache => {\r\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\r\n let _value: Value = _initialValue;\r\n let _previous: Value | undefined;\r\n\r\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\r\n const curr = _value;\r\n\r\n const newVal = newValue;\r\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\r\n\r\n if (changed || _alwaysUpdateValues) {\r\n _value = newVal;\r\n _previous = curr;\r\n }\r\n\r\n return [_value, changed, _previous];\r\n };\r\n const cacheUpdateIsolated: UpdateCache = (force?) =>\r\n cacheUpdateContextual(update!(_value, _previous), force);\r\n\r\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\r\n _value,\r\n !!force, // changed\r\n _previous,\r\n ];\r\n\r\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\r\n | CacheContextual\r\n | Cache;\r\n};\r\n","import { PlainObject } from 'typings';\r\n\r\nconst ElementNodeType = Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\n\r\nexport const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n\r\nexport const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): boolean =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport const isArrayLike = (obj: any): obj is ArrayLike => {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const isPlainObject = (obj: any): obj is PlainObject => {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = window.HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = window.Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n ): T & U & V & W & X & Y & Z;\r\n};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: AssignDeep = (\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z => {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const isEmptyObject = (obj: any): boolean => {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n};\r\n","import { from } from 'support/utils/array';\r\nimport { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\ntype Attr = {\r\n (elm: HTMLElement | false | null | undefined, attrName: string): string | null;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void;\r\n (elm: HTMLElement | false | null | undefined, attrName: string, value?: string):\r\n | string\r\n | null\r\n | void;\r\n};\r\n\r\ntype GetSetProp = {\r\n (elm: HTMLElement | false | null | undefined): number;\r\n (elm: HTMLElement | false | null | undefined, value: number): void;\r\n (elm: HTMLElement | false | null | undefined, value?: number): number | void;\r\n};\r\n\r\nconst getSetProp = (\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | false | null | undefined,\r\n value?: number | string\r\n): number | string | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n};\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport const attr = ((\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value?: string\r\n): string | null | void => {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}) as Attr;\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds or removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added or removed.\r\n * @param value The value which shall be added or removed.\r\n * @param add True if the value shall be added, false otherwise.\r\n */\r\nexport const attrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string,\r\n add?: boolean\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n currValuesSet[add ? 'add' : 'delete'](value);\r\n\r\n attr(elm, attrName, from(currValuesSet).join(' ').trim());\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: HTMLElement | false | null | undefined,\r\n attrName: string,\r\n value: string\r\n) => {\r\n const currValues = attr(elm, attrName) || '';\r\n const currValuesSet = new Set(currValues.split(' '));\r\n return currValuesSet.has(value);\r\n};\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | false | null | undefined, attrName: string): void => {\r\n elm && elm.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport const scrollLeft = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp;\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport const scrollTop = ((\r\n elm: HTMLElement | false | null | undefined,\r\n value?: number\r\n): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp;\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport const val = ((\r\n elm: HTMLInputElement | false | null | undefined,\r\n value?: string\r\n): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp;\r\n","import { isElement } from 'support/utils/types';\r\nimport { push, from } from 'support/utils/array';\r\n\r\ntype InputElementType = Element | Node | false | null | undefined;\r\ntype OutputElementType = Element | null;\r\n\r\nconst elmPrototype = Element.prototype;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? (isElement(elm) ? elm : null) : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n /* istanbul ignore next */\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const fn: (...args: any) => boolean = elmPrototype.matches || elmPrototype.msMatchesSelector;\r\n return fn.call(elm, selector);\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);\r\n\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType => {\r\n if (isElement(elm)) {\r\n const closestFn = elmPrototype.closest;\r\n if (closestFn) {\r\n return closestFn.call(elm, selector);\r\n }\r\n\r\n do {\r\n if (is(elm, selector)) {\r\n return elm as Element;\r\n }\r\n elm = parent(elm);\r\n } while (elm);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = elm && closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !== closestHighBoundaryElm\r\n : false;\r\n};\r\n\r\nexport { find, findFirst, is, children, contents, parent, liesBetween };\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | false | null | undefined;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (\r\n parentElm: Node | false | null | undefined,\r\n preferredAnchor: Node | false | null | undefined,\r\n insertedElms: NodeCollection\r\n): void => {\r\n if (insertedElms) {\r\n let anchor: Node | false | null | undefined = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (\r\n node: Node | false | null | undefined,\r\n children: NodeCollection\r\n): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (\r\n node: Node | false | null | undefined,\r\n insertedNodes: NodeCollection\r\n): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { attr } from 'support/dom/attribute';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n if (classNames) {\r\n attr(div, 'class', classNames);\r\n }\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { hasOwnProperty } from 'support/utils/object';\r\nimport { createDiv } from 'support/dom/create';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = [\r\n 'WebKit',\r\n 'Moz',\r\n 'O',\r\n 'MS',\r\n 'webkit',\r\n 'moz',\r\n 'o',\r\n 'ms',\r\n];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without it, or and empty string if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return !(result = resultPossibilities.find(\r\n (resultPossibility: string) => elmStyle[resultPossibility] !== undefined\r\n ));\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported without it, or an empty string if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n // eslint-disable-next-line no-return-assign\r\n return (cssCache[name] = result || '');\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const MutationObserverConstructor = jsAPI('MutationObserver');\r\nexport const IntersectionObserverConstructor = jsAPI(\r\n 'IntersectionObserver'\r\n);\r\nexport const ResizeObserverConstructor = jsAPI('ResizeObserver');\r\nexport const cAF = jsAPI('cancelAnimationFrame');\r\nexport const rAF = jsAPI('requestAnimationFrame');\r\n","import { isString } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\nimport { keys } from 'support/utils/object';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined,\r\n action: (elmClassList: DOMTokenList, clazz: string) => boolean | void\r\n): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && className && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = !!action(elm.classList, clazz) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (\r\n elm: Element | false | null | undefined,\r\n className: string | false | null | undefined\r\n): (() => void) => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n return removeClass.bind(0, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (\r\n classNameA: string | null | undefined,\r\n classNameB: string | null | undefined\r\n) => {\r\n const classNameASplit = classNameA && classNameA.split(' ');\r\n const classNameBSplit = classNameB && classNameB.split(' ');\r\n const tempObj = {};\r\n\r\n each(classNameASplit, (className) => {\r\n tempObj[className] = 1;\r\n });\r\n each(classNameBSplit, (className) => {\r\n if (tempObj[className]) {\r\n delete tempObj[className];\r\n } else {\r\n tempObj[className] = 1;\r\n }\r\n });\r\n\r\n return keys(tempObj);\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { WH, XY, TRBL } from 'support/dom';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, ['width', 'height'], round && ((value) => Math.round(value)));\r\n","import { isNumber, isFunction } from 'support/utils/types';\r\nimport { from } from 'support/utils/array';\r\nimport { rAF, cAF } from 'support/compatibility/apis';\r\n\r\nconst clearTimeouts = (id: number | undefined) => {\r\n id && window.clearTimeout(id);\r\n id && cAF!(id);\r\n};\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const noop = () => {}; // eslint-disable-line\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let timeoutId: number | undefined;\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n const setT = window.setTimeout;\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clearTimeouts(timeoutId);\r\n clearTimeouts(maxTimeoutId);\r\n maxTimeoutId = timeoutId = prevArguments = undefined;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (timeoutId) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clearTimeouts(timeoutId);\r\n // @ts-ignore\r\n timeoutId = setTimeoutFn(boundInvoke, finalTimeout as number) as number;\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import { style } from 'support/dom/style';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = (elm: HTMLElement | false | null | undefined): WH =>\r\n elm\r\n ? {\r\n w: elm.scrollWidth,\r\n h: elm.scrollHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElement | false | null | undefined): WH => {\r\n const cssHeight = parseFloat(style(elm, 'height')) || 0;\r\n const cssWidth = parseFloat(style(elm, 'height')) || 0;\r\n return {\r\n w: cssWidth - Math.round(cssWidth),\r\n h: cssHeight - Math.round(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElement | false | null | undefined): boolean =>\r\n elm ? elementHasDimensions(elm as HTMLElement) : false;\r\n","import { isUndefined } from 'support/utils/types';\r\nimport { each, push, 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) || false;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const offListeners: (() => void)[] = [];\r\n const nativeOptions: AddEventListenerOptions | boolean = doSupportPassiveEvents\r\n ? {\r\n passive,\r\n capture,\r\n }\r\n : capture;\r\n\r\n each(splitEventNames(eventNames), (eventName) => {\r\n const finalListener = (\r\n once\r\n ? (evt: T) => {\r\n target.removeEventListener(eventName, finalListener, capture);\r\n listener && listener(evt);\r\n }\r\n : listener\r\n ) as EventListener;\r\n\r\n push(offListeners, off.bind(null, target, eventName, finalListener, capture));\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n });\r\n\r\n return runEachAndClear.bind(0, offListeners);\r\n};\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null | undefined): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null | undefined): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import { isArray } from 'support/utils/types';\r\nimport { keys } from 'support/utils/object';\r\nimport { each, from, isEmptyArray } from 'support/utils/array';\r\n\r\nexport type EventListener<\r\n EventMap extends Record,\r\n Name extends keyof EventMap = keyof EventMap\r\n> = (...args: EventMap[Name]) => void;\r\n\r\nexport type InitialEventListeners> = {\r\n [K in keyof EventMap]?: EventListener | EventListener[];\r\n};\r\n\r\nconst manageListener = >(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(isArray(listener) ? listener : [listener], callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: InitialEventListeners\r\n) => {\r\n type EventListener = (\r\n ...args: EventMap[Name]\r\n ) => void;\r\n type RemoveEvent = {\r\n (name?: Name, listener?: EventListener): void;\r\n (name?: Name, listener?: EventListener[]): void;\r\n (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n };\r\n type AddEvent = {\r\n (name: Name, listener: EventListener): () => void;\r\n (name: Name, listener: EventListener[]): () => void;\r\n (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): () => void;\r\n };\r\n type TriggerEvent = {\r\n (name: Name, args?: EventMap[Name]): void;\r\n };\r\n\r\n const events = new Map>();\r\n\r\n const removeEvent: RemoveEvent = (\r\n name?: Name,\r\n listener?: EventListener | EventListener[]\r\n ): void => {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener!);\r\n }\r\n }, listener as any);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n\r\n const addEvent: AddEvent = (\r\n name: Name,\r\n listener: EventListener | EventListener[]\r\n ): (() => void) => {\r\n const eventSet = events.get(name) || new Set();\r\n events.set(name, eventSet);\r\n\r\n manageListener((currListener) => {\r\n currListener && eventSet.add(currListener);\r\n }, listener as any);\r\n\r\n return removeEvent.bind(0, name as any, listener as any);\r\n };\r\n\r\n const triggerEvent: TriggerEvent = (\r\n name: Name,\r\n args?: EventMap[Name]\r\n ): void => {\r\n const eventSet = events.get(name);\r\n\r\n each(from(eventSet), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...args: EventMap[keyof EventMap]) => void).apply(0, args as any);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n const initialListenerKeys = keys(initialEventListeners) as Extract[];\r\n each(initialListenerKeys, (key) => {\r\n addEvent(key, initialEventListeners![key] as any);\r\n });\r\n\r\n return [addEvent, removeEvent, triggerEvent] as [AddEvent, RemoveEvent, TriggerEvent];\r\n};\r\n","import { assignDeep, hasOwnProperty } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { PartialOptions } from 'typings';\r\n\r\nexport type SetupElements> = [elements: T, destroy: () => void];\r\n\r\nexport type SetupUpdate = (changedOptions: PartialOptions, force?: boolean) => T;\r\n\r\nexport type SetupUpdateCheckOption = (path: string) => [value: T, changed: boolean];\r\n\r\nexport type SetupUpdateSegment> = (\r\n updateHints: Hints,\r\n checkOption: SetupUpdateCheckOption,\r\n force: boolean\r\n) => Partial | void;\r\n\r\nexport type SetupState> = [\r\n get: () => T,\r\n set: (newState: Partial) => void\r\n];\r\n\r\nexport type Setup = Record> = [\r\n update: SetupUpdate,\r\n state: (() => DynamicState) & StaticState,\r\n destroy: () => void\r\n];\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? path.split('.').reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: ReadonlyOSOptions,\r\n changedOptions: PartialOptions,\r\n force?: boolean\r\n ): SetupUpdateCheckOption =>\r\n (path: string) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n\r\nexport const createState = (initialState: S): SetupState => {\r\n let state: S = initialState;\r\n return [\r\n () => state,\r\n (newState: Partial) => {\r\n state = assignDeep({}, state, newState);\r\n },\r\n ];\r\n};\r\n","export const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-glue`;\r\nexport const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;\r\n\r\nexport const dataAttributeHost = 'data-overlayscrollbars';\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostViewportScrollbarStyling = 'viewportStyled';\r\nexport const classNamePadding = 'os-padding';\r\nexport const classNameViewport = 'os-viewport';\r\nexport const classNameViewportArrange = `${classNameViewport}-arrange`;\r\nexport const classNameContent = 'os-content';\r\nexport const classNameViewportScrollbarStyling = `${classNameViewport}-scrollbar-styled`;\r\nexport const classNameOverflowVisible = `os-overflow-visible`;\r\n\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = 'os-scrollbar-track';\r\nexport const classNameScrollbarHandle = 'os-scrollbar-handle';\r\n","import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';\r\nimport { PartialOptions, ReadonlyOptions } from 'typings';\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw new Error();\r\n }\r\n return val;\r\n });\r\n\r\nexport type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical';\r\n\r\nexport type OverflowBehavior =\r\n | 'hidden'\r\n | 'scroll'\r\n | 'visible'\r\n | 'visible-hidden'\r\n | 'visible-scroll';\r\n\r\nexport type VisibilityBehavior = 'visible' | 'hidden' | 'auto';\r\n\r\nexport type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move';\r\n\r\nexport type ScrollBehavior = 'always' | 'ifneeded' | 'never';\r\n\r\nexport type BasicEventCallback = (this: any) => void;\r\n\r\nexport type ScrollEventCallback = (this: any, args?: UIEvent) => void;\r\n\r\nexport type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void;\r\n\r\nexport type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void;\r\n\r\nexport type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void;\r\n\r\nexport type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void;\r\n\r\nexport type UpdatedCallback = (this: any, args?: UpdatedArgs) => void;\r\n\r\nexport interface Options {\r\n paddingAbsolute: boolean;\r\n updating: {\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n attributes: string[] | null;\r\n debounce: [timeout: number, maxWait: number] | number | null; // (if tuple: [timeout: 0, maxWait: 33], if number: [timeout: number, maxWait: false]) debounce for content Changes\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n overflow: {\r\n x: OverflowBehavior;\r\n y: OverflowBehavior;\r\n };\r\n scrollbars: {\r\n visibility: VisibilityBehavior;\r\n autoHide: AutoHideBehavior;\r\n autoHideDelay: number;\r\n dragScroll: boolean;\r\n clickScroll: boolean;\r\n touch: boolean;\r\n };\r\n nativeScrollbarsOverlaid: {\r\n show: boolean;\r\n initialize: boolean;\r\n };\r\n}\r\n\r\nexport type ReadonlyOSOptions = ReadonlyOptions;\r\n\r\nexport interface OverflowChangedArgs {\r\n x: boolean;\r\n y: boolean;\r\n xScrollable: boolean;\r\n yScrollable: boolean;\r\n clipped: boolean;\r\n}\r\n\r\nexport interface OverflowAmountChangedArgs {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface DirectionChangedArgs {\r\n isRTL: number;\r\n dir: string;\r\n}\r\n\r\nexport interface SizeChangedArgs {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface UpdatedArgs {\r\n forced: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n // resize: 'none', // none || both || horizontal || vertical || n || b || h || v\r\n paddingAbsolute: false, // true || false\r\n updating: {\r\n elementEvents: [['img', 'load']], // array of tuples || null\r\n debounce: [0, 33], // number || number array || null\r\n attributes: null, // string array || null\r\n ignoreMutation: null, // () => any || null\r\n },\r\n overflow: {\r\n x: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: 'scroll', // visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n nativeScrollbarsOverlaid: {\r\n show: false, // true || false\r\n initialize: false, // true || false\r\n },\r\n scrollbars: {\r\n visibility: 'auto', // visible || hidden || auto || v || h || a\r\n autoHide: 'never', // never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: 800, // number\r\n dragScroll: true, // true || false\r\n clickScroll: false, // true || false\r\n touch: true, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: false, // true || false\r\n dynHeight: false, // true || false\r\n inheritedAttrs: ['style', 'class'], // string || array || null\r\n },\r\n */\r\n};\r\n\r\nexport const getOptionsDiff = (\r\n currOptions: T,\r\n newOptions: PartialOptions\r\n): PartialOptions => {\r\n const diff: PartialOptions = {};\r\n const optionsKeys = keys(newOptions).concat(keys(currOptions));\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {}), getOptionsDiff(currOptionValue, newOptionValue));\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n equalBCRWH,\r\n getBoundingClientRect,\r\n assignDeep,\r\n cssProperty,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n EventListener,\r\n} from 'support';\r\nimport {\r\n classNameEnvironment,\r\n classNameEnvironmentFlexboxGlue,\r\n classNameEnvironmentFlexboxGlueMax,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { Options, defaultOptions } from 'options';\r\nimport { PartialOptions } from 'typings';\r\nimport { InitializationStrategy } from 'initialization';\r\n\r\ntype EnvironmentEventMap = {\r\n _: [];\r\n};\r\n\r\nexport interface InternalEnvironment {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _flexboxGlue: boolean;\r\n readonly _cssCustomProperties: boolean;\r\n readonly _defaultInitializationStrategy: InitializationStrategy;\r\n readonly _defaultDefaultOptions: Options;\r\n _addListener(listener: EventListener): () => void;\r\n _getInitializationStrategy(): InitializationStrategy;\r\n _setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nlet environmentInstance: InternalEnvironment;\r\nconst { abs, round } = Math;\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nconst getNativeScrollbarSize = (\r\n body: HTMLElement,\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement\r\n): XY => {\r\n appendChildren(body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n};\r\n\r\nconst getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameViewportScrollbarStyling);\r\n try {\r\n result =\r\n style(testElm, cssProperty('scrollbar-width')) === 'none' ||\r\n window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') ===\r\n 'none';\r\n } catch (ex) {}\r\n revertClass();\r\n return result;\r\n};\r\n\r\nconst getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden, direction: 'rtl' });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst getFlexboxGlue = (parentElm: HTMLElement, childElm: HTMLElement): boolean => {\r\n const revertFbxGlue = addClass(parentElm, classNameEnvironmentFlexboxGlue);\r\n const minOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const minOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMin = equalBCRWH(minOffsetsize, minOffsetsizeParent, true);\r\n\r\n const revertFbxGlueMax = addClass(parentElm, classNameEnvironmentFlexboxGlueMax);\r\n const maxOffsetsizeParent = getBoundingClientRect(parentElm);\r\n const maxOffsetsize = getBoundingClientRect(childElm);\r\n const supportsMax = equalBCRWH(maxOffsetsize, maxOffsetsizeParent, true);\r\n\r\n revertFbxGlue();\r\n revertFbxGlueMax();\r\n\r\n return supportsMin && supportsMax;\r\n};\r\n\r\nconst getWindowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst createEnvironment = (): InternalEnvironment => {\r\n const { body } = document;\r\n const envDOM = createDOM(`
`);\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({\r\n _initialValue: getNativeScrollbarSize(body, envElm, envChildElm),\r\n _equal: equalXY,\r\n });\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const initializationStrategy = {\r\n _padding: !nativeScrollbarsHiding,\r\n _content: false,\r\n };\r\n const defaultDefaultOptions = assignDeep({}, defaultOptions);\r\n\r\n const env: InternalEnvironment = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _cssCustomProperties: style(envElm, 'zIndex') === '-1',\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _flexboxGlue: getFlexboxGlue(envElm, envChildElm),\r\n _addListener: (listener) => addEvent('_', listener),\r\n _getInitializationStrategy: assignDeep.bind(\r\n 0,\r\n {} as InitializationStrategy,\r\n initializationStrategy\r\n ),\r\n _setInitializationStrategy(newInitializationStrategy) {\r\n assignDeep(initializationStrategy, newInitializationStrategy);\r\n },\r\n _getDefaultOptions: assignDeep.bind(0, {} as Options, defaultDefaultOptions),\r\n _setDefaultOptions(newDefaultOptions) {\r\n assignDeep(defaultDefaultOptions, newDefaultOptions);\r\n },\r\n _defaultInitializationStrategy: assignDeep({}, initializationStrategy),\r\n _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),\r\n };\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n let size = windowSize();\r\n let dpr = getWindowDPR();\r\n\r\n window.addEventListener('resize', () => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n if (isZoom) {\r\n const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(\r\n getNativeScrollbarSize(body, envElm, envChildElm)\r\n );\r\n\r\n assignDeep(environmentInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n removeElements(envElm);\r\n\r\n if (scrollbarSizeChanged) {\r\n triggerEvent('_');\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n });\r\n }\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): InternalEnvironment => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { assignDeep, each, isArray, keys } from 'support';\r\nimport { OverlayScrollbars, OverlayScrollbarsStatic } from 'overlayscrollbars';\r\n\r\nexport type PluginInstance =\r\n | Record\r\n | ((staticObj: OverlayScrollbarsStatic, instanceObj: OverlayScrollbars) => void);\r\nexport type Plugin = {\r\n [pluginName: string]: T;\r\n};\r\n\r\nconst pluginRegistry: Record = {};\r\n\r\nexport const getPlugins = () => assignDeep({}, pluginRegistry);\r\n\r\nexport const addPlugin = (addedPlugin: Plugin | Plugin[]) =>\r\n each((isArray(addedPlugin) ? addedPlugin : [addedPlugin]) as Plugin[], (plugin) => {\r\n each(keys(plugin), (pluginName) => {\r\n pluginRegistry[pluginName] = plugin[pluginName];\r\n });\r\n });\r\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { each, hasOwnProperty, keys, push, isEmptyObject } from 'support/utils';\r\nimport { type, isArray, isUndefined, isPlainObject, isString } from 'support/utils/types';\r\nimport { PlainObject, PartialOptions } from 'typings';\r\n\r\nexport type OptionsObjectType = Record;\r\nexport type OptionsFunctionType = (this: any, ...args: any[]) => any;\r\nexport type OptionsTemplateType = ExtractPropsKey<\r\n OptionsTemplateTypeMap,\r\n T\r\n>;\r\nexport type OptionsTemplateTypes = keyof OptionsTemplateTypeMap;\r\nexport type OptionsTemplateNativeTypes = OptionsTemplateTypeMap[keyof OptionsTemplateTypeMap];\r\n\r\nexport type OptionsTemplateValue = T extends string\r\n ? string extends T\r\n ? OptionsTemplateValueNonEnum\r\n : string\r\n : OptionsTemplateValueNonEnum;\r\n\r\nexport type OptionsTemplate = {\r\n [P in keyof T]: T[P] extends OptionsObjectType\r\n ? OptionsTemplate\r\n : T[P] extends OptionsTemplateNativeTypes\r\n ? OptionsTemplateValue\r\n : never;\r\n};\r\n\r\nexport type OptionsValidationResult = [\r\n PartialOptions, // validated\r\n Record // foreign\r\n];\r\n\r\ntype OptionsTemplateTypeMap = {\r\n __TPL_boolean_TYPE__: boolean;\r\n __TPL_number_TYPE__: number;\r\n __TPL_string_TYPE__: string;\r\n __TPL_array_TYPE__: Array | ReadonlyArray;\r\n __TPL_function_TYPE__: OptionsFunctionType;\r\n __TPL_null_TYPE__: null;\r\n __TPL_object_TYPE__: OptionsObjectType;\r\n};\r\n\r\ntype OptionsTemplateValueNonEnum =\r\n | OptionsTemplateType\r\n | [OptionsTemplateType, ...Array];\r\n\r\ntype ExtractPropsKey = {\r\n [P in keyof T]: TProps extends T[P] ? P : never;\r\n}[keyof T];\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType;\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = {\r\n boolean: '__TPL_boolean_TYPE__',\r\n number: '__TPL_number_TYPE__',\r\n string: '__TPL_string_TYPE__',\r\n array: '__TPL_array_TYPE__',\r\n object: '__TPL_object_TYPE__',\r\n function: '__TPL_function_TYPE__',\r\n null: '__TPL_null_TYPE__',\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidationResult => {\r\n const validatedOptions: PartialOptions = {};\r\n const optionsCopy: PartialOptions = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array =\r\n template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const [validated, foreign] = validateRecursive(\r\n templateValue as T,\r\n optionsValue,\r\n doWriteErrors,\r\n propPrefix + prop\r\n );\r\n validatedOptions[prop] = validated as any;\r\n optionsCopy[prop] = foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n let typeString: string | undefined;\r\n each(optionsTemplateTypes, (value: string, key: string) => {\r\n if (value === currTemplateType) {\r\n typeString = key;\r\n }\r\n });\r\n const isEnumString = isUndefined(typeString);\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n push(errorEnumStrings, enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n push(errorPossibleTypes, isEnumString ? optionsTemplateTypes.string : typeString!);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n validatedOptions[prop] = optionsValue;\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${\r\n errorEnumStrings.length > 0\r\n ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].`\r\n : ''\r\n }`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return [validatedOptions, optionsCopy]; // optionsCopy equals now to foreign options\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a tuple which looks like:\r\n * [\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * ]\r\n * @param template The template according to which the options object shall be validated.\r\n * @param options The options object which shall be validated.\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validateOptions = (\r\n template: OptionsTemplate,\r\n options: PartialOptions,\r\n doWriteErrors?: boolean\r\n): OptionsValidationResult => validateRecursive(template, options, doWriteErrors);\r\n\r\nexport { validateOptions, optionsTemplateTypes };\r\n","import { Options, OverflowBehavior, VisibilityBehavior, AutoHideBehavior } from 'options';\r\nimport {\r\n validateOptions,\r\n OptionsTemplate,\r\n OptionsTemplateValue,\r\n optionsTemplateTypes as oTypes,\r\n} from 'plugins/optionsValidationPlugin/validation';\r\nimport type { PartialOptions } from 'typings';\r\nimport type { Plugin } from 'plugins';\r\n\r\nconst numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\nconst booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\nconst arrayNullValues: OptionsTemplateValue | null> = [oTypes.array, oTypes.null];\r\nconst overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\nconst scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\nconst scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\nconst optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n updating: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n touch: booleanAllowedValues, // true || false\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n nativeScrollbarsOverlaid: {\r\n show: booleanAllowedValues, // true || false\r\n initialize: booleanAllowedValues, // true || false\r\n },\r\n};\r\n\r\nexport type OptionsValidationPluginInstance = {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => PartialOptions;\r\n};\r\n\r\nexport const optionsValidationPluginName = '__osOptionsValidationPlugin';\r\n\r\nexport const optionsValidationPlugin: Plugin = {\r\n [optionsValidationPluginName]: {\r\n _: (options: PartialOptions, doWriteErrors?: boolean) => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n },\r\n },\r\n};\r\n","import {\r\n createDOM,\r\n style,\r\n appendChildren,\r\n offsetSize,\r\n scrollLeft,\r\n scrollTop,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n equalWH,\r\n push,\r\n cAF,\r\n rAF,\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 stopAndPrevent(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const offListeners = push(\r\n [],\r\n [on(expandElement, scrollEventName, onScroll), on(shrinkElement, scrollEventName, onScroll)]\r\n );\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n style(expandElementChild, {\r\n width: scrollAmount,\r\n height: scrollAmount,\r\n });\r\n\r\n reset();\r\n\r\n return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];\r\n },\r\n },\r\n};\r\n","import { keys, attr, WH, style, addClass, removeClass, noop, each } from 'support';\r\nimport { getEnvironment } from 'environment';\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 { 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(): HTMLStyleElement | false;\r\n _overflowUpdateSegment(\r\n doViewportArrange: 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};\r\n\r\nlet contentArrangeCounter = 0;\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const scrollbarsHidingPlugin: Plugin = {\r\n [scrollbarsHidingPluginName]: {\r\n _createUniqueViewportArrangeElement: () => {\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _cssCustomProperties,\r\n } = getEnvironment();\r\n const create =\r\n !_cssCustomProperties &&\r\n !_nativeScrollbarStyling &&\r\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n const result = create ? document.createElement('style') : false;\r\n\r\n if (result) {\r\n attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);\r\n contentArrangeCounter++;\r\n }\r\n\r\n return result;\r\n },\r\n _overflowUpdateSegment: (\r\n doViewportArrange,\r\n viewport,\r\n viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n ) => {\r\n const { _flexboxGlue } = getEnvironment();\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 },\r\n};\r\n","import { isFunction, isNull, isUndefined } from 'support';\r\nimport type {\r\n StructureInitialization,\r\n StructureInitializationStrategy,\r\n} from 'setups/structureSetup';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n} from 'setups/scrollbarsSetup';\r\n\r\ntype StaticInitialization = HTMLElement | null | undefined;\r\ntype DynamicInitialization = HTMLElement | boolean | null | undefined;\r\n\r\nexport type InitializationTargetElement = HTMLElement | HTMLTextAreaElement;\r\n\r\nexport type InitializationTargetObject = StructureInitialization & ScrollbarsInitialization;\r\n\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport type InitializationStrategy = StructureInitializationStrategy &\r\n ScrollbarsInitializationStrategy;\r\n\r\n/**\r\n * Static elements MUST be present.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type StaticInitializationElement =\r\n | ((...args: Args) => StaticInitialization)\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic element CAN be present.\r\n * If its a element the element will be handled as the repsective element.\r\n * True means that the respective dynamic element is forced to be generated.\r\n * False means that the respective dynamic element is forced NOT to be generated.\r\n * Null or undefined behave like if this element wasn't specified during initialization.\r\n */\r\nexport type DynamicInitializationElement =\r\n | ((...args: Args) => DynamicInitialization)\r\n | DynamicInitialization;\r\n\r\nexport type InitializtationElementStrategy = Exclude;\r\n\r\nexport type DefaultInitializtationElementStrategy<\r\n InitElm extends StaticInitializationElement | DynamicInitializationElement\r\n> = Extract any> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nconst resolveInitialization = (value: any, args: any): T =>\r\n isFunction(value) ? value.apply(0, args) : value;\r\n\r\nconst staticInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultStaticInitializationElement: DefaultInitializtationElementStrategy,\r\n staticInitializationElementStrategy?: InitializtationElementStrategy,\r\n staticInitializationElementValue?: T | false\r\n): HTMLElement =>\r\n resolveInitialization(\r\n staticInitializationElementValue ||\r\n resolveInitialization(staticInitializationElementStrategy, args),\r\n args\r\n ) || defaultStaticInitializationElement.apply(0, args);\r\n\r\nconst dynamicInitializationElement = >(\r\n args: Parameters any>>,\r\n defaultDynamicInitializationElement: DefaultInitializtationElementStrategy,\r\n dynamicInitializationElementStrategy?: InitializtationElementStrategy,\r\n dynamicInitializationElementValue?: T | false\r\n): HTMLElement | false => {\r\n let result = resolveInitialization(\r\n dynamicInitializationElementValue,\r\n args\r\n );\r\n\r\n if (isNull(result) || isUndefined(result)) {\r\n result = resolveInitialization(\r\n dynamicInitializationElementStrategy,\r\n args\r\n );\r\n }\r\n\r\n return result === true || isNull(result) || isUndefined(result)\r\n ? defaultDynamicInitializationElement.apply(0, args)\r\n : result;\r\n};\r\n\r\nexport { staticInitializationElement, dynamicInitializationElement };\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n addClass,\r\n parent,\r\n indexOf,\r\n removeElements,\r\n removeClass,\r\n hasClass,\r\n push,\r\n runEachAndClear,\r\n insertBefore,\r\n attr,\r\n keys,\r\n removeAttr,\r\n attrClass,\r\n hasAttrClass,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n classNamePadding,\r\n classNameViewport,\r\n classNameContent,\r\n classNameViewportScrollbarStyling,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type { ScrollbarsHidingPluginInstance } from 'plugins/scrollbarsHidingPlugin';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from 'initialization';\r\nimport type { InitializationTarget, InitializationTargetElement } from 'initialization';\r\nimport type {\r\n StructureDynamicInitializationElement,\r\n StructureInitialization,\r\n StructureStaticInitializationElement,\r\n} from 'setups/structureSetup/structureSetup.initialization';\r\n\r\nexport type StructureSetupElements = [\r\n targetObj: StructureSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _viewportArrange: HTMLStyleElement | false | null | undefined;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _htmlElm: HTMLHtmlElement;\r\n _bodyElm: HTMLBodyElement;\r\n _windowElm: Window;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _viewportHasClass: (className: string, attributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nconst createNewDiv = createDiv.bind(0, '');\r\n\r\nconst unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n};\r\n\r\nconst addDataAttrHost = (elm: HTMLElement, value: string) => {\r\n attr(elm, dataAttributeHost, value);\r\n return removeAttr.bind(0, elm, dataAttributeHost);\r\n};\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const { _getInitializationStrategy, _nativeScrollbarsHiding } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const createUniqueViewportArrangeElement =\r\n scrollbarsHidingPlugin && scrollbarsHidingPlugin._createUniqueViewportArrangeElement;\r\n const {\r\n _host: hostInitializationStrategy,\r\n _viewport: viewportInitializationStrategy,\r\n _padding: paddingInitializationStrategy,\r\n _content: contentInitializationStrategy,\r\n } = _getInitializationStrategy();\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = target as StructureInitialization;\r\n const targetElement = targetIsElm\r\n ? (target as InitializationTargetElement)\r\n : targetStructureInitialization.target;\r\n const isTextarea = is(targetElement, 'textarea');\r\n const isBody = !isTextarea && is(targetElement, 'body');\r\n const ownerDocument = targetElement!.ownerDocument;\r\n const bodyElm = ownerDocument.body as HTMLBodyElement;\r\n const wnd = ownerDocument.defaultView as Window;\r\n const singleElmSupport = !!ResizeObserverConstructor && !isTextarea && _nativeScrollbarsHiding;\r\n const staticInitializationElement =\r\n generalStaticInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const dynamicInitializationElement =\r\n generalDynamicInitializationElement.bind(0, [\r\n targetElement,\r\n ]);\r\n const viewportElement = [\r\n staticInitializationElement(\r\n createNewDiv,\r\n viewportInitializationStrategy,\r\n targetStructureInitialization.viewport\r\n ),\r\n staticInitializationElement(createNewDiv, viewportInitializationStrategy),\r\n staticInitializationElement(createNewDiv),\r\n ].filter((potentialViewport) =>\r\n !singleElmSupport ? potentialViewport !== targetElement : true\r\n )[0];\r\n const viewportIsTarget = viewportElement === targetElement;\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: isTextarea\r\n ? staticInitializationElement(\r\n createNewDiv,\r\n hostInitializationStrategy,\r\n targetStructureInitialization.host\r\n )\r\n : (targetElement as HTMLElement),\r\n _viewport: viewportElement,\r\n _padding:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n paddingInitializationStrategy,\r\n targetStructureInitialization.padding\r\n ),\r\n _content:\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(\r\n createNewDiv,\r\n contentInitializationStrategy,\r\n targetStructureInitialization.content\r\n ),\r\n _viewportArrange:\r\n !viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n createUniqueViewportArrangeElement &&\r\n createUniqueViewportArrangeElement(),\r\n _windowElm: wnd,\r\n _documentElm: ownerDocument,\r\n _htmlElm: parent(bodyElm) as HTMLHtmlElement,\r\n _bodyElm: bodyElm,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _viewportHasClass: (className: string, attributeClassName: string) =>\r\n viewportIsTarget\r\n ? hasAttrClass(viewportElement, dataAttributeHost, attributeClassName)\r\n : hasClass(viewportElement, className),\r\n _viewportAddRemoveClass: (className: string, attributeClassName: string, add?: boolean) =>\r\n viewportIsTarget\r\n ? attrClass(viewportElement, dataAttributeHost, attributeClassName, add)\r\n : (add ? addClass : removeClass)(viewportElement, className),\r\n };\r\n const generatedElements = keys(evaluatedTargetObj).reduce((arr, key: string) => {\r\n const value = evaluatedTargetObj[key];\r\n return push(arr, value && !parent(value) ? value : false);\r\n }, [] as HTMLElement[]);\r\n const elementIsGenerated = (elm: HTMLElement | false) =>\r\n elm ? indexOf(generatedElements, elm) > -1 : null;\r\n const { _target, _host, _padding, _viewport, _content, _viewportArrange } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n const targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elementIsGenerated(elm) === false\r\n )\r\n );\r\n const contentSlot = _content || _viewport;\r\n const appendElements = () => {\r\n const removeHostDataAttr = addDataAttrHost(_host, viewportIsTarget ? 'viewport' : 'host');\r\n const removePaddingClass = addClass(_padding, classNamePadding);\r\n const removeViewportClass = addClass(_viewport, !viewportIsTarget && classNameViewport);\r\n const removeContentClass = addClass(_content, classNameContent);\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, () => {\r\n removeHostDataAttr();\r\n removeAttr(_viewport, dataAttributeHostOverflowX);\r\n removeAttr(_viewport, dataAttributeHostOverflowY);\r\n\r\n if (elementIsGenerated(_content)) {\r\n unwrap(_content);\r\n }\r\n if (elementIsGenerated(_viewport)) {\r\n unwrap(_viewport);\r\n }\r\n if (elementIsGenerated(_padding)) {\r\n unwrap(_padding);\r\n }\r\n removePaddingClass();\r\n removeViewportClass();\r\n removeContentClass();\r\n });\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n push(destroyFns, removeClass.bind(0, _viewport, classNameViewportScrollbarStyling));\r\n }\r\n if (_viewportArrange) {\r\n insertBefore(_viewport, _viewportArrange);\r\n push(destroyFns, removeElements.bind(0, _viewportArrange));\r\n }\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, runEachAndClear.bind(0, destroyFns)];\r\n};\r\n","import { style } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const { _content } = structureSetupElements;\r\n const [getState] = state;\r\n\r\n return (updateHints) => {\r\n const { _flexboxGlue } = getEnvironment();\r\n const { _heightIntrinsic } = getState();\r\n const { _heightIntrinsicChanged } = updateHints;\r\n const heightIntrinsicChanged = (_content || !_flexboxGlue) && _heightIntrinsicChanged;\r\n\r\n if (heightIntrinsicChanged) {\r\n style(_content, {\r\n height: _heightIntrinsic ? '' : '100%',\r\n });\r\n }\r\n\r\n return {\r\n _sizeChanged: heightIntrinsicChanged,\r\n _contentMutation: heightIntrinsicChanged,\r\n };\r\n };\r\n};\r\n","import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';\r\nimport { StyleObject } from 'typings';\r\nimport { getEnvironment } from 'environment';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const { _host, _padding, _viewport, _viewportIsTarget: _isSingleElm } = structureSetupElements;\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n topRightBottomLeft.bind(0, _host, 'padding', '')\r\n );\r\n\r\n return (updateHints, checkOption, force) => {\r\n let [padding, paddingChanged] = currentPaddingCache(force);\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n const { _directionIsRTL } = getState();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = updateHints;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = checkOption('paddingAbsolute');\r\n const contentMutation = !_flexboxGlue && _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_isSingleElm && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarStyling);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n marginRight: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n marginBottom: paddingRelative ? -paddingVertical : 0,\r\n marginLeft: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n width: paddingRelative ? `calc(100% + ${paddingHorizontal}px)` : '',\r\n };\r\n const viewportStyle: StyleObject = {\r\n paddingTop: paddingRelative ? padding.t : 0,\r\n paddingRight: paddingRelative ? padding.r : 0,\r\n paddingBottom: paddingRelative ? padding.b : 0,\r\n paddingLeft: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n style(_padding || _viewport, paddingStyle);\r\n style(_viewport, viewportStyle);\r\n\r\n setState({\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n attr,\r\n WH,\r\n XY,\r\n style,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n addClass,\r\n removeClass,\r\n clientSize,\r\n equalXY,\r\n attrClass,\r\n noop,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameViewportScrollbarStyling,\r\n classNameOverflowVisible,\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostViewportScrollbarStyling,\r\n dataValueHostOverflowVisible,\r\n} from 'classnames';\r\nimport { getPlugins, scrollbarsHidingPluginName } from 'plugins';\r\nimport type {\r\n ScrollbarsHidingPluginInstance,\r\n ArrangeViewport,\r\n UndoArrangeViewport,\r\n} from 'plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from 'typings';\r\nimport type { OverflowBehavior } from 'options';\r\nimport type { CreateStructureUpdateSegment } from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport interface ViewportOverflowState {\r\n _scrollbarsHideOffset: XY;\r\n _scrollbarsHideOffsetArrange: XY;\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport type GetViewportOverflowState = (\r\n showNativeOverlaidScrollbars: boolean,\r\n viewportStyleObj?: StyleObject\r\n) => ViewportOverflowState;\r\n\r\nexport type HideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n directionIsRTL: boolean,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n) => void;\r\n\r\nconst { max } = Math;\r\nconst strVisible = 'visible';\r\nconst strHidden = 'hidden';\r\nconst overlaidScrollbarsHideOffset = 42;\r\nconst whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n};\r\nconst xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n};\r\n\r\nconst getOverflowAmount = (\r\n viewportScrollSize: WH,\r\n viewportClientSize: WH,\r\n sizeFraction: WH\r\n) => {\r\n const tollerance = window.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max(0, viewportScrollSize.w - viewportClientSize.w - max(0, sizeFraction.w)),\r\n h: max(0, viewportScrollSize.h - viewportClientSize.h - max(0, sizeFraction.h)),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n};\r\n\r\nconst conditionalClass = (\r\n elm: Element | false | null | undefined,\r\n classNames: string,\r\n add: boolean\r\n) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));\r\n\r\nconst overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdate: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n state\r\n) => {\r\n const [getState, setState] = state;\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportArrange,\r\n _viewportIsTarget,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsSize,\r\n _flexboxGlue,\r\n _nativeScrollbarsHiding,\r\n _nativeScrollbarsOverlaid,\r\n } = getEnvironment();\r\n const scrollbarsHidingPlugin = getPlugins()[scrollbarsHidingPluginName] as\r\n | ScrollbarsHidingPluginInstance\r\n | undefined;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n fractionalSize.bind(0, _viewport)\r\n );\r\n\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, scrollSize.bind(0, _viewport));\r\n\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n\r\n const [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 _viewport,\r\n _viewportArrange,\r\n getState,\r\n getViewportOverflowState,\r\n hideNativeScrollbars\r\n )\r\n : [(() => doViewportArrange) as ArrangeViewport, (() => [noop]) as UndoArrangeViewport];\r\n\r\n return (updateHints, checkOption, force) => {\r\n const {\r\n _sizeChanged,\r\n _hostMutation,\r\n _contentMutation,\r\n _paddingStyleChanged,\r\n _heightIntrinsicChanged,\r\n _directionChanged,\r\n } = updateHints;\r\n const { _heightIntrinsic, _directionIsRTL } = getState();\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n checkOption('nativeScrollbarsOverlaid.show');\r\n const [overflow, overflowChanged] = checkOption>('overflow');\r\n\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n const adjustFlexboxGlue =\r\n !_viewportIsTarget &&\r\n !_flexboxGlue &&\r\n (_sizeChanged ||\r\n _contentMutation ||\r\n _hostMutation ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n _heightIntrinsicChanged);\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(\r\n classNameViewportScrollbarStyling,\r\n dataValueHostViewportScrollbarStyling,\r\n !showNativeOverlaidScrollbars\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n preMeasureViewportOverflowState = getViewportOverflowState(showNativeOverlaidScrollbars);\r\n fixFlexboxGlue(preMeasureViewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n showNativeOverlaidScrollbarsChanged\r\n ) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = undoViewportArrange(\r\n showNativeOverlaidScrollbars,\r\n _directionIsRTL,\r\n preMeasureViewportOverflowState\r\n );\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(force));\r\n const viewportclientSize = clientSize(_viewport);\r\n let arrangedViewportScrollSize = viewportScrollSize;\r\n let arrangedViewportClientSize = viewportclientSize;\r\n\r\n redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n arrangeViewport(\r\n undoViewportArrangeOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n )\r\n ) {\r\n arrangedViewportClientSize = clientSize(_viewport);\r\n arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(\r\n {\r\n w: max(viewportScrollSize.w, arrangedViewportScrollSize.w),\r\n h: max(viewportScrollSize.h, arrangedViewportScrollSize.h),\r\n }, // scroll size\r\n {\r\n w: arrangedViewportClientSize.w + max(0, viewportclientSize.w - viewportScrollSize.w),\r\n h: arrangedViewportClientSize.h + max(0, viewportclientSize.h - viewportScrollSize.h),\r\n }, // client size\r\n sizeFraction\r\n ),\r\n force\r\n );\r\n }\r\n\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n\r\n if (\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustFlexboxGlue\r\n ) {\r\n const viewportStyle: StyleObject = {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n width: '',\r\n overflowY: '',\r\n overflowX: '',\r\n };\r\n const viewportOverflowState = setViewportOverflowState(\r\n showNativeOverlaidScrollbars,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n const viewportArranged = arrangeViewport(\r\n viewportOverflowState,\r\n viewportScrollSize,\r\n sizeFraction,\r\n _directionIsRTL\r\n );\r\n\r\n if (!_viewportIsTarget) {\r\n hideNativeScrollbars(\r\n viewportOverflowState,\r\n _directionIsRTL,\r\n viewportArranged,\r\n viewportStyle\r\n );\r\n }\r\n\r\n if (adjustFlexboxGlue) {\r\n fixFlexboxGlue(viewportOverflowState, _heightIntrinsic);\r\n }\r\n\r\n if (_viewportIsTarget) {\r\n attr(_host, dataAttributeHostOverflowX, viewportStyle.overflowX as string);\r\n attr(_host, dataAttributeHostOverflowY, viewportStyle.overflowY as string);\r\n } else {\r\n style(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n conditionalClass(_padding, classNameOverflowVisible, removeClipping);\r\n !_viewportIsTarget && conditionalClass(_viewport, classNameOverflowVisible, overflowVisible);\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(showNativeOverlaidScrollbars)._overflowStyle\r\n );\r\n\r\n setState({\r\n _overflowStyle: overflowStyle,\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n createTrinsicUpdate,\r\n createPaddingUpdate,\r\n createOverflowUpdate,\r\n} from 'setups/structureSetup/updateSegments';\r\nimport type { SetupState, SetupUpdateSegment, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n) => StructureSetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdateSegment = SetupUpdateSegment;\r\n\r\nexport type StructureSetupUpdate = (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n) => StructureSetupUpdateHints;\r\n\r\nexport interface StructureSetupUpdateHints {\r\n _sizeChanged: boolean;\r\n _directionChanged: boolean;\r\n _heightIntrinsicChanged: boolean;\r\n _overflowAmountChanged: boolean;\r\n _overflowStyleChanged: boolean;\r\n _paddingStyleChanged: boolean;\r\n _hostMutation: boolean;\r\n _contentMutation: boolean;\r\n}\r\n\r\nconst prepareUpdateHints = (\r\n leading: Required,\r\n adaptive?: Partial,\r\n force?: boolean\r\n): Required => {\r\n const result = {};\r\n const finalAdaptive = adaptive || {};\r\n const objKeys = keys(leading).concat(keys(finalAdaptive));\r\n\r\n each(objKeys, (key) => {\r\n const leadingValue = leading[key];\r\n const adaptiveValue = finalAdaptive[key];\r\n result[key] = !!(force || leadingValue || adaptiveValue);\r\n });\r\n\r\n return result as Required;\r\n};\r\n\r\nexport const createStructureSetupUpdate = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState\r\n): StructureSetupUpdate => {\r\n const { _viewport } = structureSetupElements;\r\n const {\r\n _nativeScrollbarsHiding: _nativeScrollbarStyling,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _flexboxGlue,\r\n } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarStyling && (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y);\r\n\r\n const updateSegments: StructureSetupUpdateSegment[] = [\r\n createTrinsicUpdate(structureSetupElements, state),\r\n createPaddingUpdate(structureSetupElements, state),\r\n createOverflowUpdate(structureSetupElements, state),\r\n ];\r\n\r\n return (\r\n checkOption: SetupUpdateCheckOption,\r\n updateHints: Partial,\r\n force?: boolean\r\n ) => {\r\n const initialUpdateHints = prepareUpdateHints(\r\n assignDeep(\r\n {\r\n _sizeChanged: false,\r\n _paddingStyleChanged: false,\r\n _directionChanged: false,\r\n _heightIntrinsicChanged: false,\r\n _overflowAmountChanged: false,\r\n _overflowStyleChanged: false,\r\n _hostMutation: false,\r\n _contentMutation: false,\r\n },\r\n updateHints\r\n ),\r\n {},\r\n force\r\n );\r\n const adjustScrollOffset = doViewportArrange || !_flexboxGlue;\r\n const scrollOffsetX = adjustScrollOffset && scrollLeft(_viewport);\r\n const scrollOffsetY = adjustScrollOffset && scrollTop(_viewport);\r\n\r\n let adaptivedUpdateHints: Required = initialUpdateHints;\r\n each(updateSegments, (updateSegment) => {\r\n adaptivedUpdateHints = prepareUpdateHints(\r\n adaptivedUpdateHints,\r\n updateSegment(adaptivedUpdateHints, checkOption, !!force) || {},\r\n force\r\n );\r\n });\r\n\r\n if (isNumber(scrollOffsetX)) {\r\n scrollLeft(_viewport, scrollOffsetX);\r\n }\r\n if (isNumber(scrollOffsetY)) {\r\n scrollTop(_viewport, scrollOffsetY);\r\n }\r\n\r\n return adaptivedUpdateHints;\r\n };\r\n};\r\n","import {\r\n Cache,\r\n CacheValues,\r\n createCache,\r\n createDOM,\r\n style,\r\n scrollLeft,\r\n scrollTop,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n on,\r\n stopAndPrevent,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n isArray,\r\n isBoolean,\r\n removeClass,\r\n isObject,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from 'classnames';\r\nimport { getPlugins, SizeObserverPluginInstance, sizeObserverPluginName } from 'plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n _direction?: boolean;\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type DestroySizeObserver = () => void;\r\n\r\nconst animationStartEventName = 'animationstart';\r\nconst scrollEventName = 'scroll';\r\nconst scrollAmount = 3333333;\r\nconst getElmDirectionIsRTL = (elm: HTMLElement): boolean => style(elm, 'direction') === 'rtl';\r\nconst domRectHasDimensions = (rect?: DOMRectReadOnly) => rect && (rect.height || rect.width);\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): DestroySizeObserver => {\r\n const { _direction: observeDirectionChange = false, _appear: observeAppearChange = false } =\r\n options || {};\r\n const sizeObserverPlugin = getPlugins()[sizeObserverPluginName] as\r\n | SizeObserverPluginInstance\r\n | undefined;\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const getIsDirectionRTL = getElmDirectionIsRTL.bind(0, sizeObserver);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: undefined,\r\n _alwaysUpdateValues: true,\r\n _equal: (currVal, newVal) =>\r\n !(\r\n !currVal || // if no initial value\r\n // if from display: none to display: block\r\n (!domRectHasDimensions(currVal) && domRectHasDimensions(newVal))\r\n ),\r\n });\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry[] | Event | boolean\r\n ) => {\r\n const isResizeObserverCall =\r\n isArray(sizeChangedContext) &&\r\n sizeChangedContext.length > 0 &&\r\n isObject(sizeChangedContext[0]);\r\n\r\n const hasDirectionCache =\r\n !isResizeObserverCall && isBoolean((sizeChangedContext as CacheValues)[0]);\r\n\r\n let skip = false;\r\n let appear: boolean | number | undefined = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n (sizeChangedContext as ResizeObserverEntry[]).pop()!.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const hadDimensions = domRectHasDimensions(prevContentRect);\r\n skip = !prevContentRect || !hasDimensions; // skip on initial RO. call or if display is none\r\n appear = !hadDimensions && hasDimensions;\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext as CacheValues; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)[0]\r\n : getElmDirectionIsRTL(sizeObserver);\r\n scrollLeft(\r\n sizeObserver,\r\n rtl\r\n ? rtlScrollBehavior.n\r\n ? -scrollAmount\r\n : rtlScrollBehavior.i\r\n ? 0\r\n : scrollAmount\r\n : scrollAmount\r\n );\r\n scrollTop(sizeObserver, scrollAmount);\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _sizeChanged: !hasDirectionCache,\r\n _directionIsRTLCache: hasDirectionCache\r\n ? (sizeChangedContext as CacheValues)\r\n : undefined,\r\n _appear: !!appear,\r\n });\r\n }\r\n };\r\n const offListeners: (() => void)[] = [];\r\n let appearCallback: ((...args: any) => any) | false = observeAppearChange\r\n ? onSizeChangedCallbackProxy\r\n : false;\r\n let directionIsRTLCache: Cache | undefined;\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor(onSizeChangedCallbackProxy);\r\n resizeObserverInstance.observe(listenerElement);\r\n push(offListeners, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginOffListeners] = sizeObserverPlugin._(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n appearCallback = pluginAppearCallback;\r\n push(offListeners, pluginOffListeners);\r\n }\r\n\r\n if (observeDirectionChange) {\r\n directionIsRTLCache = createCache(\r\n {\r\n _initialValue: !getIsDirectionRTL(), // invert current value to trigger initial change\r\n },\r\n getIsDirectionRTL\r\n );\r\n const [updateDirectionIsRTLCache] = directionIsRTLCache;\r\n\r\n push(\r\n offListeners,\r\n on(sizeObserver, scrollEventName, (event: Event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTL, directionIsRTLChanged] = directionIsRTLCacheValues;\r\n\r\n if (directionIsRTLChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n if (directionIsRTL) {\r\n addClass(listenerElement, 'rtl');\r\n } else {\r\n addClass(listenerElement, 'ltr');\r\n }\r\n onSizeChangedCallbackProxy(directionIsRTLCacheValues);\r\n }\r\n\r\n stopAndPrevent(event);\r\n })\r\n );\r\n }\r\n\r\n // appearCallback is always needed on scroll-observer strategy to reset it\r\n if (appearCallback) {\r\n addClass(sizeObserver, classNameSizeObserverAppear);\r\n push(\r\n offListeners,\r\n on(sizeObserver, animationStartEventName, appearCallback, {\r\n // Fire only once for \"CSS is ready\" event if ResizeObserver strategy is used\r\n _once: !!ResizeObserverConstructor,\r\n })\r\n );\r\n }\r\n\r\n prependChildren(target, sizeObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(sizeObserver);\r\n };\r\n};\r\n","import {\r\n WH,\r\n CacheValues,\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n prependChildren,\r\n removeElements,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n} from 'support';\r\nimport { createSizeObserver } from 'observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from 'classnames';\r\n\r\nexport type DestroyTrinsicObserver = () => void;\r\n\r\nconst isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: (heightIntrinsic: CacheValues) => any\r\n): DestroyTrinsicObserver => {\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const offListeners: (() => void)[] = [];\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue?: IntersectionObserverEntry | WH\r\n ) => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n\r\n if (heightIntrinsicChanged) {\r\n onTrinsicChangedCallback(heightIntrinsic);\r\n }\r\n }\r\n };\r\n\r\n if (IntersectionObserverConstructor) {\r\n const intersectionObserverInstance: IntersectionObserver = new IntersectionObserverConstructor(\r\n (entries: IntersectionObserverEntry[]) => {\r\n if (entries && entries.length > 0) {\r\n triggerOnTrinsicChangedCallback(entries.pop());\r\n }\r\n },\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(offListeners, () => {\r\n intersectionObserverInstance.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(offListeners, createSizeObserver(trinsicObserver, onSizeChanged));\r\n onSizeChanged();\r\n }\r\n\r\n prependChildren(target, trinsicObserver);\r\n\r\n return () => {\r\n runEachAndClear(offListeners);\r\n removeElements(trinsicObserver);\r\n };\r\n};\r\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n indexOf,\r\n isString,\r\n MutationObserverConstructor,\r\n isEmptyArray,\r\n on,\r\n attr,\r\n is,\r\n find,\r\n push,\r\n} from 'support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedTroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n _styleChangingAttributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ntype DOMTargetObserverOptions = DOMObserverOptionsBase;\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [destroy: () => void, update: () => void];\r\n\r\ntype EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: Element,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let map: WeakMap any]> | undefined; // weak map to prevent memory leak for detached elements\r\n let destroyed = false;\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements?) => {\r\n if (eventContentChange) {\r\n const eventElmList = eventContentChange.reduce>((arr, item) => {\r\n if (item) {\r\n const selector = item[0];\r\n const eventNames = item[1];\r\n const elements =\r\n eventNames &&\r\n selector &&\r\n (getElements ? getElements(selector) : find(selector, target));\r\n\r\n if (elements && elements.length && eventNames && isString(eventNames)) {\r\n push(arr, [elements, eventNames.trim()], true);\r\n }\r\n }\r\n return arr;\r\n }, []);\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entry = map!.get(elm);\r\n\r\n if (entry) {\r\n const entryEventNames = entry[0];\r\n const entryOff = entry[1];\r\n\r\n // in case an already registered element is registered again, unregister the previous events\r\n if (entryEventNames === eventNames) {\r\n entryOff();\r\n }\r\n }\r\n\r\n const off = on(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n off();\r\n map!.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map!.set(elm, [eventNames, off]);\r\n })\r\n );\r\n }\r\n };\r\n\r\n if (eventContentChange) {\r\n map = new WeakMap();\r\n updateElements();\r\n }\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debounce(\r\n () => {\r\n if (isConnected) {\r\n (callback as DOMContentObserverCallback)(true);\r\n }\r\n },\r\n { _timeout: 33, _maxDelay: 99 }\r\n ),\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = finalAttributes.concat(finalStyleChangingAttributes);\r\n const observerCallback = (mutations: MutationRecord[]) => {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const targetChangedAttrs: string[] = [];\r\n const totalAddedNodes: Node[] = [];\r\n let targetStyleChanged = false;\r\n let contentChanged = false;\r\n let childListChanged = false;\r\n each(mutations, (mutation) => {\r\n const { attributeName, target: mutationTarget, type, oldValue, addedNodes } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const attributeValue =\r\n isAttributesType && isString(attributeName)\r\n ? attr(mutationTarget as HTMLElement, attributeName!)\r\n : 0;\r\n const attributeChanged = attributeValue !== 0 && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n indexOf(finalStyleChangingAttributes, attributeName) > -1 && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && !targetIsMutationTarget) {\r\n const notOnlyAttrChanged = !isAttributesType;\r\n const contentAttrChanged = isAttributesType && styleChangingAttrChanged;\r\n const isNestedTarget =\r\n contentAttrChanged && _nestedTargetSelector && is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n : notOnlyAttrChanged || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n push(totalAddedNodes, addedNodes);\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName!);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n if (childListChanged && !isEmptyArray(totalAddedNodes)) {\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector) =>\r\n totalAddedNodes.reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n }\r\n\r\n if (isContentObserver) {\r\n contentChanged && (callback as DOMContentObserverCallback)(false);\r\n } else if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n (callback as DOMTargetObserverCallback)(targetChangedAttrs, targetStyleChanged);\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(observerCallback);\r\n\r\n // Connect\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return [\r\n () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n },\r\n () => {\r\n if (isConnected) {\r\n observerCallback(mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n debounce,\r\n isArray,\r\n isNumber,\r\n each,\r\n indexOf,\r\n isString,\r\n attr,\r\n removeAttr,\r\n CacheValues,\r\n keys,\r\n liesBetween,\r\n scrollSize,\r\n equalWH,\r\n createCache,\r\n WH,\r\n fractionalSize,\r\n isFunction,\r\n ResizeObserverConstructor,\r\n} from 'support';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n dataAttributeHost,\r\n dataValueHostOverflowVisible,\r\n classNameViewport,\r\n classNameOverflowVisible,\r\n} from 'classnames';\r\nimport { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';\r\nimport { createTrinsicObserver } from 'observers/trinsicObserver';\r\nimport { createDOMObserver, DOMObserver } from 'observers/domObserver';\r\nimport type { SetupState, SetupUpdateCheckOption } from 'setups';\r\nimport type { StructureSetupState } from 'setups/structureSetup';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n StructureSetupUpdate,\r\n StructureSetupUpdateHints,\r\n} from 'setups/structureSetup/structureSetup.update';\r\n\r\nexport type StructureSetupObserversUpdate = (checkOption: SetupUpdateCheckOption) => void;\r\n\r\nexport type StructureSetupObservers = [\r\n updateObserverOptions: StructureSetupObserversUpdate,\r\n destroy: () => void\r\n];\r\n\r\ntype ExcludeFromTuple = T extends [infer F, ...infer R]\r\n ? [F] extends [E]\r\n ? ExcludeFromTuple\r\n : [F, ...ExcludeFromTuple]\r\n : [];\r\n\r\nconst hostSelector = `[${dataAttributeHost}]`;\r\n\r\n// TODO: observer textarea attrs if textarea\r\n\r\nconst viewportSelector = `.${classNameViewport}`;\r\nconst viewportAttrsFromTarget = ['tabindex'];\r\nconst baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\nconst baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n\r\nexport const createStructureSetupObservers = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: SetupState,\r\n structureSetupUpdate: (\r\n ...args: ExcludeFromTuple, Parameters[0]>\r\n ) => any\r\n): StructureSetupObservers => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let contentMutationObserver: DOMObserver | undefined;\r\n const [, setState] = state;\r\n const {\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding: _nativeScrollbarStyling, _flexboxGlue } = getEnvironment();\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : baseStyleChangingAttrs.concat(baseStyleChangingAttrsTextarea);\r\n const structureSetupUpdateWithDebouncedAdaptiveUpdateHints = debounce(structureSetupUpdate, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n keys(prevObj)\r\n .concat(keys(currObj))\r\n .reduce((obj, key) => {\r\n obj[key] = prevObj[key] || currObj[key];\r\n return obj;\r\n }, {}),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (indexOf(viewportAttrsFromTarget, attribute) > -1) {\r\n const hostAttr = attr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n attr(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttr(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n const onTrinsicChanged = (heightIntrinsicCache: CacheValues) => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n setState({ _heightIntrinsic: heightIntrinsic });\r\n structureSetupUpdate({ _heightIntrinsicChanged: heightIntrinsicChanged });\r\n };\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const updateFn =\r\n !_sizeChanged || _appear\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n let directionChanged = false;\r\n if (_directionIsRTLCache) {\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache;\r\n directionChanged = directionIsRTLChanged;\r\n setState({ _directionIsRTL: directionIsRTL });\r\n }\r\n\r\n updateFn({ _sizeChanged, _directionChanged: directionChanged });\r\n };\r\n const onContentMutation = (contentChangedTroughEvent: boolean) => {\r\n const [, contentSizeChanged] = updateContentSizeCache();\r\n // if contentChangedTroughEvent is true its already debounced\r\n const updateFn = contentChangedTroughEvent\r\n ? structureSetupUpdate\r\n : structureSetupUpdateWithDebouncedAdaptiveUpdateHints;\r\n\r\n if (contentSizeChanged) {\r\n updateFn({\r\n _contentMutation: true,\r\n });\r\n }\r\n };\r\n const onHostMutation = (targetChangedAttrs: string[], targetStyleChanged: boolean) => {\r\n if (targetStyleChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints({\r\n _hostMutation: true,\r\n });\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n };\r\n\r\n const destroyTrinsicObserver =\r\n (_content || !_flexboxGlue) && createTrinsicObserver(_host, onTrinsicChanged);\r\n const destroySizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: !_nativeScrollbarStyling,\r\n });\r\n const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),\r\n });\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n new ResizeObserverConstructor!(onSizeChanged.bind(0, { _sizeChanged: true }));\r\n\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n updateViewportAttrsFromHost();\r\n\r\n return [\r\n (checkOption) => {\r\n const [ignoreMutation] = checkOption('updating.ignoreMutation');\r\n const [attributes, attributesChanged] = checkOption('updating.attributes');\r\n const [elementEvents, elementEventsChanged] = checkOption | null>(\r\n 'updating.elementEvents'\r\n );\r\n const [debounceValue, debounceChanged] = checkOption | number | null>(\r\n 'updating.debounce'\r\n );\r\n const updateContentMutationObserver = elementEventsChanged || attributesChanged;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (updateContentMutationObserver) {\r\n if (contentMutationObserver) {\r\n contentMutationObserver[1](); // update\r\n contentMutationObserver[0](); // destroy\r\n }\r\n contentMutationObserver = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),\r\n _attributes: contentMutationObserverAttr.concat(attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName\r\n ? liesBetween(target as Element, hostSelector, viewportSelector)\r\n : false;\r\n return ignore || !!ignoreMutationFromOptions(mutation);\r\n },\r\n }\r\n );\r\n }\r\n\r\n if (debounceChanged) {\r\n structureSetupUpdateWithDebouncedAdaptiveUpdateHints._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) ? timeout : false;\r\n debounceMaxDelay = isNumber(maxWait) ? maxWait : false;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n },\r\n () => {\r\n contentMutationObserver && contentMutationObserver[0](); // destroy\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroySizeObserver && destroySizeObserver();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroyHostMutationObserver();\r\n },\r\n ];\r\n};\r\n","import { createEventListenerHub } from 'support';\r\nimport { createState, createOptionCheck } from 'setups/setups';\r\nimport { createStructureSetupElements } from 'setups/structureSetup/structureSetup.elements';\r\nimport { createStructureSetupUpdate } from 'setups/structureSetup/structureSetup.update';\r\nimport { createStructureSetupObservers } from 'setups/structureSetup/structureSetup.observers';\r\nimport type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { TRBL, XY, EventListener } from 'support';\r\nimport type { Options, ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { PartialOptions, StyleObject, OverflowStyle } from 'typings';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface StructureSetupStaticState {\r\n _elements: StructureSetupElementsObj;\r\n _appendElements: () => void;\r\n _addOnUpdatedListener: (listener: EventListener) => void;\r\n}\r\n\r\ntype StructureSetupEventMap = {\r\n u: [\r\n updateHints: StructureSetupUpdateHints,\r\n changedOptions: PartialOptions,\r\n force: boolean\r\n ];\r\n};\r\n\r\nconst initialStructureSetupUpdateState: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n marginRight: 0,\r\n marginBottom: 0,\r\n marginLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n },\r\n _overflowAmount: {\r\n x: 0,\r\n y: 0,\r\n },\r\n _overflowStyle: {\r\n x: 'hidden',\r\n y: 'hidden',\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n _heightIntrinsic: false,\r\n _directionIsRTL: false,\r\n};\r\n\r\nexport const createStructureSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions\r\n): Setup => {\r\n const checkOptionsFallback = createOptionCheck(options, {});\r\n const state = createState(initialStructureSetupUpdateState);\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub();\r\n const [getState] = state;\r\n const [elements, appendElements, destroyElements] = createStructureSetupElements(target);\r\n const updateStructure = createStructureSetupUpdate(elements, state);\r\n const [updateObservers, destroyObservers] = createStructureSetupObservers(\r\n elements,\r\n state,\r\n (updateHints) => {\r\n triggerEvent('u', [updateStructure(checkOptionsFallback, updateHints), {}, false]);\r\n }\r\n );\r\n\r\n const structureSetupState = getState.bind(0) as (() => StructureSetupState) &\r\n StructureSetupStaticState;\r\n structureSetupState._addOnUpdatedListener = (listener) => {\r\n addEvent('u', listener);\r\n };\r\n structureSetupState._appendElements = appendElements;\r\n structureSetupState._elements = elements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n updateObservers(checkOption);\r\n triggerEvent('u', [updateStructure(checkOption, {}, force), changedOptions, !!force]);\r\n },\r\n structureSetupState,\r\n () => {\r\n removeEvent();\r\n destroyObservers();\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { appendChildren, createDiv, removeElements } from 'support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from 'classnames';\r\nimport { getEnvironment } from 'environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';\r\nimport type { InitializationTarget } from 'initialization';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type {\r\n ScrollbarsInitialization,\r\n ScrollbarsInitializationStrategy,\r\n ScrollbarsDynamicInitializationElement,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.initialization';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _horizontalScrollbarStructure: ScrollbarStructure;\r\n _verticalScrollbarStructure: ScrollbarStructure;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => void,\r\n destroy: () => void\r\n];\r\n\r\nconst generateScrollbarDOM = (scrollbarClassName: string): ScrollbarStructure => {\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n\r\n appendChildren(scrollbar, track);\r\n appendChildren(track, handle);\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n};\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj\r\n): ScrollbarsSetupElements => {\r\n const { _getInitializationStrategy } = getEnvironment();\r\n const { _scrollbarsSlot: environmentScrollbarSlot } =\r\n _getInitializationStrategy() as ScrollbarsInitializationStrategy;\r\n const { _target, _host, _viewport, _targetIsElm } = structureSetupElements;\r\n const initializationScrollbarSlot =\r\n !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;\r\n const evaluatedScrollbarSlot =\r\n generalDynamicInitializationElement(\r\n [_target, _host, _viewport],\r\n () => _host,\r\n environmentScrollbarSlot,\r\n initializationScrollbarSlot\r\n );\r\n\r\n const horizontalScrollbarStructure = generateScrollbarDOM(classNameScrollbarHorizontal);\r\n const verticalScrollbarStructure = generateScrollbarDOM(classNameScrollbarVertical);\r\n\r\n const { _scrollbar: horizontalScrollbar } = horizontalScrollbarStructure;\r\n const { _scrollbar: verticalScrollbar } = verticalScrollbarStructure;\r\n\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbar);\r\n };\r\n\r\n return [\r\n {\r\n _horizontalScrollbarStructure: horizontalScrollbarStructure,\r\n _verticalScrollbarStructure: verticalScrollbarStructure,\r\n },\r\n appendElements,\r\n removeElements.bind(0, [horizontalScrollbar, verticalScrollbar]),\r\n ];\r\n};\r\n","import { createState, createOptionCheck } from 'setups/setups';\r\nimport {\r\n createScrollbarsSetupElements,\r\n ScrollbarsSetupElementsObj,\r\n} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';\r\nimport type { ReadonlyOSOptions } from 'options';\r\nimport type { Setup } from 'setups';\r\nimport type { InitializationTarget } from 'initialization';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupStaticState {\r\n _elements: ScrollbarsSetupElementsObj;\r\n _appendElements: () => void;\r\n}\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOSOptions,\r\n structureSetupElements: StructureSetupElementsObj\r\n): Setup => {\r\n const state = createState({});\r\n const [getState] = state;\r\n\r\n const [elements, appendElements, destroyElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements\r\n );\r\n\r\n const scrollbarsSetupState = getState.bind(0) as (() => ScrollbarsSetupState) &\r\n ScrollbarsSetupStaticState;\r\n scrollbarsSetupState._elements = elements;\r\n scrollbarsSetupState._appendElements = appendElements;\r\n\r\n return [\r\n (changedOptions, force?) => {\r\n const checkOption = createOptionCheck(options, changedOptions, force);\r\n // eslint-disable-next-line no-console\r\n console.log(checkOption);\r\n },\r\n scrollbarsSetupState,\r\n () => {\r\n destroyElements();\r\n },\r\n ];\r\n};\r\n","import { OverlayScrollbars } from 'overlayscrollbars';\r\n\r\nconst targets: Set = new Set();\r\nconst targetInstanceMap: WeakMap = new WeakMap();\r\n\r\n/**\r\n * Adds the given OverlayScrollbars instance to the given element.\r\n * @param target The element which is the target of the OverlayScrollbars instance.\r\n * @param osInstance The OverlayScrollbars instance.\r\n */\r\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\r\n targetInstanceMap.set(target, osInstance);\r\n targets.add(target);\r\n};\r\n\r\n/**\r\n * Removes a OverlayScrollbars instance from the given element.\r\n * @param target The element from which its OverlayScrollbars instance shall be removed.\r\n */\r\nexport const removeInstance = (target: Element): void => {\r\n targetInstanceMap.delete(target);\r\n targets.delete(target);\r\n};\r\n\r\n/**\r\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\r\n * @param target The element of which its OverlayScrollbars instance shall be get.\r\n */\r\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\r\n targetInstanceMap.get(target);\r\n\r\n/**\r\n * Gets a Map which represents all active OverayScrollbars instances.\r\n * The Key is the element and the value is the instance.\r\n */\r\nexport const allInstances = (): ReadonlyMap => {\r\n const validTargetInstanceMap: Map = new Map();\r\n\r\n targets.forEach((target: Element) => {\r\n /* istanbul ignore else */\r\n if (targetInstanceMap.has(target)) {\r\n validTargetInstanceMap.set(target, targetInstanceMap.get(target)!);\r\n }\r\n });\r\n\r\n targets.clear();\r\n\r\n validTargetInstanceMap.forEach((instance: OverlayScrollbars, validTarget: Element) => {\r\n targets.add(validTarget);\r\n });\r\n\r\n return validTargetInstanceMap;\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n each,\r\n isFunction,\r\n keys,\r\n isHTMLElement,\r\n XY,\r\n TRBL,\r\n createEventListenerHub,\r\n} from 'support';\r\nimport { createStructureSetup, createScrollbarsSetup } from 'setups';\r\nimport { getOptionsDiff, Options, ReadonlyOSOptions } from 'options';\r\nimport { getEnvironment } from 'environment';\r\nimport {\r\n getPlugins,\r\n addPlugin,\r\n optionsValidationPluginName,\r\n Plugin,\r\n OptionsValidationPluginInstance,\r\n} from 'plugins';\r\nimport { addInstance, getInstance, removeInstance } from 'instances';\r\nimport type { PartialOptions, OverflowStyle } from 'typings';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetObject,\r\n InitializationStrategy,\r\n} from 'initialization';\r\nimport type {\r\n InitialEventListeners as GeneralInitialEventListeners,\r\n EventListener as GeneralEventListener,\r\n} from 'support/eventListeners';\r\n\r\nexport interface OverlayScrollbarsStatic {\r\n (\r\n target: InitializationTarget | InitializationTargetObject,\r\n options?: PartialOptions,\r\n eventListeners?: GeneralInitialEventListeners\r\n ): OverlayScrollbars;\r\n\r\n plugin(plugin: Plugin | Plugin[]): void;\r\n env(): Environment;\r\n}\r\n\r\nexport interface Environment {\r\n scrollbarsSize: XY;\r\n scrollbarsOverlaid: XY;\r\n scrollbarsHiding: boolean;\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n flexboxGlue: boolean;\r\n cssCustomProperties: boolean;\r\n defaultInitializationStrategy: InitializationStrategy;\r\n defaultDefaultOptions: Options;\r\n\r\n getInitializationStrategy(): InitializationStrategy;\r\n setInitializationStrategy(newInitializationStrategy: Partial): void;\r\n getDefaultOptions(): Options;\r\n setDefaultOptions(newDefaultOptions: PartialOptions): void;\r\n}\r\n\r\nexport interface State {\r\n padding: TRBL;\r\n paddingAbsolute: boolean;\r\n overflowAmount: XY;\r\n overflowStyle: XY;\r\n hasOverflow: XY;\r\n destroyed: boolean;\r\n}\r\n\r\nexport interface Elements {\r\n target: HTMLElement;\r\n host: HTMLElement;\r\n padding: HTMLElement;\r\n viewport: HTMLElement;\r\n content: HTMLElement;\r\n}\r\n\r\nexport interface OnUpdatedEventListenerArgs {\r\n updateHints: {\r\n sizeChanged: boolean;\r\n directionChanged: boolean;\r\n heightIntrinsicChanged: boolean;\r\n overflowAmountChanged: boolean;\r\n overflowStyleChanged: boolean;\r\n hostMutation: boolean;\r\n contentMutation: boolean;\r\n };\r\n changedOptions: PartialOptions;\r\n force: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n /**\r\n * Triggered after all elements are initialized and appended.\r\n */\r\n initialized: [instance: OverlayScrollbars];\r\n /**\r\n * Triggered after an update.\r\n */\r\n updated: [instance: OverlayScrollbars, onUpdatedArgs: OnUpdatedEventListenerArgs];\r\n /**\r\n * Triggered after all elements, observers and events are destroyed.\r\n */\r\n destroyed: [instance: OverlayScrollbars, withdrawn: boolean];\r\n};\r\n\r\nexport type InitialEventListeners = GeneralInitialEventListeners;\r\n\r\nexport type EventListener = GeneralEventListener<\r\n EventListenerMap,\r\n Name\r\n>;\r\n\r\nexport interface OverlayScrollbars {\r\n options(): Options;\r\n options(newOptions?: PartialOptions): Options;\r\n\r\n update(force?: boolean): OverlayScrollbars;\r\n\r\n destroy(): void;\r\n\r\n state(): State;\r\n\r\n elements(): Elements;\r\n\r\n on(name: Name, listener: EventListener): () => void;\r\n on(name: Name, listener: EventListener[]): () => void;\r\n\r\n off(name: Name, listener: EventListener): void;\r\n off(name: Name, listener: EventListener[]): void;\r\n}\r\n\r\n/**\r\n * Notes:\r\n * Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n */\r\n\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target,\r\n options?,\r\n eventListeners?\r\n): OverlayScrollbars => {\r\n let destroyed = false;\r\n const {\r\n _getDefaultOptions,\r\n _nativeScrollbarsOverlaid: _nativeScrollbarIsOverlaid,\r\n _addListener: addEnvListener,\r\n } = getEnvironment();\r\n const plugins = getPlugins();\r\n const instanceTarget = isHTMLElement(target) ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (potentialInstance) {\r\n return potentialInstance;\r\n }\r\n\r\n const optionsValidationPlugin = plugins[\r\n optionsValidationPluginName\r\n ] as OptionsValidationPluginInstance;\r\n const validateOptions = (newOptions?: PartialOptions) => {\r\n const opts = newOptions || {};\r\n const validate = optionsValidationPlugin && optionsValidationPlugin._;\r\n return validate ? validate(opts, true) : opts;\r\n };\r\n const currentOptions: ReadonlyOSOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);\r\n const [updateStructure, structureState, destroyStructure] = createStructureSetup(\r\n target,\r\n currentOptions\r\n );\r\n const [updateScrollbars, scrollbarsState, destroyScrollbars] = createScrollbarsSetup(\r\n target,\r\n currentOptions,\r\n structureState._elements\r\n );\r\n const update = (changedOptions: PartialOptions, force?: boolean) => {\r\n updateStructure(changedOptions, force);\r\n updateScrollbars(changedOptions, force);\r\n };\r\n const removeEnvListener = addEnvListener(update.bind(0, {}, true));\r\n const destroy = (withdrawn?: boolean) => {\r\n removeInstance(instanceTarget);\r\n removeEnvListener();\r\n\r\n destroyScrollbars();\r\n destroyStructure();\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line no-use-before-define\r\n triggerEvent('destroyed', [instance, !!withdrawn]);\r\n removeEvent();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions) {\r\n if (newOptions) {\r\n const changedOptions = getOptionsDiff(currentOptions, validateOptions(newOptions));\r\n\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n update(changedOptions);\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addEvent,\r\n off: (name, listener) => {\r\n name && listener && removeEvent(name, listener as any);\r\n },\r\n state() {\r\n const { _overflowAmount, _overflowStyle, _hasOverflow, _padding, _paddingAbsolute } =\r\n structureState();\r\n return assignDeep(\r\n {},\r\n {\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const { _target, _host, _padding, _viewport, _content } = structureState._elements;\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n }\r\n );\r\n },\r\n update(force?: boolean) {\r\n update({}, force);\r\n return instance;\r\n },\r\n destroy: destroy.bind(0),\r\n };\r\n\r\n each(keys(plugins), (pluginName) => {\r\n const pluginInstance = plugins[pluginName];\r\n if (isFunction(pluginInstance)) {\r\n pluginInstance(OverlayScrollbars, instance);\r\n }\r\n });\r\n\r\n if (\r\n _nativeScrollbarIsOverlaid.x &&\r\n _nativeScrollbarIsOverlaid.y &&\r\n !currentOptions.nativeScrollbarsOverlaid.initialize\r\n ) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n structureState._appendElements();\r\n scrollbarsState._appendElements();\r\n\r\n addInstance(instanceTarget, instance);\r\n triggerEvent('initialized', [instance]);\r\n\r\n structureState._addOnUpdatedListener((updateHints, changedOptions, force) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _overflowAmountChanged,\r\n _overflowStyleChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n } = updateHints;\r\n\r\n triggerEvent('updated', [\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: _sizeChanged,\r\n directionChanged: _directionChanged,\r\n heightIntrinsicChanged: _heightIntrinsicChanged,\r\n overflowAmountChanged: _overflowAmountChanged,\r\n overflowStyleChanged: _overflowStyleChanged,\r\n contentMutation: _contentMutation,\r\n hostMutation: _hostMutation,\r\n },\r\n changedOptions,\r\n force,\r\n },\r\n ]);\r\n });\r\n\r\n return instance.update(true);\r\n};\r\n\r\nOverlayScrollbars.plugin = addPlugin;\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _flexboxGlue,\r\n _cssCustomProperties,\r\n _defaultInitializationStrategy,\r\n _defaultDefaultOptions,\r\n _getInitializationStrategy,\r\n _setInitializationStrategy,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n flexboxGlue: _flexboxGlue,\r\n cssCustomProperties: _cssCustomProperties,\r\n defaultInitializationStrategy: _defaultInitializationStrategy,\r\n defaultDefaultOptions: _defaultDefaultOptions,\r\n\r\n getInitializationStrategy: _getInitializationStrategy,\r\n setInitializationStrategy: _setInitializationStrategy,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n"],"names":["each","source","callback","isArrayLike","i","length","Object","keys","key","style","elm","styles","getSingleStyle","isString","getStyles","isArray","getStylesResult","computedStyle","window","getComputedStyle","getCSSVal","reduce","result","setCSSVal","createCache","options","update","_initialValue","_equal","_alwaysUpdateValues","_value","_previous","cacheUpdateContextual","newValue","force","curr","newVal","changed","cacheUpdateIsolated","getCurrentCache","ElementNodeType","Node","ELEMENT_NODE","prototype","toString","hasOwnProperty","isUndefined","obj","undefined","isNull","type","call","replace","toLowerCase","isNumber","isBoolean","isFunction","Array","isObject","lengthCorrectFormat","isPlainObject","cstr","ctor","ctorProto","hasOwnConstructor","hasIsPrototypeOf","isHTMLElement","instanceofObj","HTMLElement","nodeType","isElement","Element","indexOf","arr","item","fromIndex","push","array","items","arrayIsSingleItem","apply","from","original","Set","forEach","value","isEmptyArray","runEachAndClear","args","keep","runFn","fn","prop","assignDeep","target","object1","object2","object3","object4","object5","object6","sources","copy","copyIsArray","src","clone","isEmptyObject","name","getSetProp","topLeft","fallback","attr","attrName","getAttribute","setAttribute","attrClass","add","currValues","currValuesSet","split","join","trim","hasAttrClass","has","removeAttr","removeAttribute","scrollLeft","scrollTop","elmPrototype","find","selector","rootElm","document","querySelectorAll","findFirst","querySelector","is","matches","msMatchesSelector","contents","childNodes","parent","parentElement","closest","closestFn","liesBetween","highBoundarySelector","deepBoundarySelector","closestHighBoundaryElm","closestDeepBoundaryElm","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","prependChildren","insertedNodes","insertAfter","removeElements","nodes","e","removeChild","createDiv","classNames","div","createElement","createDOM","html","createdDiv","innerHTML","firstLetterToUpper","str","charAt","toUpperCase","slice","getDummyStyle","cssPrefixes","jsPrefixes","jsCache","cssCache","cssProperty","uppercasedName","elmStyle","prefix","prefixWithoutDashes","resultPossibilities","resultPossibility","jsAPI","MutationObserverConstructor","IntersectionObserverConstructor","ResizeObserverConstructor","cAF","rAF","rnothtmlwhite","classListAction","className","action","clazz","classes","match","classList","hasClass","contains","removeClass","remove","addClass","bind","equal","a","b","props","propMutation","compareA","compareB","equalWH","equalXY","equalTRBL","equalBCRWH","round","Math","clearTimeouts","id","clearTimeout","noop","debounce","functionToDebounce","timeoutId","maxTimeoutId","prevArguments","latestArguments","_timeout","_maxDelay","_mergeParams","setT","setTimeout","invokeFunctionToDebounce","this","mergeParms","flush","debouncedFn","arguments","finalTimeout","hasTimeout","finalMaxWait","hasMaxWait","setTimeoutFn","mergeParamsResult","invokedArgs","boundInvoke","_flush","cssNumber","opacity","zindex","parseToZeroOrNumber","toFloat","num","parseFloat","parseInt","adaptCSSVal","val","getPropertyValue","setProperty","topRightBottomLeft","propertyPrefix","propertySuffix","finalPrefix","finalSuffix","top","right","bottom","left","t","r","l","zeroObj","w","h","windowSize","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","scrollSize","scrollWidth","scrollHeight","fractionalSize","cssHeight","cssWidth","getBoundingClientRect","passiveEventsSupport","supportPassiveEvents","addEventListener","defineProperty","get","splitEventNames","eventNames","off","listener","capture","eventName","removeEventListener","on","doSupportPassiveEvents","passive","_passive","_capture","once","_once","offListeners","nativeOptions","finalListener","evt","stopPropagation","preventDefault","stopAndPrevent","x","y","absoluteCoordinates","rect","pageYOffset","pageXOffset","manageListener","createEventListenerHub","initialEventListeners","events","Map","removeEvent","eventSet","currListener","clear","addEvent","set","triggerEvent","event","initialListenerKeys","getPropByPath","path","o","createOptionCheck","changedOptions","createState","initialState","state","newState","classNameEnvironment","classNameEnvironmentFlexboxGlue","classNameEnvironmentFlexboxGlueMax","dataAttributeHost","dataAttributeHostOverflowX","dataAttributeHostOverflowY","dataValueHostOverflowVisible","dataValueHostViewportScrollbarStyling","classNamePadding","classNameViewport","classNameViewportArrange","classNameContent","classNameViewportScrollbarStyling","classNameOverflowVisible","classNameSizeObserver","classNameSizeObserverAppear","classNameSizeObserverListener","classNameSizeObserverListenerScroll","classNameSizeObserverListenerItem","classNameSizeObserverListenerItemFinal","classNameTrinsicObserver","classNameScrollbar","classNameScrollbarHorizontal","classNameScrollbarVertical","classNameScrollbarTrack","classNameScrollbarHandle","opsStringify","JSON","stringify","_","Error","defaultOptions","paddingAbsolute","updating","elementEvents","attributes","ignoreMutation","overflow","nativeScrollbarsOverlaid","show","initialize","scrollbars","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","touch","getOptionsDiff","currOptions","newOptions","diff","optionsKeys","concat","optionKey","currOptionValue","newOptionValue","isDiff","environmentInstance","abs","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","getNativeScrollbarSize","body","measureElm","measureElmChild","cSize","oSize","fSize","getNativeScrollbarsHiding","testElm","revertClass","ex","getRtlScrollBehavior","childElm","strHidden","overflowX","overflowY","direction","parentOffset","childOffset","childOffsetAfterScroll","n","getFlexboxGlue","revertFbxGlue","minOffsetsizeParent","minOffsetsize","supportsMin","revertFbxGlueMax","maxOffsetsizeParent","maxOffsetsize","supportsMax","getWindowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","createEnvironment","_document","envDOM","envElm","envChildElm","_createEventListenerH","_createCache","updateNativeScrollbarSizeCache","getNativeScrollbarSizeCache","_getNativeScrollbarSi","nativeScrollbarsSize","nativeScrollbarsHiding","initializationStrategy","_padding","_content","defaultDefaultOptions","env","_nativeScrollbarsSize","_nativeScrollbarsOverlaid","_nativeScrollbarsHiding","_cssCustomProperties","_rtlScrollBehavior","_flexboxGlue","_addListener","_getInitializationStrategy","_setInitializationStrategy","newInitializationStrategy","_getDefaultOptions","_setDefaultOptions","newDefaultOptions","_defaultInitializationStrategy","_defaultDefaultOptions","size","dpr","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","scrollbarSize","_updateNativeScrollba","scrollbarSizeChanged","getEnvironment","pluginRegistry","getPlugins","addPlugin","addedPlugin","plugin","pluginName","_extends","module","assign","exports","__esModule","optionsTemplateTypes","boolean","number","string","object","function","null","validateRecursive","template","doWriteErrors","propPath","validatedOptions","optionsCopy","filter","optionsValue","templateValue","templateIsComplex","propPrefix","validated","_validateRecursive","foreign","isValid","errorEnumStrings","errorPossibleTypes","optionsValueType","templateValueArr","currTemplateType","typeString","isEnumString","enumStringSplit","possibility","console","warn","validateOptions","numberAllowedValues","oTypes","booleanAllowedValues","arrayNullValues","overflowAllowedValues","scrollbarsVisibilityAllowedValues","scrollbarsAutoHideAllowedValues","optionsTemplate","optionsValidationPluginName","optionsValidationPlugin","_validateOptions","_optionsValidationPlu","scrollAmount","scrollEventName","sizeObserverPluginName","sizeObserverPlugin","listenerElement","onSizeChangedCallback","observeAppearChange","observerElementChildren","observerElementChildrenRoot","shrinkElement","lastChild","expandElement","expandElementChild","cacheSize","currSize","isDirty","rAFId","reset","onResized","appear","onScroll","scrollEvent","width","height","_sizeObserverPlugin","contentArrangeCounter","scrollbarsHidingPluginName","scrollbarsHidingPlugin","_createUniqueViewportArrangeElement","_getEnvironment","_nativeScrollbarStyling","_nativeScrollbarIsOverlaid","create","_overflowUpdateSegment","doViewportArrange","viewport","viewportArrange","getState","getViewportOverflowState","hideNativeScrollbars","_getEnvironment2","arrangeViewport","viewportOverflowState","viewportScrollSize","sizeFraction","directionIsRTL","_getState","_viewportPaddingStyle","_scrollbarsHideOffset","_scrollbarsHideOffsetArrange","arrangeX","arrangeY","hideOffsetX","hideOffsetY","viewportArrangeHorizontalPaddingKey","viewportArrangeHorizontalPaddingValue","viewportArrangeVerticalPaddingValue","paddingTop","fractionalContentWidth","fractionalContenHeight","arrangeSize","sheet","cssRules","insertRule","ruleStyle","undoViewportArrange","showNativeOverlaidScrollbars","finalViewportOverflowState","_getState2","viewportPaddingStyle","finalPaddingStyle","assignProps","prevStyle","_scrollbarsHidingPlug","resolveInitialization","staticInitializationElement","defaultStaticInitializationElement","staticInitializationElementStrategy","staticInitializationElementValue","dynamicInitializationElement","defaultDynamicInitializationElement","dynamicInitializationElementStrategy","dynamicInitializationElementValue","createNewDiv","unwrap","addDataAttrHost","createStructureSetupElements","createUniqueViewportArrangeElement","_getInitializationStr","hostInitializationStrategy","_host","viewportInitializationStrategy","_viewport","paddingInitializationStrategy","contentInitializationStrategy","targetIsElm","targetStructureInitialization","targetElement","isTextarea","isBody","ownerDocument","bodyElm","wnd","defaultView","singleElmSupport","generalStaticInitializationElement","generalDynamicInitializationElement","viewportElement","potentialViewport","viewportIsTarget","evaluatedTargetObj","_target","host","padding","content","_viewportArrange","_windowElm","_documentElm","_htmlElm","_bodyElm","_isTextarea","_isBody","_targetIsElm","_viewportIsTarget","_viewportHasClass","attributeClassName","_viewportAddRemoveClass","generatedElements","elementIsGenerated","destroyFns","isTextareaHostGenerated","targetContents","contentSlot","appendElements","removeHostDataAttr","removePaddingClass","removeViewportClass","removeContentClass","createTrinsicUpdate","structureSetupElements","updateHints","_heightIntrinsic","_heightIntrinsicChanged","heightIntrinsicChanged","_sizeChanged","_contentMutation","createPaddingUpdate","setState","_isSingleElm","updatePaddingCache","currentPaddingCache","checkOption","_currentPaddingCache","paddingChanged","_directionIsRTL","_directionChanged","_checkOption","paddingAbsoluteChanged","contentMutation","_updatePaddingCache","paddingStyleChanged","paddingRelative","paddingHorizontal","paddingVertical","paddingStyle","marginRight","marginBottom","marginLeft","viewportStyle","paddingRight","paddingBottom","paddingLeft","_paddingAbsolute","_paddingStyleChanged","max","strVisible","overlaidScrollbarsHideOffset","whCacheOptions","xyCacheOptions","getOverflowAmount","viewportClientSize","tollerance","amount","conditionalClass","overflowIsVisible","overflowBehavior","createOverflowUpdate","updateSizeFraction","getCurrentSizeFraction","_createCache2","updateViewportScrollSizeCache","getCurrentViewportScrollSizeCache","updateOverflowAmountCache","_createCache3","getCurrentOverflowAmountCache","updateOverflowStyleCache","_createCache4","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","_ref","_hostMutation","_getState3","showNativeOverlaidScrollbarsOption","showNativeOverlaidScrollbarsChanged","_checkOption2","overflowChanged","adjustFlexboxGlue","overflowXVisible","overflowYVisible","sizeFractionCache","viewportScrollSizeCache","overflowAmuntCache","preMeasureViewportOverflowState","_undoViewportArrange","redoViewportArrange","undoViewportArrangeOverflowState","_sizeFractionCache","sizeFractionChanged","_viewportScrollSizeCa","viewportScrollSizeChanged","viewportclientSize","arrangedViewportScrollSize","arrangedViewportClientSize","_overflowAmuntCache","overflowAmount","overflowAmountChanged","_viewportScrollSizeCa2","_sizeFractionCache2","removeClipping","viewportArranged","_updateOverflowStyleC","overflowStyleChanged","_overflowAmount","_hasOverflow","_overflowStyleChanged","_overflowAmountChanged","prepareUpdateHints","leading","adaptive","finalAdaptive","objKeys","leadingValue","adaptiveValue","createStructureSetupUpdate","updateSegments","initialUpdateHints","adjustScrollOffset","scrollOffsetX","scrollOffsetY","adaptivedUpdateHints","updateSegment","animationStartEventName","getElmDirectionIsRTL","domRectHasDimensions","createSizeObserver","_ref$_direction","_direction","observeDirectionChange","_ref$_appear","_appear","rtlScrollBehavior","baseElements","sizeObserver","getIsDirectionRTL","currVal","updateResizeObserverContentRectCache","onSizeChangedCallbackProxy","sizeChangedContext","isResizeObserverCall","hasDirectionCache","skip","doDirectionScroll","_updateResizeObserver","pop","contentRect","currRContentRect","prevContentRect","hasDimensions","hadDimensions","rtl","_directionIsRTLCache","appearCallback","directionIsRTLCache","resizeObserverInstance","observe","disconnect","pluginAppearCallback","_sizeObserverPlugin$_","pluginOffListeners","updateDirectionIsRTLCache","directionIsRTLCacheValues","directionIsRTLChanged","isHeightIntrinsic","ioEntryOrSize","isIntersecting","intersectionRatio","createTrinsicObserver","onTrinsicChangedCallback","trinsicObserver","updateHeightIntrinsicCache","triggerOnTrinsicChangedCallback","updateValue","intersectionObserverInstance","entries","root","onSizeChanged","newSize","createEventContentChange","eventContentChange","map","destroyed","destroy","updateElements","getElements","eventElmList","elements","entry","entryEventNames","entryOff","delete","WeakMap","createDOMObserver","isContentObserver","isConnected","_attributes","_styleChangingAttributes","_eventContentChange","_nestedTargetSelector","_ignoreTargetChange","_ignoreContentChange","_createEventContentCh","destroyEventContentChange","updateEventContentChangeElements","finalAttributes","finalStyleChangingAttributes","observedAttributes","observerCallback","mutations","ignoreTargetChange","ignoreContentChange","targetChangedAttrs","totalAddedNodes","targetStyleChanged","contentChanged","childListChanged","mutation","attributeName","mutationTarget","oldValue","addedNodes","isAttributesType","isChildListType","targetIsMutationTarget","attributeValue","attributeChanged","styleChangingAttrChanged","notOnlyAttrChanged","contentAttrChanged","isNestedTarget","baseAssertion","contentFinalChanged","mutationObserver","attributeOldValue","attributeFilter","subtree","childList","characterData","takeRecords","hostSelector","viewportSelector","viewportAttrsFromTarget","baseStyleChangingAttrsTextarea","baseStyleChangingAttrs","createStructureSetupObservers","structureSetupUpdate","debounceTimeout","debounceMaxDelay","contentMutationObserver","contentScroll","viewportScroll","fractional","updateContentSizeCache","contentMutationObserverAttr","structureSetupUpdateWithDebouncedAdaptiveUpdateHints","prev","prevObj","currObj","updateViewportAttrsFromHost","attribute","hostAttr","onTrinsicChanged","heightIntrinsicCache","updateFn","directionChanged","onContentMutation","contentChangedTroughEvent","_updateContentSizeCac","contentSizeChanged","onHostMutation","destroyTrinsicObserver","destroySizeObserver","_createDOMObserver","destroyHostMutationObserver","viewportIsTargetResizeObserver","attributesChanged","_checkOption3","elementEventsChanged","debounceValue","_checkOption4","debounceChanged","updateContentMutationObserver","ignoreMutationFromOptions","ignore","timeout","maxWait","initialStructureSetupUpdateState","createStructureSetup","checkOptionsFallback","_createStructureSetup","destroyElements","updateStructure","updateObservers","_createStructureSetup2","destroyObservers","structureSetupState","_addOnUpdatedListener","_appendElements","_elements","generateScrollbarDOM","scrollbarClassName","scrollbar","track","handle","_scrollbar","_track","_handle","createScrollbarsSetupElements","environmentScrollbarSlot","_scrollbarsSlot","initializationScrollbarSlot","scrollbarsSlot","evaluatedScrollbarSlot","horizontalScrollbarStructure","verticalScrollbarStructure","horizontalScrollbar","verticalScrollbar","_horizontalScrollbarStructure","_verticalScrollbarStructure","createScrollbarsSetup","_createScrollbarsSetu","scrollbarsSetupState","log","targets","targetInstanceMap","addInstance","osInstance","removeInstance","getInstance","OverlayScrollbars","eventListeners","addEnvListener","plugins","instanceTarget","potentialInstance","opts","validate","currentOptions","structureState","destroyStructure","updateScrollbars","scrollbarsState","destroyScrollbars","removeEnvListener","withdrawn","instance","_structureState","pluginInstance","sizeChanged","hostMutation","scrollbarsSize","scrollbarsOverlaid","scrollbarsHiding","flexboxGlue","cssCustomProperties","defaultInitializationStrategy","getInitializationStrategy","setInitializationStrategy","getDefaultOptions","setDefaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index b94c6d3..428ff2d 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars={})}(this,(function(n){"use strict";function t(n,t){var r,e=n.v,i=n.o,o=n.u,u=e,a=function(n,t){var e=u,a=n,c=t||(i?!i(e,a):e!==a);return(c||o)&&(u=a,r=e),[u,c,r]};return[t?function(n){return a(t(u,r),n)}:a,function(n){return[u,!!n,r]}]}function r(n){return void 0===n}function e(n){return null===n}function i(n){return"number"==typeof n}function o(n){return"string"==typeof n}function u(n){return"function"==typeof n}function a(n){return Array.isArray(n)}function c(n){return"object"==typeof n&&!a(n)&&!e(n)}function f(n){var t=!!n&&n.length,r=i(t)&&t>-1&&t%1==0;return!(!(a(n)||!u(n)&&r)||t>0&&c(n)&&!(t-1 in n))}function l(n){if(!n||!c(n)||"object"!==T(n))return!1;var t,e="constructor",i=n[e],o=i&&i.prototype,u=L.call(n,e),a=o&&L.call(o,"isPrototypeOf");if(i&&!u&&!a)return!1;for(t in n);return r(t)||L.call(n,t)}function d(n){var t=window.HTMLElement;return!!n&&(t?n instanceof t:n.nodeType===S)}function s(n){var t=window.Element;return!!n&&(t?n instanceof t:n.nodeType===S)}function v(n,t){if(f(n))for(var r=0;r0;e=a[i++];)u=!!r(n.classList,e)&&u}return u},sn=function(n,t){return dn(n,t,(function(n,t){return n.contains(t)}))},vn=function(n,t){dn(n,t,(function(n,t){return n.remove(t)}))},pn=function(n,t){return dn(n,t,(function(n,t){return n.add(t)})),vn.bind(0,n,t)},hn=function(n,t,r,e){if(n&&t){var i=!0;return v(r,(function(r){(e?e(n[r]):n[r])!==(e?e(t[r]):t[r])&&(i=!1)})),i}return!1},gn=function(n,t){return hn(n,t,["w","h"])},wn=function(n,t){return hn(n,t,["x","y"])},bn=function(n,t){return hn(n,t,["t","r","b","l"])},yn=function(n,t,r){return hn(n,t,["width","height"],r&&function(n){return Math.round(n)})},mn=function(n){n&&window.clearTimeout(n),n&&cn(n)},xn=function(){},_n=function(n,t){var r,e,o,a,c=t||{},f=c.p,l=c._,d=c.m,s=window.setTimeout,v=function(t){mn(r),mn(e),e=r=o=void 0,n.apply(this,t)},p=function(n){return d&&o?d(o,n):n},h=function(){r&&v(p(a)||a)},g=function(){var n=C(arguments),t=u(f)?f():f,c=i(t)&&t>=0;if(c){var d=u(l)?l():l,g=i(d)&&d>=0,w=t>0?s:fn,b=p(n),y=b||n,m=v.bind(0,y);mn(r),r=w(m,t),g&&!e&&(e=s(h,d)),o=a=y}else v(n)};return g.S=h,g},Sn={opacity:1,zindex:1},On=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return Number.isNaN(r)?0:r},Pn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},Ln=function(n,t,e){try{if(n){var o=n.style;r(o[t])?o.setProperty(t,e):o[t]=function(n,t){return!Sn[n.toLowerCase()]&&i(t)?t+"px":t}(t,e)}}catch(L){}},Tn=function(n,t,r){var e=t?t+"-":"",i=r?"-"+r:"",o=e+"top"+i,u=e+"right"+i,a=e+"bottom"+i,c=e+"left"+i,f=m(n,[o,u,a,c]);return{t:On(f[o]),r:On(f[u]),b:On(f[a]),l:On(f[c])}},En={w:0,h:0},jn=function(){return{w:window.innerWidth,h:window.innerHeight}},Cn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:En},Rn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:En},Dn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:En},Mn=function(n){var t=parseFloat(m(n,"height"))||0,r=parseFloat(m(n,"height"))||0;return{w:r-Math.round(r),h:t-Math.round(t)}},zn=function(n){return n.getBoundingClientRect()},An=function(n){return n.split(" ")},Hn=function(n,t,r,e){v(An(t),(function(t){n.removeEventListener(t,r,e)}))},Bn=function(n,t,e,i){var o=function(){if(r(x)){x=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){x=!0}}))}catch(n){}}return x}(),u=o&&i&&i.C||!1,a=i&&i.O||!1,c=i&&i.A||!1,f=[],l=o?{passive:u,capture:a}:a;return v(An(t),(function(t){var r=c?function(i){n.removeEventListener(t,r,a),e&&e(i)}:e;j(f,Hn.bind(null,n,t,r,a)),n.addEventListener(t,r,l)})),D.bind(0,f)},Nn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},Vn={x:0,y:0},Yn=function(n){var t=n?zn(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:Vn},In=function(n,t){v(a(t)?t:[t],n)},kn=function(n){function t(n,t){if(n){var r=e.get(n);In((function(n){r&&r[n?"delete":"clear"](n)}),t)}else e.forEach((function(n){n.clear()})),e.clear()}function r(n,r){var i=e.get(n)||new Set;return e.set(n,i),In((function(n){n&&i.add(n)}),r),t.bind(0,n,r)}var e=new Map;return v(z(n),(function(t){r(t,n[t])})),[r,t,function(n,t){var r=e.get(n);v(C(r),(function(n){t&&!R(t)?n.apply(0,t):n()}))}]},Xn=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&M(n,t)?n[t]:void 0}),n):void 0},Fn=function(n,t,r){return function(e){return[Xn(n,e),r||void 0!==Xn(t,e)]}},Kn=function(n){var t=n;return[function(){return t},function(n){t=p({},t,n)}]},Wn="os-environment",Jn=Wn+"-flexbox-glue",qn=Jn+"-max",Un="data-overlayscrollbars",Gn=Un+"-overflow-x",$n=Un+"-overflow-y",Zn="overflowVisible",Qn="viewportStyled",nt="os-padding",tt="os-viewport",rt=tt+"-arrange",et="os-content",it=tt+"-scrollbar-styled",ot="os-overflow-visible",ut="os-size-observer",at=ut+"-appear",ct=ut+"-listener",ft=ct+"-scroll",lt=ct+"-item",dt=lt+"-final",st="os-trinsic-observer",vt="os-scrollbar",pt=vt+"-horizontal",ht=vt+"-vertical",gt="os-scrollbar-track",wt="os-scrollbar-handle",bt=function(n){return JSON.stringify(n,(function(n,t){if(u(t))throw new Error;return t}))},yt={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},mt=function n(t,r){var e={};return v(z(r).concat(z(t)),(function(i){var o=t[i],u=r[i];if(c(o)&&c(u))p(e[i]={},n(o,u));else if(M(r,i)&&u!==o){var f=!0;if(a(o)||a(u))try{bt(o)===bt(u)&&(f=!1)}catch(j){}f&&(e[i]=u)}})),e},xt=Math.abs,_t=Math.round,St=function(n,t,r){K(n,t);var e=Rn(t),i=Cn(t),o=Mn(r);return{x:i.h-e.h+o.h,y:i.w-e.w+o.w}},Ot=function(n,t){var r="hidden";m(n,{overflowX:r,overflowY:r,direction:"rtl"}),b(n,0);var e=Yn(n),i=Yn(t);b(n,-999);var o=Yn(t);return{i:e.x===i.x,n:i.x!==o.x}},Pt=function(n,t){var r=pn(n,Jn),e=zn(n),i=zn(t),o=yn(i,e,!0),u=pn(n,qn),a=zn(n),c=zn(t),f=yn(c,a,!0);return r(),u(),o&&f},Lt=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},Tt=function(){return _||(_=function(){var n=document.body,r=$('
')[0],e=r.firstChild,i=kn(),o=i[0],u=i[2],a=t({v:St(n,r,e),o:wn}),c=a[0],f=(0,a[1])()[0],l=function(n){var t=!1,e=pn(n,it);try{t="none"===m(n,function(n){var t=rn[n];if(M(rn,n))return t;var r=Z(n),e=G().style;return v(Q,(function(i){var o=i.replace(/-/g,""),u=[n,i+n,o+r,Z(o)+r];return!(t=u.find((function(n){return void 0!==e[n]})))})),rn[n]=t||""}("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return e(),t}(r),d={x:0===f.x,y:0===f.y},s={D:!l,L:!1},h=p({},yt),g={P:f,T:d,j:l,I:"-1"===m(r,"zIndex"),M:Ot(r,e),R:Pt(r,e),F:function(n){return o("_",n)},H:p.bind(0,{},s),N:function(n){p(s,n)},V:p.bind(0,{},h),U:function(n){p(h,n)},k:p({},s),B:p({},h)};if(H(r,"style"),U(r),!(l||d.x&&d.y)){var w=jn(),b=Lt();window.addEventListener("resize",(function(){var t=jn(),i={w:t.w-w.w,h:t.h-w.h};if(0!==i.w||0!==i.h){var o=xt(i.w),a=xt(i.h),f={w:xt(_t(t.w/(w.w/100))),h:xt(_t(t.h/(w.h/100)))},l=Lt(),d=o>2&&a>2,s=!function(n,t){var r=xt(n),e=xt(t);return!(r===e||r+1===e||r-1===e)}(f.w,f.h);if(d&&s&&l!==b&&b>0){var v=c(St(n,r,e)),h=v[0],g=v[1];p(_.P,h),U(r),g&&u("_")}w=t,b=l}}))}return g}()),_},Et={},jt=function(){return p({},Et)},Ct={exports:{}};!function(n){function t(){return n.exports=t=Object.assign?Object.assign.bind():function(n){for(var t=1;t0?"\r\nValid strings are: [ "+_.join(", ")+" ].":"")),delete f[d]}})),[c,f]},Bt=function(n,t,r){return Ht(n,t,r)},Nt=At.boolean,Vt=[At.array,At.null],Yt="hidden scroll visible visible-hidden",It={paddingAbsolute:Nt,updating:{elementEvents:Vt,attributes:Vt,debounce:[At.number,At.array,At.null],ignoreMutation:[At.function,At.null]},overflow:{x:Yt,y:Yt},scrollbars:{visibility:"visible hidden auto",autoHide:"never scroll leavemove",autoHideDelay:At.number,dragScroll:Nt,clickScroll:Nt,touch:Nt},nativeScrollbarsOverlaid:{show:Nt,initialize:Nt}},kt="__osOptionsValidationPlugin",Xt=((Rt={})[kt]={q:function(n,t){var r=Bt(It,n,t),e=r[0],i=r[1];return zt({},i,e)}},Rt),Ft=3333333,Kt="scroll",Wt="__osSizeObserverPlugin",Jt=((Dt={})[Wt]={q:function(n,t,r){var e=$('
');K(n,e),pn(n,ft);var i,o=e[0],u=o.lastChild,a=o.firstChild,c=null==a?void 0:a.firstChild,f=Cn(o),l=f,d=!1,s=function(){b(a,Ft),y(a,Ft),b(u,Ft),y(u,Ft)},v=function(n){i=0,d&&(f=l,t(!0===n))},p=function(n){l=Cn(o),d=!n||!gn(l,f),n?(Nn(n),d&&!i&&(cn(i),i=fn(v))):v(!1===n),s()},h=j([],[Bn(a,Kt,p),Bn(u,Kt,p)]);return m(c,{width:Ft,height:Ft}),s(),[r?p.bind(0,!1):s,h]}},Dt),qt=0,Ut="__osScrollbarsHidingPlugin",Gt=((Mt={})[Ut]={Y:function(){var n=Tt(),t=n.j,r=n.T,e=!(n.I||t||!r.x&&!r.y)&&document.createElement("style");return e&&(w(e,"id",rt+"-"+qt),qt++),e},W:function(n,t,r,e,i,o){var u=Tt().R;return[function(i,o,u,a){if(n){var c=e().G,f=i.X,l=i.$,d=l.x,s=l.y,v=f.x,p=f.y,h=c[a?"paddingRight":"paddingLeft"],g=c.paddingTop,b=o.w+u.w,y=o.h+u.h,x={w:p&&s?p+b-h+"px":"",h:v&&d?v+y-g+"px":""};if(r){var _=r.sheet;if(_){var S=_.cssRules;if(S){S.length||_.insertRule("#"+w(r,"id")+" + ."+rt+"::before {}",0);var O=S[0].style;O.width=x.w,O.height=x.h}}}else m(t,{"--os-vaw":x.w,"--os-vah":x.h})}return n},function(r,a,c){if(n){var f=c||i(r),l=e().G,d=f.$,s=d.x,p=d.y,h={},g=function(n){return v(n.split(" "),(function(n){h[n]=l[n]}))};s&&g("marginBottom paddingTop paddingBottom"),p&&g("marginLeft marginRight paddingLeft paddingRight");var w=m(t,z(h));return vn(t,rt),u||(h.height=""),m(t,h),[function(){o(f,a,n,w),m(t,w),pn(t,rt)},f]}return[xn]}]}},Mt),$t=function(n,t){return u(n)?n.apply(0,t):n},Zt=function(n,t,r,e){return $t(e||$t(r,n),n)||t.apply(0,n)},Qt=function(n,t,i,o){var u=$t(o,n);return(e(u)||r(u))&&(u=$t(i,n)),!0===u||e(u)||r(u)?t.apply(0,n):u},nr=G.bind(0,""),tr=function(n){K(I(n),Y(n)),U(n)},rr=function(n){var t=Tt(),r=t.H,e=t.j,i=jt()[Ut],o=i&&i.Y,u=r(),a=u.J,c=u.K,f=u.D,l=u.L,s=d(n),v=n,p=s?n:v.target,h=V(p,"textarea"),g=!h&&V(p,"body"),b=p.ownerDocument,y=b.body,m=b.defaultView,x=!!an&&!h&&e,_=Zt.bind(0,[p]),S=Qt.bind(0,[p]),O=[_(nr,c,v.viewport),_(nr,c),_(nr)].filter((function(n){return!!x||n!==p}))[0],P=O===p,L={Z:p,J:h?_(nr,a,v.host):p,K:O,D:!P&&S(nr,f,v.padding),L:!P&&S(nr,l,v.content),rr:!P&&!e&&o&&o(),er:m,ar:b,tr:I(y),nr:y,ir:h,vr:g,ur:s,sr:P,cr:function(n,t){return P?function(n,t,r){var e=w(n,t)||"";return new Set(e.split(" ")).has(r)}(O,Un,t):sn(O,n)},lr:function(n,t,r){return P?A(O,Un,t,r):(r?pn:vn)(O,n)}},T=z(L).reduce((function(n,t){var r=L[t];return j(n,!(!r||I(r))&&r)}),[]),C=function(n){return n?E(T,n)>-1:null},R=L.Z,M=L.J,B=L.D,N=L.K,k=L.L,X=L.rr,F=[],W=h&&C(M),G=h?R:Y([k,N,B,M,R].find((function(n){return!1===C(n)}))),$=k||N;return[L,function(){var n=function(n,t){return w(n,Un,t),H.bind(0,n,Un)}(M,P?"viewport":"host"),t=pn(B,nt),r=pn(N,!P&&tt),i=pn(k,et);W&&(q(R,M),j(F,(function(){q(M,R),U(M)}))),K($,G),K(M,B),K(B||M,!P&&N),K(N,k),j(F,(function(){n(),H(N,Gn),H(N,$n),C(k)&&tr(k),C(N)&&tr(N),C(B)&&tr(B),t(),r(),i()})),e&&!P&&j(F,vn.bind(0,N,it)),X&&(J(N,X),j(F,U.bind(0,X)))},D.bind(0,F)]},er=function(n,t){var r=n.L,e=t[0];return function(n){var t=Tt().R,i=e().dr,o=n.gr,u=(r||!t)&&o;return u&&m(r,{height:i?"":"100%"}),{pr:u,hr:u}}},ir=function(n,r){var e=r[0],i=r[1],o=n.J,u=n.D,a=n.K,c=n.sr,f=t({o:bn,v:Tn()},Tn.bind(0,o,"padding","")),l=f[0],d=f[1];return function(n,t,r){var o=d(r),f=o[0],s=o[1],v=Tt(),h=v.j,g=v.R,w=e()._r,b=n.pr,y=n.hr,x=n.br,_=t("paddingAbsolute"),S=_[0],O=_[1];if(b||s||!g&&y){var P=l(r);f=P[0],s=P[1]}var L=!c&&(O||x||s);if(L){var T=!S||!u&&!h,E=f.r+f.l,j=f.t+f.b,C={marginRight:T&&!w?-E:0,marginBottom:T?-j:0,marginLeft:T&&w?-E:0,top:T?-f.t:0,right:T?w?-f.r:"auto":0,left:T?w?"auto":-f.l:0,width:T?"calc(100% + "+E+"px)":""},R={paddingTop:T?f.t:0,paddingRight:T?f.r:0,paddingBottom:T?f.b:0,paddingLeft:T?f.l:0};m(u||a,C),m(a,R),i({D:f,wr:!T,G:u?R:p({},C,R)})}return{mr:L}}},or=Math.max,ur="visible",ar="hidden",cr=42,fr={o:gn,v:{w:0,h:0}},lr={o:wn,v:{x:ar,y:ar}},dr=function(n,t,r){return r?pn(n,t):vn(n,t)},sr=function(n){return 0===n.indexOf(ur)},vr=function(n,r){var e=r[0],i=r[1],o=n.J,u=n.D,a=n.K,c=n.rr,f=n.sr,l=n.lr,d=Tt(),s=d.P,v=d.R,p=d.j,h=d.T,g=jt()[Ut],b=!f&&!p&&(h.x||h.y),y=t(fr,Mn.bind(0,a)),x=y[0],_=y[1],S=t(fr,Dn.bind(0,a)),O=S[0],P=S[1],L=t(fr),T=L[0],E=L[1],j=t(lr)[0],C=function(n,t){if(m(a,{height:""}),t){var r=e(),i=r.wr,u=r.D,c=n.yr,f=n.X,l=Mn(o),d=Rn(o),s="content-box"===m(a,"boxSizing"),v=i||s?u.b+u.t:0,p=!(h.x&&s);m(a,{height:d.h+l.h+(c.x&&p?f.x:0)-v})}},R=function(n,t){var r=p||n?0:cr,e=function(n,e,i){var o=m(a,n),u="scroll"===(t?t[n]:o);return[o,u,u&&!p?e?r:i:0,e&&!!r]},i=e("overflowX",h.x,s.x),o=i[0],u=i[1],c=i[2],f=i[3],l=e("overflowY",h.y,s.y);return{Sr:{x:o,y:l[0]},yr:{x:u,y:l[1]},X:{x:c,y:l[2]},$:{x:f,y:l[3]}}},D=function(n,t,r,i){var o=n.X,u=n.$,a=u.x,c=u.y,f=o.x,l=o.y,d=e().G,s=t?"marginLeft":"marginRight",v=t?"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,r&&(i[v]=g+(c?l:0),i.paddingBottom=w+(a?f:0))},M=g?g.W(b,a,c,e,R,D):[function(){return b},function(){return[xn]}],z=M[0],H=M[1];return function(n,t,r){var c,d=n.pr,s=n.Cr,g=n.hr,b=n.mr,y=n.gr,S=n.br,L=e(),M=L.dr,B=L._r,N=t("nativeScrollbarsOverlaid.show"),V=N[0],Y=N[1],I=t("overflow"),k=I[0],X=I[1],F=V&&h.x&&h.y,K=!f&&!v&&(d||g||s||Y||y),W=sr(k.x),J=sr(k.y),q=W||J,U=_(r),G=P(r),$=E(r);if(Y&&p&&l(it,Qn,!F),K&&(c=R(F),C(c,M)),d||b||g||S||Y){q&&l(ot,Zn,!1);var Z=H(F,B,c),Q=Z[0],nn=Z[1],tn=U=x(r),rn=tn[0],en=tn[1],on=G=O(r),un=on[0],an=on[1],cn=Rn(a),fn=un,ln=cn;Q(),(an||en||Y)&&nn&&!F&&z(nn,un,rn,B)&&(ln=Rn(a),fn=Dn(a)),$=T(function(n,t,r){var e=window.devicePixelRatio%1!=0?1:0,i={w:or(0,n.w-t.w-or(0,r.w)),h:or(0,n.h-t.h-or(0,r.h))};return{w:i.w>e?i.w:0,h:i.h>e?i.h:0}}({w:or(un.w,fn.w),h:or(un.h,fn.h)},{w:ln.w+or(0,cn.w-un.w),h:ln.h+or(0,cn.h-un.h)},rn),r)}var dn=$,sn=dn[0],vn=dn[1],pn=G,hn=pn[0],gn=pn[1],wn=U,bn=wn[0],yn=wn[1],mn={x:sn.w>0,y:sn.h>0},xn=W&&J&&(mn.x||mn.y)||W&&mn.x&&!mn.y||J&&mn.y&&!mn.x;if(b||S||yn||gn||vn||X||Y||K){var _n={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Sn=function(n,t,r,e){var i=function(n,t){var r=sr(n),e=t&&r&&n.replace(ur+"-","")||"";return[t&&!r?n:"",sr(e)?"hidden":e]},o=i(r.x,t.x),u=o[0],a=o[1],c=i(r.y,t.y),f=c[0],l=c[1];return e.overflowX=a&&f?a:u,e.overflowY=l&&u?l:f,R(n,e)}(F,mn,k,_n),On=z(Sn,hn,bn,B);f||D(Sn,B,On,_n),K&&C(Sn,M),f?(w(o,Gn,_n.overflowX),w(o,$n,_n.overflowY)):m(a,_n)}A(o,Un,Zn,xn),dr(u,ot,xn),!f&&dr(a,ot,q);var Pn=j(R(F).Sr),Ln=Pn[0],Tn=Pn[1];return i({Sr:Ln,Or:{x:sn.w,y:sn.h},Ar:mn}),{Er:Tn,Dr:vn}}},pr=function(n,t,r){var e={},i=t||{};return v(z(n).concat(z(i)),(function(t){var o=n[t],u=i[t];e[t]=!!(r||o||u)})),e},hr="animationstart",gr="scroll",wr=3333333,br=function(n){return"rtl"===m(n,"direction")},yr=function(n){return n&&(n.height||n.width)},mr=function(n,r,e){var i=e||{},o=i.Lr,u=void 0!==o&&o,f=i.Pr,l=void 0!==f&&f,d=jt()[Wt],s=Tt().M,v=$('
')[0],p=v.firstChild,h=br.bind(0,v),g=t({v:void 0,u:!0,o:function(n,t){return!(!n||!yr(n)&&yr(t))}}),w=g[0],m=function(n){var t=a(n)&&n.length>0&&c(n[0]),e=!t&&function(n){return"boolean"==typeof n}(n[0]),i=!1,o=!1,f=!0;if(t){var l=w(n.pop().contentRect),d=l[0],p=l[2],h=yr(d);o=!yr(p)&&h,f=!(i=!p||!h)}else e?f=n[1]:o=!0===n;if(u&&f){var g=e?n[0]:br(v);b(v,g?s.n?-wr:s.i?0:wr:wr),y(v,wr)}i||r({pr:!e,Tr:e?n:void 0,Pr:!!o})},x=[],_=!!l&&m;if(an){var S=new an(m);S.observe(p),j(x,(function(){S.disconnect()}))}else if(d){var O=d.q(p,m,l),P=O[0],L=O[1];_=P,j(x,L)}if(u){var T=t({v:!h()},h)[0];j(x,Bn(v,gr,(function(n){var t=T(),r=t[0];t[1]&&(vn(p,"ltr rtl"),pn(p,r?"rtl":"ltr"),m(t)),Nn(n)})))}return _&&(pn(v,at),j(x,Bn(v,hr,_,{A:!!an}))),W(n,v),function(){D(x),U(v)}},xr=function(n,r){var e=G(st),i=[],o=t({v:!1})[0],u=function(n){if(n){var t=o(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));t[1]&&r(t)}};if(un){var a=new un((function(n){n&&n.length>0&&u(n.pop())}),{root:n});a.observe(e),j(i,(function(){a.disconnect()}))}else{var c=function(){var n=Cn(e);u(n)};j(i,mr(e,c)),c()}return W(n,e),function(){D(i),U(e)}},_r=function(n,t,r,e){var i=!1,u=e||{},a=u.zr,c=u.jr,f=u.Ir,l=u.Mr,d=u.Rr,s=u.Fr,p=function(n,t,r){var e,i=!1,u=function(u){if(r){var a=r.reduce((function(t,r){if(r){var e=r[0],i=r[1],a=i&&e&&(u?u(e):N(e,n));a&&a.length&&i&&o(i)&&j(t,[a,i.trim()],!0)}return t}),[]);v(a,(function(n){return v(n[0],(function(r){var o=n[1],u=e.get(r);if(u){var a=u[0],c=u[1];a===o&&c()}var f=Bn(r,o,(function(n){i?(f(),e.delete(r)):t(n)}));e.set(r,[o,f])}))}))}};return r&&(e=new WeakMap,u()),[function(){i=!0},u]}(n,_n((function(){i&&r(!0)}),{p:33,_:99}),f),h=p[0],g=p[1],b=c||[],y=(a||[]).concat(b),m=function(i){var u=d||xn,a=s||xn,c=[],f=[],p=!1,h=!1,y=!1;v(i,(function(r){var i=r.attributeName,d=r.target,s=r.type,v=r.oldValue,g=r.addedNodes,m="attributes"===s,x="childList"===s,_=n===d,S=m&&o(i)?w(d,i):0,O=0!==S&&v!==S,P=E(b,i)>-1&&O;if(t&&!_){var L=!m,T=m&&P,C=T&&l&&V(d,l),R=(C?!u(d,i,v,S):L||T)&&!a(r,!!C,n,e);j(f,g),h=h||R,y=y||x}!t&&_&&O&&!u(d,i,v,S)&&(j(c,i),p=p||P)})),y&&!R(f)&&g((function(n){return f.reduce((function(t,r){return j(t,N(n,r)),V(r,n)?j(t,r):t}),[])})),t?h&&r(!1):R(c)&&!p||r(c,p)},x=new on(m);return x.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:t,childList:t,characterData:t}),i=!0,[function(){i&&(h(),x.disconnect(),i=!1)},function(){i&&m(x.takeRecords())}]},Sr="["+Un+"]",Or="."+tt,Pr=["tabindex"],Lr=["wrap","cols","rows"],Tr=["id","class","style","open"],Er=function(n,r,e){var c,f,l,d=r[1],s=n.J,p=n.K,h=n.L,g=n.ir,b=n.sr,y=n.cr,m=n.lr,x=Tt(),_=x.j,S=x.R,O=t({o:gn,v:{w:0,h:0}},(function(){var n=y(ot,Zn);n&&m(ot,Zn);var t=Dn(h),r=Dn(p),e=Mn(p);return n&&m(ot,Zn,!0),{w:r.w+t.w+e.w,h:r.h+t.h+e.h}})),P=O[0],L=g?Lr:Tr.concat(Lr),T=_n(e,{p:function(){return c},_:function(){return f},m:function(n,t){var r=n[0],e=t[0];return[z(r).concat(z(e)).reduce((function(n,t){return n[t]=r[t]||e[t],n}),{})]}}),j=function(n){v(n||Pr,(function(n){if(E(Pr,n)>-1){var t=w(s,n);o(t)?w(p,n,t):H(p,n)}}))},C=function(n){var t=n.pr,r=n.Tr,i=n.Pr,o=!t||i?e:T,u=!1;if(r){var a=r[0];u=r[1],d({_r:a})}o({pr:t,br:u})},R=function(n){P()[1]&&(n?e:T)({hr:!0})},D=(h||!S)&&xr(s,(function(n){var t=n[0],r=n[1];d({dr:t}),e({gr:r})})),M=!b&&mr(s,C,{Pr:!0,Lr:!_}),A=_r(s,!1,(function(n,t){t?T({Cr:!0}):b||j(n)}),{jr:Tr,zr:Tr.concat(Pr)}),B=A[0],N=b&&new an(C.bind(0,{pr:!0}));return N&&N.observe(s),j(),[function(n){var t=n("updating.ignoreMutation")[0],r=n("updating.attributes"),e=r[0],o=r[1],d=n("updating.elementEvents"),s=d[0],v=d[1],g=n("updating.debounce"),w=g[0],b=g[1],y=function(n){return u(t)&&t(n)};if((v||o)&&(l&&(l[1](),l[0]()),l=_r(h||p,!0,R,{jr:L.concat(e||[]),zr:L.concat(e||[]),Ir:s,Mr:Sr,Fr:function(n,t){var r=n.target,e=n.attributeName;return!(t||!e)&&X(r,Sr,Or)||!!y(n)}})),b)if(T.S(),a(w)){var m=w[0],x=w[1];c=!!i(m)&&m,f=!!i(x)&&x}else i(w)?(c=w,f=!1):(c=!1,f=!1)},function(){l&&l[0](),D&&D(),M&&M(),N&&N.disconnect(),B()}]},jr={D:{t:0,r:0,b:0,l:0},wr:!1,G:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Or:{x:0,y:0},Sr:{x:"hidden",y:"hidden"},Ar:{x:!1,y:!1},dr:!1,_r:!1},Cr=function(n){var t=G(vt+" "+n),r=G(gt),e=G(wt);return K(t,r),K(r,e),{Ur:t,kr:r,Br:e}},Rr=function(n,t,r){var e=Kn({})[0],i=function(n,t){var r=(0,Tt().H)().qr,e=t.Z,i=t.J,o=t.K,u=!t.ur&&n.scrollbarsSlot,a=Qt([e,i,o],(function(){return i}),r,u),c=Cr(pt),f=Cr(ht),l=c.Ur,d=f.Ur;return[{Yr:c,Wr:f},function(){K(a,l),K(a,d)},U.bind(0,[l,d])]}(n,r),o=i[0],u=i[1],a=i[2],c=e.bind(0);return c.Vr=o,c.Nr=u,[function(n,r){var e=Fn(t,n,r);console.log(e)},c,function(){a()}]},Dr=new Set,Mr=new WeakMap,zr=function n(t,r,e){var o=!1,a=Tt(),c=a.V,f=a.T,l=a.F,s=jt(),g=d(t)?t:t.target,w=function(n){return Mr.get(n)}(g);if(w)return w;var m=s[kt],x=function(n){var t=n||{},r=m&&m.q;return r?r(t,!0):t},_=p({},c(),x(r)),S=kn(e),O=S[0],P=S[1],L=S[2],T=function(n,t){var r=Fn(t,{}),e=Kn(jr),o=kn(),u=o[0],a=o[1],c=o[2],f=e[0],l=rr(n),d=l[0],s=l[1],h=l[2],g=function(n,t){var r=n.K,e=Tt(),o=e.j,u=e.T,a=e.R,c=!o&&(u.x||u.y),f=[er(n,t),ir(n,t),vr(n,t)];return function(n,t,e){var o=pr(p({pr:!1,mr:!1,br:!1,gr:!1,Dr:!1,Er:!1,Cr:!1,hr:!1},t),{},e),u=c||!a,l=u&&b(r),d=u&&y(r),s=o;return v(f,(function(t){s=pr(s,t(s,n,!!e)||{},e)})),i(l)&&b(r,l),i(d)&&y(r,d),s}}(d,e),w=Er(d,e,(function(n){c("u",[g(r,n),{},!1])})),m=w[0],x=w[1],_=f.bind(0);return _.Hr=function(n){u("u",n)},_.Nr=s,_.Vr=d,[function(n,r){var e=Fn(t,n,r);m(e),c("u",[g(e,{},r),n,!!r])},_,function(){a(),x(),h()}]}(t,_),E=T[0],j=T[1],C=T[2],R=Rr(t,_,j.Vr),D=R[0],M=R[1],A=R[2],H=function(n,t){E(n,t),D(n,t)},B=l(H.bind(0,{},!0)),N=function(n){!function(n){Mr.delete(n),Dr.delete(n)}(g),B(),A(),C(),o=!0,L("destroyed",[V,!!n]),P()},V={options:function(n){if(n){var t=mt(_,x(n));h(t)||(p(_,t),H(t))}return p({},_)},on:O,off:function(n,t){n&&t&&P(n,t)},state:function(){var n=j();return p({},{overflowAmount:n.Or,overflowStyle:n.Sr,hasOverflow:n.Ar,padding:n.D,paddingAbsolute:n.wr,destroyed:o})},elements:function(){var n=j.Vr,t=n.Z,r=n.J,e=n.D,i=n.K;return p({},{target:t,host:r,padding:e||i,viewport:i,content:n.L||i})},update:function(n){return H({},n),V},destroy:N.bind(0)};return v(z(s),(function(t){var r=s[t];u(r)&&r(n,V)})),f.x&&f.y&&!_.nativeScrollbarsOverlaid.initialize?(N(!0),V):(j.Nr(),M.Nr(),function(n,t){Mr.set(n,t),Dr.add(n)}(g,V),L("initialized",[V]),j.Hr((function(n,t,r){var e=n.pr,i=n.br,o=n.gr,u=n.Dr,a=n.Er,c=n.hr,f=n.Cr;L("updated",[V,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowAmountChanged:u,overflowStyleChanged:a,contentMutation:c,hostMutation:f},changedOptions:t,force:r}])})),V.update(!0))};zr.plugin=function(n){return v(a(n)?n:[n],(function(n){v(z(n),(function(t){Et[t]=n[t]}))}))},zr.env=function(){var n=Tt();return p({},{scrollbarsSize:n.P,scrollbarsOverlaid:n.T,scrollbarsHiding:n.j,rtlScrollBehavior:n.M,flexboxGlue:n.R,cssCustomProperties:n.I,defaultInitializationStrategy:n.k,defaultDefaultOptions:n.B,getInitializationStrategy:n.H,setInitializationStrategy:n.N,getDefaultOptions:n.V,setDefaultOptions:n.U})},n.OverlayScrollbars=zr,n.optionsValidationPlugin=Xt,n.scrollbarsHidingPlugin=Gt,n.sizeObserverPlugin=Jt,Object.defineProperty(n,"g",{value:!0})})); \ No newline at end of file +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).OverlayScrollbars={})}(this,(function(n){"use strict";function t(n,r){if(b(n))for(var e=0;e-1&&t%1==0;return!(!(g(n)||!p(n)&&r)||t>0&&w(n)&&!(t-1 in n))},y=function(n){if(!n||!w(n)||"object"!==s(n))return!1;var t,r="constructor",e=n[r],i=e&&e.prototype,o=f.call(n,r),u=i&&f.call(i,"isPrototypeOf");if(e&&!o&&!u)return!1;for(t in n);return l(t)||f.call(n,t)},m=function(n){var t=window.HTMLElement;return!!n&&(t?n instanceof t:n.nodeType===u)},x=function(n){var t=window.Element;return!!n&&(t?n instanceof t:n.nodeType===u)},_=function(n,t,r){return n.indexOf(t,r)},P=function(n,t,r){return r||h(t)||!b(t)?n.push(t):Array.prototype.push.apply(n,t),n},O=function(n){var r=Array.from,e=[];return r&&n?r(n):(n instanceof Set?n.forEach((function(n){P(e,n)})):t(n,(function(n){P(e,n)})),e)},S=function(n){return!!n&&0===n.length},T=function(n,r,e){t(n,(function(n){return n&&n.apply(void 0,r||[])})),!e&&(n.length=0)},L=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},E=function(n){return n?Object.keys(n):[]},C=function n(r,e,i,o,u,a,c){var f=[e,i,o,u,a,c];return"object"==typeof r&&!d(r)||p(r)||(r={}),t(f,(function(e){t(E(e),(function(t){var i=e[t];if(r===i)return!0;var o=g(i);if(i&&(y(i)||o)){var u=r[t],a=u;o&&!g(u)?a=[]:o||y(u)||(a={}),r[t]=n(a,i)}else r[t]=i}))})),r},M=function(n){for(var t in n)return!1;return!0},j=function(n,t,r,e){if(l(e))return r?r[n]:t;r&&(r[n]=e)},z=function(n,t,r){if(l(r))return n?n.getAttribute(t):null;n&&n.setAttribute(t,r)},R=function(n,t,r,e){var i=z(n,t)||"",o=new Set(i.split(" "));o[e?"add":"delete"](r),z(n,t,O(o).join(" ").trim())},A=function(n,t,r){var e=z(n,t)||"";return new Set(e.split(" ")).has(r)},D=function(n,t){n&&n.removeAttribute(t)},B=function(n,t){return j("scrollLeft",0,n,t)},H=function(n,t){return j("scrollTop",0,n,t)},I=Element.prototype,k=function(n,t){var r=[],e=t?x(t)?t:null:document;return e?P(r,e.querySelectorAll(n)):r},V=function(n,t){return!!x(n)&&(I.matches||I.msMatchesSelector).call(n,t)},Y=function(n){return n?O(n.childNodes):[]},F=function(n){return n?n.parentElement:null},X=function(n,t){if(x(n)){var r=I.closest;if(r)return r.call(n,t);do{if(V(n,t))return n;n=F(n)}while(n)}return null},N=function(n,t,r){var e=n&&X(n,t),i=n&&function(n,t){var r=t?x(t)?t:null:document;return r?r.querySelector(n):null}(r,e);return!(!e||!i||e!==n&&i!==n&&X(X(n,r),t)===e)},K=function(n,r,e){if(e){var i,o=r;n&&(b(e)?(i=document.createDocumentFragment(),t(e,(function(n){n===o&&(o=n.previousSibling),i.appendChild(n)}))):i=e,r&&(o?o!==r&&(o=o.nextSibling):o=n.firstChild),n.insertBefore(i,o||null))}},W=function(n,t){K(n,null,t)},J=function(n,t){K(n,n&&n.firstChild,t)},q=function(n,t){K(F(n),n,t)},G=function(n,t){K(F(n),n&&n.nextSibling,t)},U=function n(r){if(b(r))t(O(r),(function(t){return n(t)}));else if(r){var e=F(r);e&&e.removeChild(r)}},$=function(n){var t=document.createElement("div");return n&&z(t,"class",n),t},Z=function(n){var r=$();return r.innerHTML=n.trim(),t(Y(r),(function(n){return U(n)}))},Q=function(n){return n.charAt(0).toUpperCase()+n.slice(1)},nn=["-webkit-","-moz-","-o-","-ms-"],tn=["WebKit","Moz","O","MS","webkit","moz","o","ms"],rn={},en={},on=function(n){var r=rn[n]||window[n];return L(rn,n)||(t(tn,(function(t){return!(r=r||window[t+Q(n)])})),rn[n]=r),r},un=on("MutationObserver"),an=on("IntersectionObserver"),cn=on("ResizeObserver"),fn=on("cancelAnimationFrame"),ln=on("requestAnimationFrame"),dn=/[^\x20\t\r\n\f]+/g,sn=function(n,t,r){var e,i=0,o=!1;if(n&&t&&h(t)){var u=t.match(dn)||[];for(o=u.length>0;e=u[i++];)o=!!r(n.classList,e)&&o}return o},vn=function(n,t){sn(n,t,(function(n,t){return n.remove(t)}))},hn=function(n,t){return sn(n,t,(function(n,t){return n.add(t)})),vn.bind(0,n,t)},pn=function(n,r,e,i){if(n&&r){var o=!0;return t(e,(function(t){(i?i(n[t]):n[t])!==(i?i(r[t]):r[t])&&(o=!1)})),o}return!1},gn=function(n,t){return pn(n,t,["w","h"])},wn=function(n,t){return pn(n,t,["x","y"])},bn=function(n,t){return pn(n,t,["t","r","b","l"])},yn=function(n,t,r){return pn(n,t,["width","height"],r&&function(n){return Math.round(n)})},mn=function(n){n&&window.clearTimeout(n),n&&fn(n)},xn=function(){},_n=function(n,t){var r,e,i,o,u=t||{},a=u.p,c=u._,f=u.m,l=window.setTimeout,d=function(t){mn(r),mn(e),e=r=i=void 0,n.apply(this,t)},s=function(n){return f&&i?f(i,n):n},h=function(){r&&d(s(o)||o)},g=function(){var n=O(arguments),t=p(a)?a():a,u=v(t)&&t>=0;if(u){var f=p(c)?c():c,g=v(f)&&f>=0,w=t>0?l:ln,b=s(n),y=b||n,m=d.bind(0,y);mn(r),r=w(m,t),g&&!e&&(e=l(h,f)),i=o=y}else d(n)};return g.S=h,g},Pn={opacity:1,zindex:1},On=function(n,t){var r=t?parseFloat(n):parseInt(n,10);return r==r?r:0},Sn=function(n,t,r){return null!=t?t[r]||t.getPropertyValue(r):n.style[r]},Tn=function(n,t,r){try{if(n){var e=n.style;l(e[t])?e.setProperty(t,r):e[t]=function(n,t){return!Pn[n.toLowerCase()]&&v(t)?t+"px":t}(t,r)}}catch(c){}},Ln=function(n,t,e){var i=t?t+"-":"",o=e?"-"+e:"",u=i+"top"+o,a=i+"right"+o,c=i+"bottom"+o,f=i+"left"+o,l=r(n,[u,a,c,f]);return{t:On(l[u]),r:On(l[a]),b:On(l[c]),l:On(l[f])}},En={w:0,h:0},Cn=function(){return{w:window.innerWidth,h:window.innerHeight}},Mn=function(n){return n?{w:n.offsetWidth,h:n.offsetHeight}:En},jn=function(n){return n?{w:n.clientWidth,h:n.clientHeight}:En},zn=function(n){return n?{w:n.scrollWidth,h:n.scrollHeight}:En},Rn=function(n){var t=parseFloat(r(n,"height"))||0,e=parseFloat(r(n,"height"))||0;return{w:e-Math.round(e),h:t-Math.round(t)}},An=function(n){return n.getBoundingClientRect()},Dn=function(){if(l(e)){e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(n){}}return e},Bn=function(n){return n.split(" ")},Hn=function(n,r,e,i){t(Bn(r),(function(t){n.removeEventListener(t,e,i)}))},In=function(n,r,e,i){var o=Dn(),u=o&&i&&i.C||!1,a=i&&i.O||!1,c=i&&i.A||!1,f=[],l=o?{passive:u,capture:a}:a;return t(Bn(r),(function(t){var r=c?function(i){n.removeEventListener(t,r,a),e&&e(i)}:e;P(f,Hn.bind(null,n,t,r,a)),n.addEventListener(t,r,l)})),T.bind(0,f)},kn=function(n){return function(n){return n.stopPropagation()}(n)||function(n){return n.preventDefault()}(n)},Vn={x:0,y:0},Yn=function(n){var t=n?An(n):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:Vn},Fn=function(n,r){t(g(r)?r:[r],n)},Xn=function(n){var r=new Map,e=function(n,t){if(n){var e=r.get(n);Fn((function(n){e&&e[n?"delete":"clear"](n)}),t)}else r.forEach((function(n){n.clear()})),r.clear()},i=function(n,t){var i=r.get(n)||new Set;return r.set(n,i),Fn((function(n){n&&i.add(n)}),t),e.bind(0,n,t)};return t(E(n),(function(t){i(t,n[t])})),[i,e,function(n,e){var i=r.get(n);t(O(i),(function(n){e&&!S(e)?n.apply(0,e):n()}))}]},Nn=function(n,t){return n?t.split(".").reduce((function(n,t){return n&&L(n,t)?n[t]:void 0}),n):void 0},Kn=function(n,t,r){return function(e){return[Nn(n,e),r||void 0!==Nn(t,e)]}},Wn=function(n){var t=n;return[function(){return t},function(n){t=C({},t,n)}]},Jn="os-environment",qn=Jn+"-flexbox-glue",Gn=qn+"-max",Un="data-overlayscrollbars",$n=Un+"-overflow-x",Zn=Un+"-overflow-y",Qn="overflowVisible",nt="viewportStyled",tt="os-padding",rt="os-viewport",et=rt+"-arrange",it="os-content",ot=rt+"-scrollbar-styled",ut="os-overflow-visible",at="os-size-observer",ct=at+"-appear",ft=at+"-listener",lt=ft+"-scroll",dt=ft+"-item",st=dt+"-final",vt="os-trinsic-observer",ht="os-scrollbar",pt=ht+"-horizontal",gt=ht+"-vertical",wt="os-scrollbar-track",bt="os-scrollbar-handle",yt=function(n){return JSON.stringify(n,(function(n,t){if(p(t))throw new Error;return t}))},mt={paddingAbsolute:!1,updating:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},nativeScrollbarsOverlaid:{show:!1,initialize:!1},scrollbars:{visibility:"auto",autoHide:"never",autoHideDelay:800,dragScroll:!0,clickScroll:!1,touch:!0}},xt=function n(r,e){var i={};return t(E(e).concat(E(r)),(function(t){var o=r[t],u=e[t];if(w(o)&&w(u))C(i[t]={},n(o,u));else if(L(e,t)&&u!==o){var a=!0;if(g(o)||g(u))try{yt(o)===yt(u)&&(a=!1)}catch(d){}a&&(i[t]=u)}})),i},_t=Math.abs,Pt=Math.round,Ot=function(n,t,r){W(n,t);var e=jn(t),i=Mn(t),o=Rn(r);return{x:i.h-e.h+o.h,y:i.w-e.w+o.w}},St=function(n,t){var e="hidden";r(n,{overflowX:e,overflowY:e,direction:"rtl"}),B(n,0);var i=Yn(n),o=Yn(t);B(n,-999);var u=Yn(t);return{i:i.x===o.x,n:o.x!==u.x}},Tt=function(n,t){var r=hn(n,qn),e=An(n),i=An(t),o=yn(i,e,!0),u=hn(n,Gn),a=An(n),c=An(t),f=yn(c,a,!0);return r(),u(),o&&f},Lt=function(){var n=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||n/t},Et=function(){return i||(i=function(){var n=document.body,e=Z('
')[0],u=e.firstChild,c=Xn(),f=c[0],l=c[2],d=o({o:Ot(n,e,u),u:wn}),s=d[0],v=(0,d[1])()[0],h=function(n){var e=!1,i=hn(n,ot);try{e="none"===r(n,function(n){var r=en[n];if(L(en,n))return r;var e=Q(n),i=$().style;return t(nn,(function(t){var o=t.replace(/-/g,""),u=[n,t+n,o+e,Q(o)+e];return!(r=u.find((function(n){return void 0!==i[n]})))})),en[n]=r||""}("scrollbar-width"))||"none"===window.getComputedStyle(n,"::-webkit-scrollbar").getPropertyValue("display")}catch(a){}return i(),e}(e),p={x:0===v.x,y:0===v.y},g={P:!h,T:!1},w=C({},mt),b={L:v,I:p,D:h,M:"-1"===r(e,"zIndex"),R:St(e,u),V:Tt(e,u),j:function(n){return f("_",n)},H:C.bind(0,{},g),B:function(n){C(g,n)},k:C.bind(0,{},w),F:function(n){C(w,n)},q:C({},g),U:C({},w)};if(D(e,"style"),U(e),!(h||p.x&&p.y)){var y=Cn(),m=Lt();window.addEventListener("resize",(function(){var t=Cn(),r={w:t.w-y.w,h:t.h-y.h};if(0!==r.w||0!==r.h){var o=_t(r.w),a=_t(r.h),c={w:_t(Pt(t.w/(y.w/100))),h:_t(Pt(t.h/(y.h/100)))},f=Lt(),d=o>2&&a>2,v=!function(n,t){var r=_t(n),e=_t(t);return!(r===e||r+1===e||r-1===e)}(c.w,c.h);if(d&&v&&f!==m&&m>0){var h=s(Ot(n,e,u)),p=h[0],g=h[1];C(i.L,p),U(e),g&&l("_")}y=t,m=f}}))}return b}()),i},Ct={},Mt=function(){return C({},Ct)},jt={exports:{}};!function(n){function t(){return n.exports=t=Object.assign?Object.assign.bind():function(n){for(var t=1;t0?"\r\nValid strings are: [ "+_.join(", ")+" ].":"")),delete a[c]}})),[u,a]},It=function(n,t,r){return Ht(n,t,r)},kt=Bt.boolean,Vt=[Bt.array,Bt.null],Yt="hidden scroll visible visible-hidden",Ft={paddingAbsolute:kt,updating:{elementEvents:Vt,attributes:Vt,debounce:[Bt.number,Bt.array,Bt.null],ignoreMutation:[Bt.function,Bt.null]},overflow:{x:Yt,y:Yt},scrollbars:{visibility:"visible hidden auto",autoHide:"never scroll leavemove",autoHideDelay:Bt.number,dragScroll:kt,clickScroll:kt,touch:kt},nativeScrollbarsOverlaid:{show:kt,initialize:kt}},Xt="__osOptionsValidationPlugin",Nt=((zt={})[Xt]={Y:function(n,t){var r=It(Ft,n,t),e=r[0],i=r[1];return Dt({},i,e)}},zt),Kt=3333333,Wt="scroll",Jt="__osSizeObserverPlugin",qt=((Rt={})[Jt]={Y:function(n,t,e){var i=Z('
');W(n,i),hn(n,lt);var o,u=i[0],a=u.lastChild,c=u.firstChild,f=null==c?void 0:c.firstChild,l=Mn(u),d=l,s=!1,v=function(){B(c,Kt),H(c,Kt),B(a,Kt),H(a,Kt)},h=function(n){o=0,s&&(l=d,t(!0===n))},p=function(n){d=Mn(u),s=!n||!gn(d,l),n?(kn(n),s&&!o&&(fn(o),o=ln(h))):h(!1===n),v()},g=P([],[In(c,Wt,p),In(a,Wt,p)]);return r(f,{width:Kt,height:Kt}),v(),[e?p.bind(0,!1):v,g]}},Rt),Gt=0,Ut="__osScrollbarsHidingPlugin",$t=((At={})[Ut]={N:function(){var n=Et(),t=n.D,r=n.I,e=!(n.M||t||!r.x&&!r.y)&&document.createElement("style");return e&&(z(e,"id",et+"-"+Gt),Gt++),e},W:function(n,e,i,o,u,a){var c=Et().V;return[function(t,u,a,c){if(n){var f=o().G,l=t.X,d=t.$,s=d.x,v=d.y,h=l.x,p=l.y,g=f[c?"paddingRight":"paddingLeft"],w=f.paddingTop,b=u.w+a.w,y=u.h+a.h,m={w:p&&v?p+b-g+"px":"",h:h&&s?h+y-w+"px":""};if(i){var x=i.sheet;if(x){var _=x.cssRules;if(_){_.length||x.insertRule("#"+z(i,"id")+" + ."+et+"::before {}",0);var P=_[0].style;P.width=m.w,P.height=m.h}}}else r(e,{"--os-vaw":m.w,"--os-vah":m.h})}return n},function(i,f,l){if(n){var d=l||u(i),s=o().G,v=d.$,h=v.x,p=v.y,g={},w=function(n){return t(n.split(" "),(function(n){g[n]=s[n]}))};h&&w("marginBottom paddingTop paddingBottom"),p&&w("marginLeft marginRight paddingLeft paddingRight");var b=r(e,E(g));return vn(e,et),c||(g.height=""),r(e,g),[function(){a(d,f,n,b),r(e,b),hn(e,et)},d]}return[xn]}]}},At),Zt=function(n,t){return p(n)?n.apply(0,t):n},Qt=function(n,t,r,e){return Zt(e||Zt(r,n),n)||t.apply(0,n)},nr=function(n,t,r,e){var i=Zt(e,n);return(d(i)||l(i))&&(i=Zt(r,n)),!0===i||d(i)||l(i)?t.apply(0,n):i},tr=$.bind(0,""),rr=function(n){W(F(n),Y(n)),U(n)},er=function(n,t){return z(n,Un,t),D.bind(0,n,Un)},ir=function(n){var t=Et(),r=t.H,e=t.D,i=Mt()[Ut],o=i&&i.N,u=r(),a=u.J,c=u.K,f=u.P,l=u.T,d=m(n),s=n,v=d?n:s.target,h=V(v,"textarea"),p=!h&&V(v,"body"),g=v.ownerDocument,w=g.body,b=g.defaultView,y=!!cn&&!h&&e,x=Qt.bind(0,[v]),O=nr.bind(0,[v]),S=[x(tr,c,s.viewport),x(tr,c),x(tr)].filter((function(n){return!!y||n!==v}))[0],L=S===v,C={Z:v,J:h?x(tr,a,s.host):v,K:S,P:!L&&O(tr,f,s.padding),T:!L&&O(tr,l,s.content),rr:!L&&!e&&o&&o(),ar:b,nr:g,tr:F(w),er:w,ir:h,vr:p,ur:d,lr:L,cr:function(n,t){return L?A(S,Un,t):function(n,t){return sn(n,t,(function(n,t){return n.contains(t)}))}(S,n)},sr:function(n,t,r){return L?R(S,Un,t,r):(r?hn:vn)(S,n)}},M=E(C).reduce((function(n,t){var r=C[t];return P(n,!(!r||F(r))&&r)}),[]),j=function(n){return n?_(M,n)>-1:null},z=C.Z,B=C.J,H=C.P,I=C.K,k=C.T,X=C.rr,N=[],K=h&&j(B),J=h?z:Y([k,I,H,B,z].find((function(n){return!1===j(n)}))),$=k||I;return[C,function(){var n=er(B,L?"viewport":"host"),t=hn(H,tt),r=hn(I,!L&&rt),i=hn(k,it);K&&(G(z,B),P(N,(function(){G(B,z),U(B)}))),W($,J),W(B,H),W(H||B,!L&&I),W(I,k),P(N,(function(){n(),D(I,$n),D(I,Zn),j(k)&&rr(k),j(I)&&rr(I),j(H)&&rr(H),t(),r(),i()})),e&&!L&&P(N,vn.bind(0,I,ot)),X&&(q(I,X),P(N,U.bind(0,X)))},T.bind(0,N)]},or=function(n,t){var e=n.T,i=t[0];return function(n){var t=Et().V,o=i().dr,u=n.gr,a=(e||!t)&&u;return a&&r(e,{height:o?"":"100%"}),{hr:a,pr:a}}},ur=function(n,t){var e=t[0],i=t[1],u=n.J,a=n.P,c=n.K,f=n.lr,l=o({u:bn,o:Ln()},Ln.bind(0,u,"padding","")),d=l[0],s=l[1];return function(n,t,o){var u=s(o),l=u[0],v=u[1],h=Et(),p=h.D,g=h.V,w=e()._r,b=n.hr,y=n.pr,m=n.wr,x=t("paddingAbsolute"),_=x[0],P=x[1];if(b||v||!g&&y){var O=d(o);l=O[0],v=O[1]}var S=!f&&(P||m||v);if(S){var T=!_||!a&&!p,L=l.r+l.l,E=l.t+l.b,M={marginRight:T&&!w?-L:0,marginBottom:T?-E:0,marginLeft:T&&w?-L:0,top:T?-l.t:0,right:T?w?-l.r:"auto":0,left:T?w?"auto":-l.l:0,width:T?"calc(100% + "+L+"px)":""},j={paddingTop:T?l.t:0,paddingRight:T?l.r:0,paddingBottom:T?l.b:0,paddingLeft:T?l.l:0};r(a||c,M),r(c,j),i({P:l,br:!T,G:a?j:C({},M,j)})}return{mr:S}}},ar=Math.max,cr="visible",fr="hidden",lr=42,dr={u:gn,o:{w:0,h:0}},sr={u:wn,o:{x:fr,y:fr}},vr=function(n,t,r){return r?hn(n,t):vn(n,t)},hr=function(n){return 0===n.indexOf(cr)},pr=function(n,t){var e=t[0],i=t[1],u=n.J,a=n.P,c=n.K,f=n.rr,l=n.lr,d=n.sr,s=Et(),v=s.L,h=s.V,p=s.D,g=s.I,w=Mt()[Ut],b=!l&&!p&&(g.x||g.y),y=o(dr,Rn.bind(0,c)),m=y[0],x=y[1],_=o(dr,zn.bind(0,c)),P=_[0],O=_[1],S=o(dr),T=S[0],L=S[1],E=o(sr)[0],C=function(n,t){if(r(c,{height:""}),t){var i=e(),o=i.br,a=i.P,f=n.yr,l=n.X,d=Rn(u),s=jn(u),v="content-box"===r(c,"boxSizing"),h=o||v?a.b+a.t:0,p=!(g.x&&v);r(c,{height:s.h+d.h+(f.x&&p?l.x:0)-h})}},M=function(n,t){var e=p||n?0:lr,i=function(n,i,o){var u=r(c,n),a="scroll"===(t?t[n]:u);return[u,a,a&&!p?i?e:o:0,i&&!!e]},o=i("overflowX",g.x,v.x),u=o[0],a=o[1],f=o[2],l=o[3],d=i("overflowY",g.y,v.y);return{Sr:{x:u,y:d[0]},yr:{x:a,y:d[1]},X:{x:f,y:d[2]},$:{x:l,y:d[3]}}},j=function(n,t,r,i){var o=n.X,u=n.$,a=u.x,c=u.y,f=o.x,l=o.y,d=e().G,s=t?"marginLeft":"marginRight",v=t?"paddingLeft":"paddingRight",h=d[s],p=d.marginBottom,g=d[v],w=d.paddingBottom;i.width="calc(100% + "+(l+-1*h)+"px)",i[s]=-l+h,i.marginBottom=-f+p,r&&(i[v]=g+(c?l:0),i.paddingBottom=w+(a?f:0))},A=w?w.W(b,c,f,e,M,j):[function(){return b},function(){return[xn]}],D=A[0],B=A[1];return function(n,t,o){var f,s=n.hr,v=n.Cr,w=n.pr,b=n.mr,y=n.gr,_=n.wr,S=e(),A=S.dr,H=S._r,I=t("nativeScrollbarsOverlaid.show"),k=I[0],V=I[1],Y=t("overflow"),F=Y[0],X=Y[1],N=k&&g.x&&g.y,K=!l&&!h&&(s||w||v||V||y),W=hr(F.x),J=hr(F.y),q=W||J,G=x(o),U=O(o),$=L(o);if(V&&p&&d(ot,nt,!N),K&&(f=M(N),C(f,A)),s||b||w||_||V){q&&d(ut,Qn,!1);var Z=B(N,H,f),Q=Z[0],nn=Z[1],tn=G=m(o),rn=tn[0],en=tn[1],on=U=P(o),un=on[0],an=on[1],cn=jn(c),fn=un,ln=cn;Q(),(an||en||V)&&nn&&!N&&D(nn,un,rn,H)&&(ln=jn(c),fn=zn(c)),$=T(function(n,t,r){var e=window.devicePixelRatio%1!=0?1:0,i={w:ar(0,n.w-t.w-ar(0,r.w)),h:ar(0,n.h-t.h-ar(0,r.h))};return{w:i.w>e?i.w:0,h:i.h>e?i.h:0}}({w:ar(un.w,fn.w),h:ar(un.h,fn.h)},{w:ln.w+ar(0,cn.w-un.w),h:ln.h+ar(0,cn.h-un.h)},rn),o)}var dn=$,sn=dn[0],vn=dn[1],hn=U,pn=hn[0],gn=hn[1],wn=G,bn=wn[0],yn=wn[1],mn={x:sn.w>0,y:sn.h>0},xn=W&&J&&(mn.x||mn.y)||W&&mn.x&&!mn.y||J&&mn.y&&!mn.x;if(b||_||yn||gn||vn||X||V||K){var _n={marginRight:0,marginBottom:0,marginLeft:0,width:"",overflowY:"",overflowX:""},Pn=function(n,t,r,e){var i=function(n,t){var r=hr(n),e=t&&r&&n.replace(cr+"-","")||"";return[t&&!r?n:"",hr(e)?"hidden":e]},o=i(r.x,t.x),u=o[0],a=o[1],c=i(r.y,t.y),f=c[0],l=c[1];return e.overflowX=a&&f?a:u,e.overflowY=l&&u?l:f,M(n,e)}(N,mn,F,_n),On=D(Pn,pn,bn,H);l||j(Pn,H,On,_n),K&&C(Pn,A),l?(z(u,$n,_n.overflowX),z(u,Zn,_n.overflowY)):r(c,_n)}R(u,Un,Qn,xn),vr(a,ut,xn),!l&&vr(c,ut,q);var Sn=E(M(N).Sr),Tn=Sn[0],Ln=Sn[1];return i({Sr:Tn,Or:{x:sn.w,y:sn.h},Er:mn}),{zr:Ln,Ar:vn}}},gr=function(n,r,e){var i={},o=r||{};return t(E(n).concat(E(o)),(function(t){var r=n[t],u=o[t];i[t]=!!(e||r||u)})),i},wr=function(n,r){var e=n.K,i=Et(),o=i.D,u=i.I,a=i.V,c=!o&&(u.x||u.y),f=[or(n,r),ur(n,r),pr(n,r)];return function(n,r,i){var o=gr(C({hr:!1,mr:!1,wr:!1,gr:!1,Ar:!1,zr:!1,Cr:!1,pr:!1},r),{},i),u=c||!a,l=u&&B(e),d=u&&H(e),s=o;return t(f,(function(t){s=gr(s,t(s,n,!!i)||{},i)})),v(l)&&B(e,l),v(d)&&H(e,d),s}},br="animationstart",yr="scroll",mr=3333333,xr=function(n){return"rtl"===r(n,"direction")},_r=function(n){return n&&(n.height||n.width)},Pr=function(n,t,r){var e=r||{},i=e.Pr,u=void 0!==i&&i,a=e.Tr,c=void 0!==a&&a,f=Mt()[Jt],l=Et().R,d=Z('
')[0],s=d.firstChild,v=xr.bind(0,d),h=o({o:void 0,g:!0,u:function(n,t){return!(!n||!_r(n)&&_r(t))}}),p=h[0],b=function(n){var r=g(n)&&n.length>0&&w(n[0]),e=!r&&function(n){return"boolean"==typeof n}(n[0]),i=!1,o=!1,a=!0;if(r){var c=p(n.pop().contentRect),f=c[0],s=c[2],v=_r(f);o=!_r(s)&&v,a=!(i=!s||!v)}else e?a=n[1]:o=!0===n;if(u&&a){var h=e?n[0]:xr(d);B(d,h?l.n?-mr:l.i?0:mr:mr),H(d,mr)}i||t({hr:!e,Lr:e?n:void 0,Tr:!!o})},y=[],m=!!c&&b;if(cn){var x=new cn(b);x.observe(s),P(y,(function(){x.disconnect()}))}else if(f){var _=f.Y(s,b,c),O=_[0],S=_[1];m=O,P(y,S)}if(u){var L=o({o:!v()},v)[0];P(y,In(d,yr,(function(n){var t=L(),r=t[0];t[1]&&(vn(s,"ltr rtl"),hn(s,r?"rtl":"ltr"),b(t)),kn(n)})))}return m&&(hn(d,ct),P(y,In(d,br,m,{A:!!cn}))),J(n,d),function(){T(y),U(d)}},Or=function(n,t){var r=$(vt),e=[],i=o({o:!1})[0],u=function(n){if(n){var r=i(function(n){return 0===n.h||n.isIntersecting||n.intersectionRatio>0}(n));r[1]&&t(r)}};if(an){var a=new an((function(n){n&&n.length>0&&u(n.pop())}),{root:n});a.observe(r),P(e,(function(){a.disconnect()}))}else{var c=function(){var n=Mn(r);u(n)};P(e,Pr(r,c)),c()}return J(n,r),function(){T(e),U(r)}},Sr=function(n,r,e,i){var o=!1,u=i||{},a=u.Ir,c=u.Dr,f=u.Mr,l=u.Rr,d=u.Vr,s=u.jr,v=function(n,r,e){var i,o=!1,u=function(u){if(e){var a=e.reduce((function(t,r){if(r){var e=r[0],i=r[1],o=i&&e&&(u?u(e):k(e,n));o&&o.length&&i&&h(i)&&P(t,[o,i.trim()],!0)}return t}),[]);t(a,(function(n){return t(n[0],(function(t){var e=n[1],u=i.get(t);if(u){var a=u[0],c=u[1];a===e&&c()}var f=In(t,e,(function(n){o?(f(),i.delete(t)):r(n)}));i.set(t,[e,f])}))}))}};return e&&(i=new WeakMap,u()),[function(){o=!0},u]}(n,_n((function(){o&&e(!0)}),{p:33,_:99}),f),p=v[0],g=v[1],w=c||[],b=(a||[]).concat(w),y=function(o){var u=d||xn,a=s||xn,c=[],f=[],v=!1,p=!1,b=!1;t(o,(function(t){var e=t.attributeName,o=t.target,d=t.type,s=t.oldValue,g=t.addedNodes,y="attributes"===d,m="childList"===d,x=n===o,O=y&&h(e)?z(o,e):0,S=0!==O&&s!==O,T=_(w,e)>-1&&S;if(r&&!x){var L=!y,E=y&&T,C=E&&l&&V(o,l),M=(C?!u(o,e,s,O):L||E)&&!a(t,!!C,n,i);P(f,g),p=p||M,b=b||m}!r&&x&&S&&!u(o,e,s,O)&&(P(c,e),v=v||T)})),b&&!S(f)&&g((function(n){return f.reduce((function(t,r){return P(t,k(n,r)),V(r,n)?P(t,r):t}),[])})),r?p&&e(!1):S(c)&&!v||e(c,v)},m=new un(y);return m.observe(n,{attributes:!0,attributeOldValue:!0,attributeFilter:b,subtree:r,childList:r,characterData:r}),o=!0,[function(){o&&(p(),m.disconnect(),o=!1)},function(){o&&y(m.takeRecords())}]},Tr="["+Un+"]",Lr="."+rt,Er=["tabindex"],Cr=["wrap","cols","rows"],Mr=["id","class","style","open"],jr=function(n,r,e){var i,u,a,c=r[1],f=n.J,l=n.K,d=n.T,s=n.ir,w=n.lr,b=n.cr,y=n.sr,m=Et(),x=m.D,P=m.V,O=o({u:gn,o:{w:0,h:0}},(function(){var n=b(ut,Qn);n&&y(ut,Qn);var t=zn(d),r=zn(l),e=Rn(l);return n&&y(ut,Qn,!0),{w:r.w+t.w+e.w,h:r.h+t.h+e.h}})),S=O[0],T=s?Cr:Mr.concat(Cr),L=_n(e,{p:function(){return i},_:function(){return u},m:function(n,t){var r=n[0],e=t[0];return[E(r).concat(E(e)).reduce((function(n,t){return n[t]=r[t]||e[t],n}),{})]}}),C=function(n){t(n||Er,(function(n){if(_(Er,n)>-1){var t=z(f,n);h(t)?z(l,n,t):D(l,n)}}))},M=function(n){var t=n.hr,r=n.Lr,i=n.Tr,o=!t||i?e:L,u=!1;if(r){var a=r[0];u=r[1],c({_r:a})}o({hr:t,wr:u})},j=function(n){S()[1]&&(n?e:L)({pr:!0})},R=(d||!P)&&Or(f,(function(n){var t=n[0],r=n[1];c({dr:t}),e({gr:r})})),A=!w&&Pr(f,M,{Tr:!0,Pr:!x}),B=Sr(f,!1,(function(n,t){t?L({Cr:!0}):w||C(n)}),{Dr:Mr,Ir:Mr.concat(Er)}),H=B[0],I=w&&new cn(M.bind(0,{hr:!0}));return I&&I.observe(f),C(),[function(n){var t=n("updating.ignoreMutation")[0],r=n("updating.attributes"),e=r[0],o=r[1],c=n("updating.elementEvents"),f=c[0],s=c[1],h=n("updating.debounce"),w=h[0],b=h[1],y=function(n){return p(t)&&t(n)};if((s||o)&&(a&&(a[1](),a[0]()),a=Sr(d||l,!0,j,{Dr:T.concat(e||[]),Ir:T.concat(e||[]),Mr:f,Rr:Tr,jr:function(n,t){var r=n.target,e=n.attributeName;return!(t||!e)&&N(r,Tr,Lr)||!!y(n)}})),b)if(L.S(),g(w)){var m=w[0],x=w[1];i=!!v(m)&&m,u=!!v(x)&&x}else v(w)?(i=w,u=!1):(i=!1,u=!1)},function(){a&&a[0](),R&&R(),A&&A(),I&&I.disconnect(),H()}]},zr={P:{t:0,r:0,b:0,l:0},br:!1,G:{marginRight:0,marginBottom:0,marginLeft:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0},Or:{x:0,y:0},Sr:{x:"hidden",y:"hidden"},Er:{x:!1,y:!1},dr:!1,_r:!1},Rr=function(n){var t=$(ht+" "+n),r=$(wt),e=$(bt);return W(t,r),W(r,e),{Fr:t,qr:r,Ur:e}},Ar=new Set,Dr=new WeakMap,Br=function n(r,e,i){var o=!1,u=Et(),a=u.k,c=u.I,f=u.j,l=Mt(),d=m(r)?r:r.target,s=function(n){return Dr.get(n)}(d);if(s)return s;var v=l[Xt],h=function(n){var t=n||{},r=v&&v.Y;return r?r(t,!0):t},g=C({},a(),h(e)),w=Xn(i),b=w[0],y=w[1],x=w[2],_=function(n,t){var r=Kn(t,{}),e=Wn(zr),i=Xn(),o=i[0],u=i[1],a=i[2],c=e[0],f=ir(n),l=f[0],d=f[1],s=f[2],v=wr(l,e),h=jr(l,e,(function(n){a("u",[v(r,n),{},!1])})),p=h[0],g=h[1],w=c.bind(0);return w.Hr=function(n){o("u",n)},w.Br=d,w.kr=l,[function(n,r){var e=Kn(t,n,r);p(e),a("u",[v(e,{},r),n,!!r])},w,function(){u(),g(),s()}]}(r,g),P=_[0],O=_[1],S=_[2],T=function(n,t,r){var e=Wn({})[0],i=function(n,t){var r=(0,Et().H)().Yr,e=t.Z,i=t.J,o=t.K,u=!t.ur&&n.scrollbarsSlot,a=nr([e,i,o],(function(){return i}),r,u),c=Rr(pt),f=Rr(gt),l=c.Fr,d=f.Fr;return[{Nr:c,Wr:f},function(){W(a,l),W(a,d)},U.bind(0,[l,d])]}(n,r),o=i[0],u=i[1],a=i[2],c=e.bind(0);return c.kr=o,c.Br=u,[function(n,r){var e=Kn(t,n,r);console.log(e)},c,function(){a()}]}(r,g,O.kr),L=T[0],j=T[1],z=T[2],R=function(n,t){P(n,t),L(n,t)},A=f(R.bind(0,{},!0)),D=function(n){!function(n){Dr.delete(n),Ar.delete(n)}(d),A(),z(),S(),o=!0,x("destroyed",[B,!!n]),y()},B={options:function(n){if(n){var t=xt(g,h(n));M(t)||(C(g,t),R(t))}return C({},g)},on:b,off:function(n,t){n&&t&&y(n,t)},state:function(){var n=O(),t=n.Or,r=n.Sr,e=n.Er,i=n.P,u=n.br;return C({},{overflowAmount:t,overflowStyle:r,hasOverflow:e,padding:i,paddingAbsolute:u,destroyed:o})},elements:function(){var n=O.kr,t=n.Z,r=n.J,e=n.P,i=n.K,o=n.T;return C({},{target:t,host:r,padding:e||i,viewport:i,content:o||i})},update:function(n){return R({},n),B},destroy:D.bind(0)};return t(E(l),(function(t){var r=l[t];p(r)&&r(n,B)})),c.x&&c.y&&!g.nativeScrollbarsOverlaid.initialize?(D(!0),B):(O.Br(),j.Br(),function(n,t){Dr.set(n,t),Ar.add(n)}(d,B),x("initialized",[B]),O.Hr((function(n,t,r){var e=n.hr,i=n.wr,o=n.gr,u=n.Ar,a=n.zr,c=n.pr,f=n.Cr;x("updated",[B,{updateHints:{sizeChanged:e,directionChanged:i,heightIntrinsicChanged:o,overflowAmountChanged:u,overflowStyleChanged:a,contentMutation:c,hostMutation:f},changedOptions:t,force:r}])})),B.update(!0))};Br.plugin=function(n){return t(g(n)?n:[n],(function(n){t(E(n),(function(t){Ct[t]=n[t]}))}))},Br.env=function(){var n=Et(),t=n.L,r=n.I,e=n.D,i=n.R,o=n.V,u=n.M,a=n.q,c=n.U,f=n.H,l=n.B,d=n.k,s=n.F;return C({},{scrollbarsSize:t,scrollbarsOverlaid:r,scrollbarsHiding:e,rtlScrollBehavior:i,flexboxGlue:o,cssCustomProperties:u,defaultInitializationStrategy:a,defaultDefaultOptions:c,getInitializationStrategy:f,setInitializationStrategy:l,getDefaultOptions:d,setDefaultOptions:s})},n.OverlayScrollbars=Br,n.optionsValidationPlugin=Nt,n.scrollbarsHidingPlugin=$t,n.sizeObserverPlugin=qt,Object.defineProperty(n,"v",{value:!0})})); \ No newline at end of file diff --git a/packages/overlayscrollbars/rollup.config.js b/packages/overlayscrollbars/rollup.config.js index c9132c8..73a1e91 100644 --- a/packages/overlayscrollbars/rollup.config.js +++ b/packages/overlayscrollbars/rollup.config.js @@ -1,3 +1,4 @@ +const { terser: rollupTerser } = require('rollup-plugin-terser'); const createRollupConfig = require('../../rollup.config.base'); const { devDependencies, peerDependencies } = require('./package.json'); @@ -8,6 +9,28 @@ module.exports = createRollupConfig({ external: Object.keys(devDependencies || {}).concat(Object.keys(peerDependencies || {})), output: { exports: 'auto', + plugins: [ + rollupTerser({ + safari10: true, + mangle: { + safari10: true, + keep_fnames: true, // eslint-disable-line camelcase + properties: { + regex: /^_/, + }, + }, + compress: { + defaults: false, + hoist_funs: true, // eslint-disable-line camelcase + }, + format: { + beautify: true, + max_line_len: 80, // eslint-disable-line camelcase + braces: true, + indent_level: 2, // eslint-disable-line camelcase + }, + }), + ], }, }, }); diff --git a/packages/overlayscrollbars/src/index.ts b/packages/overlayscrollbars/src/index.ts index 9ee6f72..150684e 100644 --- a/packages/overlayscrollbars/src/index.ts +++ b/packages/overlayscrollbars/src/index.ts @@ -1,4 +1,4 @@ import 'index.scss'; -export { OverlayScrollbars as default, OverlayScrollbars } from 'overlayscrollbars'; +export { OverlayScrollbars } from 'overlayscrollbars'; export { optionsValidationPlugin, scrollbarsHidingPlugin, sizeObserverPlugin } from 'plugins'; diff --git a/packages/overlayscrollbars/src/support/cache.ts b/packages/overlayscrollbars/src/support/cache.ts index 2f62ab3..a94d30c 100644 --- a/packages/overlayscrollbars/src/support/cache.ts +++ b/packages/overlayscrollbars/src/support/cache.ts @@ -23,15 +23,18 @@ export type Cache = [UpdateCache, GetCurrentCache]; export type CacheContextual = [UpdateCacheContextual, GetCurrentCache]; -export function createCache(options: CacheOptions): CacheContextual; -export function createCache( - options: CacheOptions, - update: CacheUpdater -): Cache; -export function createCache( +type CreateCache = { + (options: CacheOptions): CacheContextual; + (options: CacheOptions, update: CacheUpdater): Cache; + (options: CacheOptions, update?: CacheUpdater): + | CacheContextual + | Cache; +}; + +export const createCache: CreateCache = ( options: CacheOptions, update?: CacheUpdater -): CacheContextual | Cache { +): CacheContextual | Cache => { const { _initialValue, _equal, _alwaysUpdateValues } = options; let _value: Value = _initialValue; let _previous: Value | undefined; @@ -61,4 +64,4 @@ export function createCache( return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as | CacheContextual | Cache; -} +}; diff --git a/packages/overlayscrollbars/src/support/dom/attribute.ts b/packages/overlayscrollbars/src/support/dom/attribute.ts index a834934..b3bd9a6 100644 --- a/packages/overlayscrollbars/src/support/dom/attribute.ts +++ b/packages/overlayscrollbars/src/support/dom/attribute.ts @@ -3,17 +3,32 @@ import { isUndefined } from 'support/utils/types'; type GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value'; -function getSetProp( +type Attr = { + (elm: HTMLElement | false | null | undefined, attrName: string): string | null; + (elm: HTMLElement | false | null | undefined, attrName: string, value: string): void; + (elm: HTMLElement | false | null | undefined, attrName: string, value?: string): + | string + | null + | void; +}; + +type GetSetProp = { + (elm: HTMLElement | false | null | undefined): number; + (elm: HTMLElement | false | null | undefined, value: number): void; + (elm: HTMLElement | false | null | undefined, value?: number): number | void; +}; + +const getSetProp = ( topLeft: GetSetPropName, fallback: number | string, elm: HTMLElement | HTMLInputElement | false | null | undefined, value?: number | string -): number | string | void { +): number | string | void => { if (isUndefined(value)) { return elm ? elm[topLeft] : fallback; } elm && (elm[topLeft] = value); -} +}; /** * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given. @@ -22,22 +37,16 @@ function getSetProp( * @param attrName The attribute name which shall be get or set. * @param value The value of the attribute which shall be set. */ -export function attr(elm: HTMLElement | false | null | undefined, attrName: string): string | null; -export function attr( - elm: HTMLElement | false | null | undefined, - attrName: string, - value: string -): void; -export function attr( +export const attr = (( elm: HTMLElement | false | null | undefined, attrName: string, value?: string -): string | null | void { +): string | null | void => { if (isUndefined(value)) { return elm ? elm.getAttribute(attrName) : null; } elm && elm.setAttribute(attrName, value); -} +}) as Attr; /** * Treats the given attribute like the "class" attribute and adds or removes the given value from it. @@ -90,39 +99,27 @@ export const removeAttr = (elm: Element | false | null | undefined, attrName: st * @param elm The element of which the scrollLeft value shall be get or set. * @param value The scrollLeft value which shall be set. */ -export function scrollLeft(elm: HTMLElement | false | null | undefined): number; -export function scrollLeft(elm: HTMLElement | false | null | undefined, value: number): void; -export function scrollLeft( +export const scrollLeft = (( elm: HTMLElement | false | null | undefined, value?: number -): number | void { - return getSetProp('scrollLeft', 0, elm, value) as number; -} +): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp; /** * Gets or sets the scrollTop value of the given element depending whether the value attribute is given. * @param elm The element of which the scrollTop value shall be get or set. * @param value The scrollTop value which shall be set. */ -export function scrollTop(elm: HTMLElement | false | null | undefined): number; -export function scrollTop(elm: HTMLElement | false | null | undefined, value: number): void; -export function scrollTop( +export const scrollTop = (( elm: HTMLElement | false | null | undefined, value?: number -): number | void { - return getSetProp('scrollTop', 0, elm, value) as number; -} +): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp; /** * Gets or sets the value of the given input element depending whether the value attribute is given. * @param elm The input element of which the value shall be get or set. * @param value The value which shall be set. */ -export function val(elm: HTMLInputElement | false | null | undefined): string; -export function val(elm: HTMLInputElement | false | null | undefined, value: string): void; -export function val( +export const val = (( elm: HTMLInputElement | false | null | undefined, value?: string -): string | void { - return getSetProp('value', '', elm, value) as string; -} +): string | void => getSetProp('value', '', elm, value) as string) as GetSetProp; diff --git a/packages/overlayscrollbars/src/support/dom/events.ts b/packages/overlayscrollbars/src/support/dom/events.ts index 2cfe88c..d1bdc8e 100644 --- a/packages/overlayscrollbars/src/support/dom/events.ts +++ b/packages/overlayscrollbars/src/support/dom/events.ts @@ -12,7 +12,7 @@ const supportPassiveEvents = (): boolean => { 'test', null, Object.defineProperty({}, 'passive', { - get: function () { + get() { passiveEventsSupport = true; }, }) diff --git a/packages/overlayscrollbars/src/support/dom/style.ts b/packages/overlayscrollbars/src/support/dom/style.ts index 22d91a1..a1f9936 100644 --- a/packages/overlayscrollbars/src/support/dom/style.ts +++ b/packages/overlayscrollbars/src/support/dom/style.ts @@ -28,16 +28,20 @@ const cssNumber = { const parseToZeroOrNumber = (value: string, toFloat?: boolean): number => { /* istanbul ignore next */ const num = toFloat ? parseFloat(value) : parseInt(value, 10); + // num === num means num is not NaN /* istanbul ignore next */ - return Number.isNaN(num) ? 0 : num; + return num === num ? num : 0; // eslint-disable-line no-self-compare }; + const adaptCSSVal = (prop: string, val: string | number): string | number => !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val; + const getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string => /* istanbul ignore next */ computedStyle != null ? computedStyle[prop] || computedStyle.getPropertyValue(prop) : elm.style[prop]; + const setCSSVal = ( elm: HTMLElement | false | null | undefined, prop: string, diff --git a/packages/overlayscrollbars/src/support/eventListeners.ts b/packages/overlayscrollbars/src/support/eventListeners.ts index 42096ee..e0a5d93 100644 --- a/packages/overlayscrollbars/src/support/eventListeners.ts +++ b/packages/overlayscrollbars/src/support/eventListeners.ts @@ -24,21 +24,32 @@ export const createEventListenerHub = >( type EventListener = ( ...args: EventMap[Name] ) => void; + type RemoveEvent = { + (name?: Name, listener?: EventListener): void; + (name?: Name, listener?: EventListener[]): void; + ( + name?: Name, + listener?: EventListener | EventListener[] + ): void; + }; + type AddEvent = { + (name: Name, listener: EventListener): () => void; + (name: Name, listener: EventListener[]): () => void; + ( + name: Name, + listener: EventListener | EventListener[] + ): () => void; + }; + type TriggerEvent = { + (name: Name, args?: EventMap[Name]): void; + }; const events = new Map>(); - function removeEvent( - name?: Name, - listener?: EventListener - ): void; - function removeEvent( - name?: Name, - listener?: EventListener[] - ): void; - function removeEvent( + const removeEvent: RemoveEvent = ( name?: Name, listener?: EventListener | EventListener[] - ): void { + ): void => { if (name) { const eventSet = events.get(name); manageListener((currListener) => { @@ -52,20 +63,12 @@ export const createEventListenerHub = >( }); events.clear(); } - } + }; - function addEvent( - name: Name, - listener: EventListener - ): () => void; - function addEvent( - name: Name, - listener: EventListener[] - ): () => void; - function addEvent( + const addEvent: AddEvent = ( name: Name, listener: EventListener | EventListener[] - ): () => void { + ): (() => void) => { const eventSet = events.get(name) || new Set(); events.set(name, eventSet); @@ -74,9 +77,12 @@ export const createEventListenerHub = >( }, listener as any); return removeEvent.bind(0, name as any, listener as any); - } + }; - function triggerEvent(name: Name, args?: EventMap[Name]): void { + const triggerEvent: TriggerEvent = ( + name: Name, + args?: EventMap[Name] + ): void => { const eventSet = events.get(name); each(from(eventSet), (event) => { @@ -86,16 +92,12 @@ export const createEventListenerHub = >( (event as () => void)(); } }); - } + }; const initialListenerKeys = keys(initialEventListeners) as Extract[]; each(initialListenerKeys, (key) => { addEvent(key, initialEventListeners![key] as any); }); - return [addEvent, removeEvent, triggerEvent] as [ - typeof addEvent, - typeof removeEvent, - typeof triggerEvent - ]; + return [addEvent, removeEvent, triggerEvent] as [AddEvent, RemoveEvent, TriggerEvent]; }; diff --git a/packages/overlayscrollbars/src/support/utils/array.ts b/packages/overlayscrollbars/src/support/utils/array.ts index 865fe29..53e3be7 100644 --- a/packages/overlayscrollbars/src/support/utils/array.ts +++ b/packages/overlayscrollbars/src/support/utils/array.ts @@ -35,9 +35,9 @@ export function each( callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown ): PlainObject | null | undefined; export function each( - source: ArrayLike | PlainObject | null | undefined, + source: Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined, callback: (value: T, indexOrKey: any, source: any) => boolean | unknown -): Array | ReadonlyArray | ArrayLike | PlainObject | null | undefined { +): Array | ArrayLike | ReadonlyArray | PlainObject | null | undefined { if (isArrayLike(source)) { for (let i = 0; i < source.length; i++) { if (callback(source[i], i, source) === false) { @@ -76,11 +76,13 @@ export const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: * @param arr The object from which the array instance shall be created. */ export const from = (arr?: ArrayLike | Set) => { - if (Array.from && arr) { - return Array.from(arr); - } + const original = Array.from; const result: T[] = []; + if (original && arr) { + return original(arr); + } + if (arr instanceof Set) { arr.forEach((value) => { push(result, value); @@ -107,18 +109,9 @@ export const isEmptyArray = (array: any[] | null | undefined): boolean => * @param args The args with which each function is called. * @param keep True when the Set / array should not be cleared afterwards, false otherwise. */ -export const runEachAndClear = ( - arr: ArrayLike | Set, - args?: any[], - keep?: boolean -): void => { +export const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => { // eslint-disable-next-line prefer-spread const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []); - if (arr instanceof Set) { - arr.forEach(runFn); - !keep && arr.clear(); - } else { - each(arr, runFn); - !keep && (arr as any[]).splice && (arr as any[]).splice(0, arr.length); - } + each(arr, runFn); + !keep && ((arr as any[]).length = 0); }; diff --git a/packages/overlayscrollbars/src/support/utils/object.ts b/packages/overlayscrollbars/src/support/utils/object.ts index db817de..9c05cc7 100644 --- a/packages/overlayscrollbars/src/support/utils/object.ts +++ b/packages/overlayscrollbars/src/support/utils/object.ts @@ -15,31 +15,30 @@ export const hasOwnProperty = (obj: any, prop: string | number | symbol): boolea */ export const keys = (obj: any): Array => (obj ? Object.keys(obj) : []); +type AssignDeep = { + (target: T, object1: U): T & U; + (target: T, object1: U, object2: V): T & U & V; + (target: T, object1: U, object2: V, object3: W): T & U & V & W; + (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X; + (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & + U & + V & + W & + X & + Y; + ( + target: T, + object1?: U, + object2?: V, + object3?: W, + object4?: X, + object5?: Y, + object6?: Z + ): T & U & V & W & X & Y & Z; +}; + // https://github.com/jquery/jquery/blob/master/src/core.js#L116 -export function assignDeep(target: T, object1: U): T & U; -export function assignDeep(target: T, object1: U, object2: V): T & U & V; -export function assignDeep( - target: T, - object1: U, - object2: V, - object3: W -): T & U & V & W; -export function assignDeep( - target: T, - object1: U, - object2: V, - object3: W, - object4: X -): T & U & V & W & X; -export function assignDeep( - target: T, - object1: U, - object2: V, - object3: W, - object4: X, - object5: Y -): T & U & V & W & X & Y; -export function assignDeep( +export const assignDeep: AssignDeep = ( target: T, object1?: U, object2?: V, @@ -47,7 +46,7 @@ export function assignDeep( object4?: X, object5?: Y, object6?: Z -): T & U & V & W & X & Y & Z { +): T & U & V & W & X & Y & Z => { const sources: Array = [object1, object2, object3, object4, object5, object6]; // Handle case when target is a string or something (possible in deep copy) @@ -90,15 +89,15 @@ export function assignDeep( // Return the modified object return target as any; -} +}; /** * Returns true if the given object is empty, false otherwise. * @param obj The Object. */ -export function isEmptyObject(obj: any): boolean { +export const isEmptyObject = (obj: any): boolean => { /* eslint-disable no-restricted-syntax, guard-for-in */ for (const name in obj) return false; return true; /* eslint-enable */ -} +}; diff --git a/packages/overlayscrollbars/src/support/utils/types.ts b/packages/overlayscrollbars/src/support/utils/types.ts index 9ae8f96..48c503a 100644 --- a/packages/overlayscrollbars/src/support/utils/types.ts +++ b/packages/overlayscrollbars/src/support/utils/types.ts @@ -3,15 +3,11 @@ import { PlainObject } from 'typings'; const ElementNodeType = Node.ELEMENT_NODE; const { toString, hasOwnProperty } = Object.prototype; -export function isUndefined(obj: any): obj is undefined { - return obj === undefined; -} +export const isUndefined = (obj: any): obj is undefined => obj === undefined; -export function isNull(obj: any): obj is null { - return obj === null; -} +export const isNull = (obj: any): obj is null => obj === null; -export const type: (obj: any) => string = (obj) => +export const type = (obj: any): string => isUndefined(obj) || isNull(obj) ? `${obj}` : toString @@ -19,35 +15,24 @@ export const type: (obj: any) => string = (obj) => .replace(/^\[object (.+)\]$/, '$1') .toLowerCase(); -export function isNumber(obj: any): obj is number { - return typeof obj === 'number'; -} +export const isNumber = (obj: any): obj is number => typeof obj === 'number'; -export function isString(obj: any): obj is string { - return typeof obj === 'string'; -} +export const isString = (obj: any): obj is string => typeof obj === 'string'; -export function isBoolean(obj: any): obj is boolean { - return typeof obj === 'boolean'; -} +export const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean'; -export function isFunction(obj: any): obj is (...args: any[]) => any { - return typeof obj === 'function'; -} +export const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function'; -export function isArray(obj: any): obj is Array { - return Array.isArray(obj); -} +export const isArray = (obj: any): obj is Array => Array.isArray(obj); -export function isObject(obj: any): boolean { - return typeof obj === 'object' && !isArray(obj) && !isNull(obj); -} +export const isObject = (obj: any): boolean => + typeof obj === 'object' && !isArray(obj) && !isNull(obj); /** * Returns true if the given object is array like, false otherwise. * @param obj The Object */ -export function isArrayLike(obj: any): obj is ArrayLike { +export const isArrayLike = (obj: any): obj is ArrayLike => { const length = !!obj && obj.length; const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq @@ -56,13 +41,13 @@ export function isArrayLike(obj: any): obj is Array ? length - 1 in obj : true : false; -} +}; /** * Returns true if the given object is a "plain" (e.g. { key: value }) object, false otherwise. * @param obj The Object. */ -export function isPlainObject(obj: any): obj is PlainObject { +export const isPlainObject = (obj: any): obj is PlainObject => { if (!obj || !isObject(obj) || type(obj) !== 'object') return false; let key; @@ -83,30 +68,30 @@ export function isPlainObject(obj: any): obj is PlainObject { /* eslint-enable */ return isUndefined(key) || hasOwnProperty.call(obj, key); -} +}; /** * Checks whether the given object is a HTMLElement. * @param obj The object which shall be checked. */ -export function isHTMLElement(obj: any): obj is HTMLElement { +export const isHTMLElement = (obj: any): obj is HTMLElement => { const instanceofObj = window.HTMLElement; return obj ? instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType : false; -} +}; /** * Checks whether the given object is a Element. * @param obj The object which shall be checked. */ -export function isElement(obj: any): obj is Element { +export const isElement = (obj: any): obj is Element => { const instanceofObj = window.Element; return obj ? instanceofObj ? obj instanceof instanceofObj : obj.nodeType === ElementNodeType : false; -} +}; diff --git a/packages/overlayscrollbars/tests/jest/support/cache.test.ts b/packages/overlayscrollbars/tests/jest/support/cache.test.ts index 6515ab9..3596aea 100644 --- a/packages/overlayscrollbars/tests/jest/support/cache.test.ts +++ b/packages/overlayscrollbars/tests/jest/support/cache.test.ts @@ -2,12 +2,10 @@ import { createCache } from 'support/cache'; const createUpdater = (updaterReturn: (i: number) => T) => { let index = 0; - const updater = jest.fn( - (): T => { - index += 1; - return updaterReturn(index); - } - ); + const updater = jest.fn((): T => { + index += 1; + return updaterReturn(index); + }); return updater; }; @@ -16,7 +14,7 @@ describe('cache', () => { test('creates and updates cache', () => { const updater = createUpdater((i) => `${i}`); const _initialValue = ''; - const [updateCache, getCurrentCache] = createCache( + const [updateCache, getCurrentCache] = createCache( { _initialValue, }, diff --git a/packages/overlayscrollbars/tests/jest/support/dom/events.test.ts b/packages/overlayscrollbars/tests/jest/support/dom/events.test.ts index fb5732f..c8c7509 100644 --- a/packages/overlayscrollbars/tests/jest/support/dom/events.test.ts +++ b/packages/overlayscrollbars/tests/jest/support/dom/events.test.ts @@ -1,7 +1,17 @@ -import { off, preventDefault, stopPropagation, stopAndPrevent, OnOptions } from 'support/dom/events'; +import { + off, + preventDefault, + stopPropagation, + stopAndPrevent, + OnOptions, +} from 'support/dom/events'; const testElm = document.body; -const mockEventListener = (passive?: boolean, add?: (...args: any) => any, remove?: (...args: any) => any) => { +const mockEventListener = ( + passive?: boolean, + add?: (...args: any) => any, + remove?: (...args: any) => any +) => { const originalAdd = testElm.addEventListener; const originalRemove = testElm.removeEventListener; const originalWindow = window.addEventListener; @@ -59,23 +69,31 @@ describe('dom events', () => { const removeFn = eventsModule.on(testElm, eventNames, eventListener, options); eventNames.split(' ').forEach((eventName, index) => { - expect(mockFnAdd).toHaveBeenCalledWith(eventName, once ? onceListeners[index] : eventListener, expectObjAdd); + expect(mockFnAdd).toHaveBeenCalledWith( + eventName, + once ? onceListeners[index] : eventListener, + expectObjAdd + ); }); removeFn(); eventNames.split(' ').forEach((eventName, index) => { - expect(mockFnRemove).toHaveBeenCalledWith(eventName, once ? onceListeners[index] : eventListener, expectObjRemove); + expect(mockFnRemove).toHaveBeenCalledWith( + eventName, + once ? onceListeners[index] : eventListener, + expectObjRemove + ); }); revert(); }; - beforeEach(() => { - return import('support/dom/events').then((module) => { + beforeEach(() => + import('support/dom/events').then((module) => { eventsModule = module; jest.resetModules(); - }); - }); + }) + ); [true, false].forEach((passiveSupport) => { describe(`passive event listeners support: ${passiveSupport}`, () => { diff --git a/packages/overlayscrollbars/tests/jest/support/utils/arrays.test.ts b/packages/overlayscrollbars/tests/jest/support/utils/arrays.test.ts index 2033788..8ee4065 100644 --- a/packages/overlayscrollbars/tests/jest/support/utils/arrays.test.ts +++ b/packages/overlayscrollbars/tests/jest/support/utils/arrays.test.ts @@ -301,18 +301,6 @@ describe('array utilities', () => { runEachAndClear(arr, ['a', 'b', 'c', 'd']); expect(arr.length).toBe(0); }); - - test('set', () => { - const set = new Set([jest.fn(), null, jest.fn(), undefined, jest.fn()]); - runEachAndClear(set, [1, 2, 3, 4], true); - set.forEach((fn) => { - if (fn) { - expect(fn).toHaveBeenCalledWith(1, 2, 3, 4); - } - }); - runEachAndClear(set, [1, 2, 3, 4]); - expect(set.size).toBe(0); - }); }); test('indexOf', () => { diff --git a/packages/overlayscrollbars/tests/jest/support/utils/types.test.ts b/packages/overlayscrollbars/tests/jest/support/utils/types.test.ts index 31eddd2..703f8a9 100644 --- a/packages/overlayscrollbars/tests/jest/support/utils/types.test.ts +++ b/packages/overlayscrollbars/tests/jest/support/utils/types.test.ts @@ -73,7 +73,9 @@ describe('types', () => { expect(type(new Number(3))).toBe('number'); expect(type('test')).toBe('string'); expect(type(new String('test'))).toBe('string'); + // eslint-disable-next-line prefer-arrow-callback expect(type(function () {})).toBe('function'); + expect(type(() => {})).toBe('function'); expect(type([])).toBe('array'); expect(type([])).toBe('array'); expect(type(new Date())).toBe('date'); diff --git a/packages/overlayscrollbars/types/overlayscrollbars.d.ts b/packages/overlayscrollbars/types/overlayscrollbars.d.ts index cf00ba1..013d705 100644 --- a/packages/overlayscrollbars/types/overlayscrollbars.d.ts +++ b/packages/overlayscrollbars/types/overlayscrollbars.d.ts @@ -173,7 +173,7 @@ type GeneralInitialEventListeners = InitialEventListeners; type GeneralEventListener = EventListener; interface OverlayScrollbarsStatic { (target: InitializationTarget | InitializationTargetObject, options?: PartialOptions, eventListeners?: GeneralInitialEventListeners): OverlayScrollbars; - plugin(osPlugin: Plugin | Plugin[]): void; + plugin(plugin: Plugin | Plugin[]): void; env(): Environment; } interface Environment {